;程序实现的功能如下:
;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
;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