这道汇编题访如何编写

来源:百度知道 编辑:UC知道 时间:2024/06/02 16:13:04
有一个首地址为MEM的字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
数据段定义如下:
DATA SEGMENT
MEM DW 10h DUP(0FFFFH),0,0, 0Ch DUP(0FFFFH),0,0, 16 DUP(0FFFFH)
DATA ENDS
算法描述如下:
1、SI,DI初始化指向MEM数组的第一个元素,循环计数CX初始化。
2、判断SI指向的元素是否为0,如不为0,将该元素拷贝到DI指向的位置,将DI指针后移1个字。如为0,直接转(3)。
3、SI指针后移一个字,循环计数CX-1。
4、CX不等于0则跳转到2,否则5
5、如DI不等于SI,将DI指向的数组元素置0,DI后移1个字,跳转到5。否则返回DOS

;实运行,符合题目要求,结果正确.
DATA SEGMENT
MEM DW 10h DUP(0FFFFH),0,0, 0Ch DUP(0FFFFH),0,0,16 DUP(0FFFFH)
CNT equ $-MEM
DATA ENDS

code segment
assume cs:code,ds:DATA
start:
mov ax,DATA
mov ds,ax
mov es,ax
cld
lea si,MEM
mov di,si
mov cx,CNT
shr cx,1
Q0:lodsw
cmp ax,0
jz Q1
stosw
Q1:loop Q0
cmp si,di
jz quit
sub si,di
mov cx,si
shr cx,1
xor ax,ax
rep stosw
quit:
mov ah,4ch
int 21h
code ends
end start