假设AX=59H BX=0(16进制数)——(10进制=89)
这个程序最好写个子程序.
loop:
mov a,AX
sub a,1
mov AX,A
mov a,BX ;减C标志
Sbc a,0h
mov BX,A
snz c 判断BX带标志-0是否借位 借位就跳出循环 不借位就进行+1 daa模式
jmp END
mov a,1 ;减得断表示16进制的数还不=0 所以继续加1 如果需要3个寄存器放数据的
add a,al ;后面加写寄存器和BL的ADC模式一样
daa al 十进制转换;
mov a,0
adc a,bl ; 带C标志加
daa bl 十进制转换;
jmp loop
END :
ret
用汇编语言将十六进制数转化为十进制数输出?
方法太多了。
下图程序,是将十六进制数循环除以 10,余数变换成 ASCII 保存起来。
最后用 9 号功能调用,显示十进制字符串。
采用除 10 求余压栈,最后在逐一出栈进行显示,至于实现的原理,拿个实际数据单步走一边就能看明白了。
参考如下:
;display the unsigned integer value in AX
dec2asc proc
push ax
push dx
push cx
mov dx, -1 ; flag of ending
push dx ; flag to stack
mov cx, 10
l_div10:
xor dx, dx
div cx ; DX:AX / CX
push dx
test ax, ax
jne l_div10
mov cx, -1
mov ah, 2 ; display character in DL
l_disp:
pop dx
cmp dx, cx
je l_ret
add dl, '0' ; one-digit value turns to character
int 21h ; display the digit
jmp l_disp
l_ret:
pop cx
pop dx
pop ax
ret
dec2asc endp