版权声明: https://blog.csdn.net/weixin_42000150/article/details/80659540
;将首地址为MEM的100个字的数组中所有为0的项删除
;并将后续项向前压缩,最后将数组剩余部分补上0
DATA SEGMENT
MEM DW 20 DUP(1,2,0,4,5)
COPY DW 100 DUP(0)
CRLF DB 0AH,0DH,'$'
DATA ENDS
STACK SEGMENT PARA STACK
DW 128 DUP(?)
TOP LABEL WORD
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
LEA SI,MEM
LEA DI,COPY
MOV CX,100
L0: MOV AX,[SI] ;从数组MEM中取数,判断是否为0,不为0则放入数组COPY中
CMP AX,0 ;为0时SI单独加2,不为0时DI,SI同时加2
JE L1
MOV [DI],AX
ADD DI,2
L1: ADD SI,2
LOOP L0
LEA SI,MEM ;将COPY数组复制到MEM数组
LEA DI,COPY
MOV CX,100
L4: MOV AX,[DI]
MOV [SI],AX
ADD DI,2
ADD SI,2
LOOP L4
MOV CX,100 ;以下输出验证功能正确性
LEA SI,MEM
L2: MOV DX,[SI]
ADD SI,2
ADD DL,30H
MOV AH,2
INT 21H
LOOP L2
MOV AH,9
LEA DX,CRLF
INT 21H
MOV CX,100
LEA DI,COPY
L3: MOV DX,[DI]
ADD DI,2
ADD DL,30H
MOV AH,2
INT 21H
LOOP L3
MOV AH,4CH
INT 21H
CODE ENDS
MAIN ENDP
END START
;并将后续项向前压缩,最后将数组剩余部分补上0
DATA SEGMENT
MEM DW 20 DUP(1,2,0,4,5)
COPY DW 100 DUP(0)
CRLF DB 0AH,0DH,'$'
DATA ENDS
STACK SEGMENT PARA STACK
DW 128 DUP(?)
TOP LABEL WORD
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
LEA SI,MEM
LEA DI,COPY
MOV CX,100
L0: MOV AX,[SI] ;从数组MEM中取数,判断是否为0,不为0则放入数组COPY中
CMP AX,0 ;为0时SI单独加2,不为0时DI,SI同时加2
JE L1
MOV [DI],AX
ADD DI,2
L1: ADD SI,2
LOOP L0
LEA SI,MEM ;将COPY数组复制到MEM数组
LEA DI,COPY
MOV CX,100
L4: MOV AX,[DI]
MOV [SI],AX
ADD DI,2
ADD SI,2
LOOP L4
MOV CX,100 ;以下输出验证功能正确性
LEA SI,MEM
L2: MOV DX,[SI]
ADD SI,2
ADD DL,30H
MOV AH,2
INT 21H
LOOP L2
MOV AH,9
LEA DX,CRLF
INT 21H
MOV CX,100
LEA DI,COPY
L3: MOV DX,[DI]
ADD DI,2
ADD DL,30H
MOV AH,2
INT 21H
LOOP L3
MOV AH,4CH
INT 21H
CODE ENDS
MAIN ENDP
END START