1. 程式人生 > >實訓組合語言設計——刪除陣列中所有為零的項

實訓組合語言設計——刪除陣列中所有為零的項

;程式實現的功能如下:
;100字陣列的地址為mem,編寫的程式刪除陣列中所有為零的項,
;並將後續向前壓縮,最後將陣列的剩餘部分補零。
data segment
 mem dw  20 dup(0,1, 2, 3, 4)
    n equ $-data
data ends
stack segment
 stapn dw 50 dup(?)
stack ends
 code segment
 main proc far
 assume ds:data,cs:code,ss:stack
start: 
 ;set up stack to retuan
    push ds
    sub ax,ax
    push ax
    ;set DS register to current segment
    mov ax,data
    mov ds,ax
    mov es,ax
    mov ax,stack
    mov ss,ax
    ;maim part of the code goes here
     mov cx,100
      lea di,mem  
      mov sp,di
      add sp,n     ;獲取陣列的最後字單元的地址加2
      push cx
      push di     
      add di,n
 again:mov dx,0    ;此部分迴圈完成陣列men後的100個字的內容
       mov [di],dx ;全部補零,以便在後續的程式只須刪除零項
       add di,2    ;而不必在陣列最後部分補零
       loop again
      pop di
      pop cx       ;記錄外迴圈次數
loop1:test [di],0ffffh
      jnz  continue
      mov si,di     ;記錄0項的ea
 next:mov ax,[si+2] ;實現向前壓縮
      mov [si],ax
      add si,2
      cmp si,sp
      jae continue
      jmp next
continue:add di,2
         loop loop1
   exit:ret  
 main endp
  ;--------------------------------------------------
 code ends
    ;************************************************
    end start