Информатика. Часть 3. Салахутдинов Н.В - 6 стр.

UptoLike

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:
;--- закрыть файл


Страницы