Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2042742
  • 博文数量: 519
  • 博客积分: 10070
  • 博客等级: 上将
  • 技术积分: 3985
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-29 14:05
个人简介

只问耕耘

文章分类

全部博文(519)

文章存档

2016年(1)

2013年(5)

2011年(46)

2010年(220)

2009年(51)

2008年(39)

2007年(141)

2006年(16)

我的朋友

分类: C/C++

2006-05-29 14:32:46

比如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,转向“标号”所指向的指令,否则,终止循环,执行该指令下面的指令。

程序清单:
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

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

stack segment STACK
stack ends

end start

阅读(5860) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-11-22 20:44:09

谢谢,借用了!