题目描述:有一个首地址为mem的100个字的数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
代码:
data segment
data1 dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
dw 1,0,2,3,0,0,4,5,6,0
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
mov cx,100
mov bx,0
mov si,(100-1)*2
loop1:
cmp data1[bx],0
jz delete
add bx,2
loop loop1
jmp output
delete:
mov di,bx
loop2:
cmp di,si
jae next
mov ax,data1[di+2]
mov data1[di],ax
add di,2
jmp loop2
next:
mov data1[si],word ptr 0
loop loop1
output:
mov cx,100
mov bx,0
loop3:
mov dx,data1[bx]
add dx,30H
mov ah,02H
int 21h
add bx,2
mov dl,' '
mov ah,02h
int 21h
loop loop3
mov ah,4CH
int 21h
code ends
end start
在第一次写的这道题,是比较乱的,现在从新设计了一下。