汇编--将该线性表中内容为0FFFFH的项删除

本文通过汇编解决删除指定线性表内容的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
-->