汇编:把寄存器AX的十六进制数转换成十进制形式输出

比如ax=7bh 则输出字符123。
原理:
ax为十六位寄存器,所以输出十进制数范围为0 - 65535,最大五位数,有如下算法:
65535/10000= 商6 余数5535
5535/1000= 商5  余数535
535/100= 商5  余数35
35/10=  商3  余数5
5/1=  商5  余数0
把每次所得商加上48即可得到相应数字的ASCII码

LOOP指令:
(CX)=(CX)-1或(ECX)=(ECX)-1;
 如果(CX)≠0或(ECX)≠0,转向“标号”所指向的指令,否则,终止循环,执行该指令下面的指令。

程序清单:

data    segment
divisors        DW 10000, 1000, 100, 10, 1
results          DB 0,0,0,0,0,"$"        ;存放五位数ASCII码
data ends

stack segment STACK
stack ends


code segment
assume cs:code,ds:data,ss:stack
start:
        mov     ax,data
        mov     ds,ax
        mov     ax,7bh        ;7bh 要显示的字符
        mov     si, offset divisors
        mov     di, offset results                    
        mov     cx,5  
aa:
        mov     dx,0           
        div     word ptr [si]   ;除法指令的被除数是隐含操作数,此处为dx:ax,商ax,余数dx
        add     al,48           ;商加上48即可得到相应数字的ASCII码
        mov     byte ptr [di],al       
        inc     di                               
        add     si,2                          
        mov     ax,dx                       
        loop    aa
        mov     cx,4   
        mov     di, offset results
bb:
        cmp     byte ptr [di],'0'   ;不输出前面的0字符   
        jne     print
        inc     di                          
        loop    bb
print:
        mov     dx,di                      
        mov     ah,9
        int     21h                  
        mov     ax,4C00h      
        int     21h
code ends

end start

 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值