在數據段中定義如下數據:
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