Шестнадцатеричное число, предоставленное пользователем 5 раз в цикле, должно быть преобразовано в десятичное число. Это должно дать нам отображение правильного ответа, если введенные данные неверны и дают окончательный результат в конце цикла
model small
.stack 100H
.data
hexnumber db 10,13,'Enter a hex digit: $'
continue db 10,13,'Do you want to continue?: $'
errormsg db 10,13,'Illegal character, Enter 0..9 or A..F: $'
decimalnumber db 10,13,'In decimal it is: $'
.code
MAIN PROC
mov ax,@data
mov ds,ax
continue: ; start of loop
mov ah,9
mov dx,offset hexnumber
int 21h
mov ah,1
int 21h
mov cl,al
legal: ;Compare input to see if its less than 00H if its greater
;than AAH
cmp cl,00h ;cl < 00h
jl end_if ;yes, error msg
cmp cl,AAh ;compare cl >AAhh
jg end_if ;yes, error msg
jmp finally
end_if:
mov ah,9
lea dx,errormsg ; print error message
int 21h
jmp continue ; reenter a hex number
jmp legal ; jump back to test
finally:
; determine if number ; 0..9 and display
mov ah,9
lea dx,decimalnumber ; display decimalnumber
int 21h
mov ah,2
mov dl,cl ;display number
int 21h
; determine if number a..f and display
mov ah,9
lea dx,decimalnumber ; display decimalnumber
int 21h
mov ah,2
mov dl,cl ; display MSB for 'A' to ;'F'
int 21h
mov ah,2
sub cl,11H ; displayLSBfor'A'to'F'
int 21h
mov ah,9
lea dx,continue ; display continue
int 21h
mov ah,1
int 21h
mov bl,al
cmp bl,'Y' ;bl = Y
jne eoj ;no, end
je continue ;yes, loop back
eoj: ; return to DOS prompt
mov ah,4ch
int 21h
main endp
end MAIN
Я действительно не уверен, почему приведенный выше код не выполняется правильно, и ему понадобится некоторая помощь или руководство в дальнейшем, преобразование из шестнадцатеричного в десятичное выполняется, но повторение его в цикле и вычисление результата - это то, что не приходитдо