主题:如何把二进制数输出为16进制
jianyi
[专家分:0] 发布于 2008-05-05 21:54:00
如何把二进制数输出为16进制数??????????????????????????????????????求完整程序,可以输入的...
回复列表 (共2个回复)
沙发
beijingmaxiao [专家分:0] 发布于 2008-05-21 12:02:00
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,调用打印子过程就可以了。。注意数据不能超出范围。。
我来回复