📄 delete.asm
字号:
;单字节表格的删除算法
FRONT EQU 40H ;表格首址。
NUMB DATA 31H ;已有元素个数存放单元。
I DATA 32H ;待删除元素的序号存放单元。
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV DPTR,#DAT ;设置单字节表格
MOV R0,#FRONT
MOV R2,#16
COPY: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R2,COPY
MOV NUMB,#0DH ;已经有13个数据
MOV I,#0AH ;准备删除序号为10的元素(第11个元素)
LCALL DELETE ;调用删除算法
STOP: LJMP STOP
DAT: DB 53H,87H,12H,9AH
DB 2FH,3CH,0A8H,0BCH
DB 37H,15H,8EH,0F2H
DB 0C3H,0,0,0
DELETE: SETB C ;初始化失败标志。
MOV A,NUMB ;表格空否?
JZ DELEND ;表格已空,删除失败。
MOV A,#FRONT;取表格首址。
ADD A,I ;加偏移量。
MOV R0,A ;得到删除的实际地址。
MOV A,NUMB ;删除位置超出范围否?
SETB C
SUBB A,I
JC DELEND ;位置不合理,删除失败。
JZ DEL ;不需要移动元素。
MOV R2,A ;保存需要移动元素的个数。
MOVS: INC R0
MOV A,@R0 ;取一个元素。
DEC R0
MOV @R0,A ;前移一个位置。
INC R0 ;调整指针。
DJNZ R2,MOVS ;移完需要移动的元素。
DEL: DEC NUMB ;元素个数减一。
CLR C ;删除成功。
DELEND: RET ;算法结束。
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -