ассемблер преобразования языка программы из шестнадцатеричного десятичного числа в десятичное с скорингом для цикла - PullRequest
0 голосов
/ 23 января 2019

Шестнадцатеричное число, предоставленное пользователем 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

Я действительно не уверен, почему приведенный выше код не выполняется правильно, и ему понадобится некоторая помощь или руководство в дальнейшем, преобразование из шестнадцатеричного в десятичное выполняется, но повторение его в цикле и вычисление результата - это то, что не приходитдо

...