汇编语言(八)之删除数组中为零的元素

汇编语言(八)之删除数组中为零的元素

删除数组中为零的元素

程序运行:

无输出

代码:


datas segment

      mem                dw  10  dup(0h,34h,0h,56h,32h,10h,3h,13h,0h,0h)
	  memCount           dw  ($-mem)/2

datas ends

stacks segment stack

    db  100h dup(?)

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks
main   proc  far
start:
       push ds
	   mov ax,0h
	   push ax
       mov ax,datas          ;初始化ds
	   mov ds,ax
       
	   mov si,0              ;数组下标索引
	   mov di,0              ;压缩后数组下标
	   mov cx,memCount
	   s:
	     mov ax,mem[si]
		 cmp ax,0            ;判断是否为0
		 je  s1              ;若为0,则跳转s1
		 cmp si,di           ;判断si和di是否为指向同一下标
		 je s2                ;若为0,则跳转s2
		 mov mem[di],ax      ;数组压缩
		 s2:
		 add di,type mem      ;压缩后数组下标加1
         s1:
		 add si,type mem      ;数组下标索引加1
       loop s 
	   
	   sub si,di              ;压缩剩下的空间长度
	   mov cx,si
	   s3:
	      mov mem[di],0        ;压缩剩下的空间置0
		  add di,type mem
          loop s3
		  
       ret
	   
main endp
codes ends

end main