;
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(?)
TOPLABEL 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
JEL2
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
推荐阅读
- 汇编语言(3) 条件处理
- 汇编语言(4)整数运算
- 汇编语言(5)--高级过程
- ARM|GNU ARM中的汇编指令.word
- 本实验题目(将一个文件myprog.txt里面的内容中的小写字母全部转化为大写,其他字符保持不变,且不能使用临时文件。(对前面一道题目的改进版本))
- Link指向一个字线性表,其中的首单元保存线性表的长度,编制程序 ;将该线性表中内容为0FFFFH的项删除,并更新线性表长度 ;线性表长度是指线性表中实际
- 进制转化(从键盘接收一个4位的十进制数,将它转化为16进制并输出)
- 试编写一个程序,实现对N字节的NUM的值求补(类似NEG的操作),并把求反后的值仍保存在NUM中。求补即是取反后加1