回 帖 发 新 帖 刷新版面

主题:如何把二进制数输出为16进制

如何把二进制数输出为16进制数??????????????????????????????????????求完整程序,可以输入的...

回复列表 (共2个回复)

沙发

printf_ax_16  proc;以16进制打印ax寄存器中内容
 push ax
 push dx 
 push cx;保护寄存器
 mov ch,4;用来控制外循环
again0:
  mov cl,4;用来控制内循环 
  xor dx,dx;清零寄存器dx
again1: 
 shr ax,1
 rcl dx,1;通过移位使得ax寄存器的低4位进入了dx寄存器
 dec cl
 cmp cl,0
 jnz again1
printf_dx:
 add dx,30h
 cmp dx,'9'
 jna printf
 add dx,7h
printf:
 push ax
 mov ah,02h
 int 21h
 pop ax
 dec ch
 cmp ch,0
 ja again0
ret_ptr:
 pop cx
 pop dx
 pop ax
 ret 
printf_ax_16  endp;打印子程序定义完成




get_bx_10 proc;键盘输入10进制数,以回车结束,保存到bx寄存器中
 push dx
 push cx
 push ax
 mov cx,10
 xor bx,bx 
again:
 mov ah,01h
 int 21h
 cmp al,0dh
 jz ret_ptr;是回车,输入结束
 cmp al,'9'
 ja error_printf
 cmp al,'0'
 jb error_printf
 sub al,30h;转ASCII码为实际数据
 xor ah,ah;清零ah,使得ax中数据就是输入的数据
 xchg ax,bx;由于乘法默认是乘到ax所以,先把bx和ax互换
 mul cx;相当于互换前的bx乘以10
 xchg ax,bx;换回
 add bx,ax;把ax中数据加到bx 
 jmp again;继续循环
ret_ptr:
 pop ax
 pop cx
 pop dx
 ret 
get_bx_10 endp;如果你要输入数据是123,则应该输入1,2,3,回车
  

以上子过程,在同一个主程序时,要注意标号不要重复,先调用输入程序,输入数据进入bx,再把要打印的数据放进ax,调用打印子过程就可以了。。注意数据不能超出范围。。





板凳

希望给打点分啊,谢谢啊。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册