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

 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