实训汇编语言设计——删除数组中所有为零的项

;程序实现的功能如下:
;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             
       
      
            
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值