Link指向一个字线性表,其中的首单元保存线性表的长度,编制程序 ;将该线性表中内容为0FFFFH的项删除,并更新线性表长度 ;线性表长度是指线性表中实际元素的个数,这里这里不包括首单元

版权声明: 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

ADDC:

         INC CX

         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

猜你喜欢

转载自blog.csdn.net/weixin_42000150/article/details/80664382
今日推荐