Системное программное обеспечение. Особенности программирования 32-разрядных процессоров. Рощин А.В. - 67 стр.

UptoLike

Составители: 

67
mov [ScreenString],21
@@GetAddressOrCommand:
; Инициализировать переменные
; Обнулить счетчик цифр
mov [CharacterCounter],0
; Очистить строку
mov DI,offset AddressString
mov [byte ptr DS:DI],0
; Очистить позицию ввода (забить пробелами)
mov SI,offset SpaceString
call ShowString
; Установить курсор в позицию ввода
mov [ScreenColumn],47
mov AL,[CharacterCounter]
add [byte ptr ScreenColumn],AL
call SetCursorPosition
; Ввести цифру или команду
call GetChar
; Адрес или команда?
cmp AL,0
jz @@Command
; Введена первая цифра числа
; ВВОД АДРЕСА В ШЕСТНАДЦАТЕРИЧНОМ КОДЕ
@@Address:
; Проверка на диапазон '0'-'9'
cmp AL,'0'
jb @@AddressError
cmp AL,'9'
jbe @@WriteChar
; Проверка на диапазон 'A'-'F'
cmp AL,'A'
jb @@AddressError
cmp AL,'F'
jbe @@WriteChar
; Проверка на диапазон 'a'-'f'
cmp AL,'a'
jb @@AddressError
cmp AL,'f'
ja @@AddressError
@@WriteChar:
; Проверяем количество цифр
cmp [CharacterCounter],8
jae @@AddressError
inc [CharacterCounter]
; Записываем цифру в число
mov [DS:DI],AL
inc DI
; Передвинуть признак конца строки
; в следующий разряд
mov [byte ptr DS:DI],0
        mov     [ScreenString],21
@@GetAddressOrCommand:
; Инициализировать переменные
        ; Обнулить счетчик цифр
        mov     [CharacterCounter],0
        ; Очистить строку
        mov     DI,offset AddressString
        mov     [byte ptr DS:DI],0
        ; Очистить позицию ввода (забить пробелами)
        mov     SI,offset SpaceString
        call    ShowString
        ; Установить курсор в позицию ввода
        mov     [ScreenColumn],47
        mov     AL,[CharacterCounter]
        add     [byte ptr ScreenColumn],AL
        call    SetCursorPosition
        ; Ввести цифру или команду
        call    GetChar
        ; Адрес или команда?
        cmp     AL,0
        jz      @@Command
        ; Введена первая цифра числа

; ВВОД АДРЕСА В ШЕСТНАДЦАТЕРИЧНОМ КОДЕ
@@Address:
        ; Проверка на диапазон '0'-'9'
        cmp     AL,'0'
        jb      @@AddressError
        cmp     AL,'9'
        jbe     @@WriteChar
        ; Проверка на диапазон 'A'-'F'
        cmp     AL,'A'
        jb      @@AddressError
        cmp     AL,'F'
        jbe     @@WriteChar
        ; Проверка на диапазон 'a'-'f'
        cmp     AL,'a'
        jb      @@AddressError
        cmp     AL,'f'
        ja      @@AddressError
@@WriteChar:
        ; Проверяем количество цифр
        cmp     [CharacterCounter],8
        jae     @@AddressError
        inc     [CharacterCounter]
        ; Записываем цифру в число
        mov     [DS:DI],AL
        inc     DI
        ; Передвинуть признак конца строки
        ; в следующий разряд
        mov     [byte ptr DS:DI],0


                            67