ВУЗ:
Составители:
MsgCloseFile db 'Ошибка закрытия файла'
db 0Dh, 0Ah, '$'
MsgNoDigital db 'Это не цифра!', 0Dh, 0Ah, '$'
Buffer db 0
Start:
;--- открыть файл для чтения
mov ah, 3Dh
mov al, 00h
mov dx, offset FileName
int 21h
jnc NoOpen ;ошибки нет
;--- обработка ошибки открытия файла
mov ah, 09h
mov dx, offset MsgOpenFile
int 21h
jmp Exit ;выйти из программы
NoOpen:
mov bx, ax ;сохранить номер файла
;--- читать первый символ из файла в буфер
mov ah, 3Fh
mov dx, offset Buffer
mov cx, 1
int 21h
jnc NoRead ;ошибки нет
;--- обработка ошибки чтения файла
mov ah, 09h
mov dx, offset MsgReadFile
int 21h
jmp Exit ;выйти из программы
NoRead:
;--- проверить считанный символ
mov al, Buffer
cmp al, '0' ;символ < 0 ?
jl NoDigit ;да
- перейти
cmp al, '9' ;символ > 9 ?
jg NoDigit ;да - перейти
;--- вывести считанный символ на экран
mov ah, 02h
mov dl, al
int 21h
jmp ByPass ;обойти
NoDigit:
;--- вывести сообщение
mov ah, 09h
mov dx, offset MsgNoDigital
int 21h
ByPass:
;--- закрыть файл
mov ah, 3Eh
int 21h
jnc Exit ;ошибки нет
;--- обработка ошибки закрытия файла
mov ah, 09h
mov dx, offset MsgCloseFile
int 21h
Exit:
ret ;возврат в ДОС
CODE ENDS
END Lesson
Блок-схема алгоритма:
Начало
Открыть файл
Считать
символ
НетДа
Код >
'0'?
Это не
цифра
Код >
'9'?
Вывести
символ
Закрыть
файл
НетДа
Конец
MsgCloseFile db 'Ошибка закрытия файла' mov ah, 3Eh
db 0Dh, 0Ah, '$' int 21h
MsgNoDigital db 'Это не цифра!', 0Dh, 0Ah, '$' jnc Exit ;ошибки нет
Buffer db 0 ;--- обработка ошибки закрытия файла
Start: mov ah, 09h
;--- открыть файл для чтения mov dx, offset MsgCloseFile
mov ah, 3Dh int 21h
mov al, 00h Exit:
mov dx, offset FileName ret ;возврат в ДОС
int 21h
jnc NoOpen ;ошибки нет CODE ENDS
;--- обработка ошибки открытия файла END Lesson
mov ah, 09h
mov dx, offset MsgOpenFile Блок-схема алгоритма:
int 21h
jmp Exit ;выйти из программы Начало
NoOpen:
mov bx, ax ;сохранить номер файла
;--- читать первый символ из файла в буфер Открыть файл
mov ah, 3Fh
mov dx, offset Buffer
mov cx, 1 Считать
int 21h символ
jnc NoRead ;ошибки нет
;--- обработка ошибки чтения файла
mov ah, 09h Да Код > Нет
mov dx, offset MsgReadFile '0'?
int 21h Да Нет
jmp Exit ;выйти из программы Код >
NoRead: '9'?
;--- проверить считанный символ Это не Вывести
mov al, Buffer цифра символ
cmp al, '0' ;символ < 0 ?
jl NoDigit ;да - перейти
cmp al, '9' ;символ > 9 ? Закрыть
файл
jg NoDigit ;да - перейти
;--- вывести считанный символ на экран
mov ah, 02h Конец
mov dl, al
int 21h
jmp ByPass ;обойти
NoDigit:
;--- вывести сообщение
mov ah, 09h
mov dx, offset MsgNoDigital
int 21h
ByPass:
;--- закрыть файл
