如果要将统计的结果显示出来,程序如下:
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