本文通过汇编解决删除指定线性表内容的方法
STACKS SEGMENT STACK
DW 100H DUP(?)
TOP LABEL WORD
STACKS ENDS --定义栈
DATAS SEGMENT
LINK DW 10,1,2,3,4,5,6,0FFFFh,8,9,0FFFFh
BUFF DW 11 DUP(?)
DATAS ENDS --定义变量
CODES SEGMENT
ASSUME CS:CODE,SS:STACKS,DS:DATAS
MAIN PROC FAR
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
MOV AX,DATAS
MOV DS,AX
MOV BX,0 --BX用于记录BUFF的长度
LEA SI,LINK --将LINK的首地址传到SI
MOV CX,[SI] --将LINK字符串的长度传入CX
LEA DI,BUFF+2 --将BUFF串的第二个位置地址传给DI,第一位用来存长度,因为是DW,所以要加2
L1:
ADD SI,2 --指向LINK中的存的元素
MOV AX,[SI] --将元素存入AX中
MOV [SI],0 --将该元素变为零,之后会存入新的元素作为替代
CMP AX,0FFFFH --和0FFFFH比较,如果不相同则跳转至CUN
JNZ CUN
LOOP L1 --循环L1
JMP FUZHI
CUN:
MOV [DI],AX --将LINK中不与0FFFFH相同的值存入BUFF
ADD DI,2 --地址加2
INC BX --BX用于记录其长度
LOOP L1
FUZHI: --将BUFF中的元素存入LINK达到题目的目的
LEA SI,BUFF
MOV [SI],BX
LEA DI,LINK
MOV CX,BX
L2: ADD SI,2
ADD DI,2
MOV AX,[SI]
MOV [DI],AX
LOOP L2
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN