|
|
#9
取名字2015-05-05 22:05
如果要将统计的结果显示出来,程序如下:
assume cs:code,ds:data
data segment
MESSAGE DB 'Zero has been counted,the number is '
NUMBER DB 3 DUP (?)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0ff37h
mov bx,ax
xor dx,dx
mov si,0 ;si用作变址寄存器,以便将统计后0的个数所转化的ASCII码存入NUMBER处。
mov cx,16
s1:
shr bx,1
jc continue
inc dx
continue:
loop s1
mov ax,dx ;将dx中统计的0的个数传送入ax中,因为后面的“AAA”指令要用到ax寄存器。
aaa ;将ax中的数值进行调整,转化为两个非压缩BCD码。
cmp dx,0ah ;判断0的个数是否大于等于10个,以便正确的存储入NUMBER处并显示。大于10就要分别存储十位和个位的值,否则只需要存储个位的值。
jb s2
or ah,30h ;将ah处存放的数字(0的个数的十位数字)转化为ASCII码
mov NUMBER[si],ah ;存入NUMBER处
inc si
s2:
or al,30h ;将al处存放的数字(0的个数的个位数字)转化为ASCII码.
mov NUMBER[si],al
mov NUMBER[si+1],'$' ;存储字符串结束符.
mov ah,09h
lea dx,MESSAGE
int 21h ;调用int 21h的09h号功能显示字符串
mov ax,4c00h
int 21h
code ends
end start
|