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

UptoLike

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

68
; Отобразить число на экране
mov SI,offset SpaceString
call ShowString
mov SI,offset OutAddress
call ShowString
@@GetNextChar:
; Отобразить курсор в новой позиции ввода
mov [ScreenColumn],47
mov AL,[CharacterCounter]
add [byte ptr ScreenColumn],AL
call SetCursorPosition
; Ожидать ввода следующего символа
call GetChar
cmp AL,0
jne @@Address
; Проанализировать код нажатой клавиши
cmp AH,B_Esc ;отмена ввода адреса
je @@GetAddressOrCommand
@@TestF10:
cmp AH,F10 ;"Выход"
jne @@TestRubout
mov [CommandByte],AH
jmp @@End
@@TestRubout:
cmp AH,B_RUBOUT ;"Забой"
jne @@TestEnter
cmp [CharacterCounter],0
je @@AddressError
; Передвинуть признак конца строки
; на разряд влево
dec DI
dec [CharacterCounter]
mov [byte ptr DS:DI],0
; Отобразить число на экране
mov SI,offset SpaceString
call ShowString
mov SI,offset OutAddress
call ShowString
jmp @@GetNextChar
@@TestEnter:
cmp AH,B_Enter ;завершение ввода числа
jne @@AddressError
mov [CommandByte],AH
mov SI,offset AddressString
call HexToBin32
mov [StartAddress],EAX
jmp short @@End
        ; Отобразить число на экране
        mov     SI,offset SpaceString
        call    ShowString
        mov     SI,offset OutAddress
        call    ShowString
@@GetNextChar:
        ; Отобразить курсор в новой позиции ввода
        mov     [ScreenColumn],47
        mov     AL,[CharacterCounter]
        add     [byte ptr ScreenColumn],AL
        call    SetCursorPosition
        ; Ожидать ввода следующего символа
        call    GetChar
        cmp     AL,0
        jne     @@Address

; Проанализировать код нажатой клавиши
        cmp     AH,B_Esc       ;отмена ввода адреса
        je      @@GetAddressOrCommand

@@TestF10:
        cmp    AH,F10         ;"Выход"
        jne    @@TestRubout
        mov    [CommandByte],AH
        jmp    @@End

@@TestRubout:
        cmp     AH,B_RUBOUT    ;"Забой"
        jne     @@TestEnter
        cmp     [CharacterCounter],0
        je      @@AddressError
        ; Передвинуть признак конца строки
        ; на разряд влево
        dec     DI
        dec     [CharacterCounter]
        mov     [byte ptr DS:DI],0
        ; Отобразить число на экране
        mov     SI,offset SpaceString
        call    ShowString
        mov     SI,offset OutAddress
        call    ShowString
        jmp     @@GetNextChar

@@TestEnter:
        cmp     AH,B_Enter     ;завершение ввода числа
        jne     @@AddressError
        mov     [CommandByte],AH
        mov     SI,offset AddressString
        call    HexToBin32
        mov     [StartAddress],EAX
        jmp short @@End


                            68