ВУЗ:
Составители:
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: ;--- закрыть файл