题目描述:有一个首地址为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
在第一次写的这道题,是比较乱的,现在从新设计了一下。