版权声明: https://blog.csdn.net/weixin_42000150/article/details/80664382
;Link指向一个字线性表,其中的首单元保存线性表的长度,编制程序
;将该线性表中内容为0FFFFH的项删除,并更新线性表长度
;线性表长度是指线性表中实际元素的个数,这里这里不包括首单元
;删除要求项后应更新首单元,输出线性表时不应包含0FFFFH项
;而其他项的先后次序保持不变
DATA SEGMENT
Link DW 16,12,2,4,82,0FFFFH,92,92,0FFFFH,999,99,100,0FFFFH,98,58,0FFFFH,7
FINAL DW $
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,Link
L3: ADD SI,2 ;SI指向找到的0FFFFH项
CMP SI,FINAL
JAE EXIT0
MOV AX,[SI]
CMP AX,0FFFFH
JNE L3
MOV DI,SI ;用DI往后找到非0FFFFH项覆盖SI指向的0FFFFH项
L2: ADD DI,2
CMP DI,FINAL
JAE EXIT0
MOV AX,[DI]
CMP AX,0FFFFH
JE L2
MOV BX,[SI]
MOV [SI],AX
MOV [DI],BX
JMP L3
EXIT0: ;统计线性表有效元素个数,包含首单元和实际元素
LEA SI,Link
MOV BX,[SI]
INC BX
XOR CX,CX
EXIT1:
MOV AX,[SI]
CMP AX,0FFFFH
JNE ADDC
EXIT2:
LEA DI,Link
DEC CX ;首单元的值为实际元素的个数,故要减去首单元本身,即减1
MOV [DI],CX
JMP EXIT
CMP CX,BX
JAE EXIT2
ADD SI,2
JMP EXIT1
EXIT:
INC CX ;输出时首单元的内容一起输出,故加1
MOV BX,10
SUB DI,2
L6: PUSH CX ;多个多位十进制数的输出
ADD DI,2
MOV AX,[DI]
XOR CX,CX
L4: XOR DX,DX
DIV BX
PUSH DX
INC CX
CMP AX,0
JNE L4
L5: POP DX
ADD DL,30H
MOV AH,2
INT 21H
LOOP L5
MOV AH,9
LEA DX,CRLF
INT 21H
POP CX
LOOP L6
MOV AH,4CH
INT 21H
CODE ENDS
MAIN ENDP
END START
;将该线性表中内容为0FFFFH的项删除,并更新线性表长度
;线性表长度是指线性表中实际元素的个数,这里这里不包括首单元
;删除要求项后应更新首单元,输出线性表时不应包含0FFFFH项
;而其他项的先后次序保持不变
DATA SEGMENT
Link DW 16,12,2,4,82,0FFFFH,92,92,0FFFFH,999,99,100,0FFFFH,98,58,0FFFFH,7
FINAL DW $
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,Link
L3: ADD SI,2 ;SI指向找到的0FFFFH项
CMP SI,FINAL
JAE EXIT0
MOV AX,[SI]
CMP AX,0FFFFH
JNE L3
MOV DI,SI ;用DI往后找到非0FFFFH项覆盖SI指向的0FFFFH项
L2: ADD DI,2
CMP DI,FINAL
JAE EXIT0
MOV AX,[DI]
CMP AX,0FFFFH
JE L2
MOV BX,[SI]
MOV [SI],AX
MOV [DI],BX
JMP L3
EXIT0: ;统计线性表有效元素个数,包含首单元和实际元素
LEA SI,Link
MOV BX,[SI]
INC BX
XOR CX,CX
EXIT1:
MOV AX,[SI]
CMP AX,0FFFFH
JNE ADDC
EXIT2:
LEA DI,Link
DEC CX ;首单元的值为实际元素的个数,故要减去首单元本身,即减1
MOV [DI],CX
JMP EXIT
ADDC:
INC CX
JAE EXIT2
ADD SI,2
JMP EXIT1
EXIT:
INC CX ;输出时首单元的内容一起输出,故加1
MOV BX,10
SUB DI,2
L6: PUSH CX ;多个多位十进制数的输出
ADD DI,2
MOV AX,[DI]
XOR CX,CX
L4: XOR DX,DX
DIV BX
PUSH DX
INC CX
CMP AX,0
JNE L4
L5: POP DX
ADD DL,30H
MOV AH,2
INT 21H
LOOP L5
MOV AH,9
LEA DX,CRLF
INT 21H
POP CX
LOOP L6
MOV AH,4CH
INT 21H
CODE ENDS
MAIN ENDP
END START