10進数を0から65535から16進数に変換するプログラムを使用していました。問題は、私のプログラムが4桁の16進数を出力しないことです。たとえば、FFFFの代わりに5FF、1111の代わりに711を出力しますが、間違いを見つけることができません。助けてください。
コードは次のとおりです。
;***************************************************************
; 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
ご回答ありがとうございます。:)