只问耕耘
分类: 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