我正在使用我的程序,它应该将十进制数字从 0 到 65535 转换为十六进制。问题是我的程序不会打印 4 位十六进制数字。例如,它将打印 5FF 而不是 FFFF 或 711 而不是 1111,我找不到错误。请帮忙。
继承人的代码:
;***************************************************************
; decimal to hexadecimal
;***************************************************************
.model small
bufSize EQU 121
.stack 100h
.data
bufSize DB bufSize
read DB ? ;how many symbols
buf DB bufSize dup (?)
msg DB 'Please, enter decimal digit: $'
enterr DB 13, 10, '$'
errormsg DB 'wrong input $'
form DB 'answer is: $'
.code
begin:
MOV ax, @data
MOV ds, ax
;****reads line****
MOV ah, 9
MOV dx, offset msg
INT 21h
MOV ah, 0Ah
MOV dx, offset bufSize
INT 21h
MOV ah, 9
MOV dx, offset enterr
INT 21h
;****algorythm****
XOR ax, ax
MOV cl, read ;how many symbols
MOV bx, offset buf ;first symbol to bx
check:
CMP cl, 0
MOV ah, 9
JNE loop0
MOV dx, offset errormsg
INT 21h ;spausdiname rezultato žinutę
JE ending
errorr:
MOV ah, 9
MOV dx, offset errormsg
INT 21h ;spausdiname rezultato žinutę
JMP ending
loop0:
PUSH ax
PUSH dx
XOR ax,ax
XOR dx,dx
JMP loop1
loop1:
MOV dh,0Ah
MUL dh
MOV dl,[bx]
cmp dl, '0'
JB errorr
cmp dl, '9'
JA errorr
SUB dl,30h
ADD al,dl
loop2:
INC bx
DEC cl
CMP cl, 0
JNE loop1
MOV cx, 16
PUSH '$$'
Division:
MOV dx, 0
DIV cx ;[DX,AX]:10 = AX(remainder DX)
PUSH dx
CMP ax, 0
JA Division
;printing
MOV ah, 9
MOV dx, offset form
INT 21h
MOV ah, 2
Print:
POP dx
CMP dx, "$$"
JE ending
CMP dx, 9
JNBE above
less:
ADD dl, '0'
INT 21h
JMP Print
above:
ADD dl, '7'
INT 21h
JMP Print
pop dx
pop ax
ending:
MOV ah, 4Ch
MOV al, 0
INT 21h
END begin
谢谢您的回答。:)