編寫一個子程序統計數據段中定義的前8行數據中每行字節數據爲0的個數。

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章