在数据段中定义如下数据:
data segment
db 68h, 10h, 0A7h, 00h, 8Bh, 01h, 70h, 00h
db 16h, 00h, 0A7h, 03h, 8Bh, 01h, 70h, 00h
db 8Bh, 01h, 70h, 00h,0CCh, 06h, 10h, 02h
db 53h, 07h, 010h, 02h,0FFh, 03h, 10h, 02h
db 59h, 07h, 10h, 02h, 0Ah, 04h, 10h, 02h
db 3Ah, 00h, 0A7h, 03h, 54h, 00h,0A7h, 03h
db 6Eh, 00h, 0A7h, 03h, 88h, 00h,0A7h, 03h
db 0A2h,00h, 0A7h, 03h,0FFh, 03h, 10h, 02h
db 0,0,0,0,0,0,0,0
data ends
编写一个程序统计数据段中定义的前8行数据中每行字节数据为0的个数。统计后,将个数填充在第9行对应的位置。 在程序中需要需要编写一个子程序,该子程序定义如下:
子程序定义:
名称:count
功能:统计一段内存中字节数据为某个标准值的个数
参数:ds:si指向数据起始位置
cx是需要统计的字节数
al为标准值
返回值:dx 返回字节数据为0的个数
assume cs:code ,ds:data
data segment
db 68h, 10h, 0A7h, 00h, 8Bh, 01h, 70h, 00h
db 16h, 00h, 0A7h, 03h, 8Bh, 01h, 70h, 00h
db 8Bh, 01h, 70h, 00h,0CCh, 06h, 10h, 02h
db 53h, 07h, 010h, 02h,0FFh, 03h, 10h, 02h
db 59h, 07h, 10h, 02h, 0Ah, 04h, 10h, 02h
db 3Ah, 00h, 0A7h, 03h, 54h, 00h,0A7h, 03h
db 6Eh, 00h, 0A7h, 03h, 88h, 00h,0A7h, 03h
db 0A2h,00h, 0A7h, 03h,0FFh, 03h, 10h, 02h
db 0,0,0,0,0,0,0,0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
mov di,0
mov cx,8
s0:call count
mov byte ptr ds:[di+64],dx
inc di
mov dx,0
loop s0
mov ah,4ch
int 21h
; 子程序定义:
; 名称:count
; 功能:统计一段内存中字节数据为某个标准值的个数
; 参数:ds:si指向数据起始位置
; cx是需要统计的字节数
; al为标准值
; 返回值:dx 返回字节数据为0的个数
count:
push cx
push ax
mov dx,0
mov cx,8
s: mov al,ds:[si]
mov ah,0
cmp ax,0 ;比较为0 跳转
je ok
dec cx
inc si
jcxz ok2
jmp short s
ok:inc dx
dec cx
inc si
jcxz ok2
jmp short s
ok2:pop ax
pop cx
ret
code ends
end start