0
点赞
收藏
分享

微信扫一扫

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


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