如何用汇编语言将十六进制数转化为十进制数输出?

2024-12-27 20:55:09
推荐回答(3个)
回答1:

假设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

回答2:

用汇编语言将十六进制数转化为十进制数输出?

方法太多了。

下图程序,是将十六进制数循环除以 10,余数变换成 ASCII 保存起来。

最后用 9 号功能调用,显示十进制字符串。

回答3:

  采用除 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