delete.asm

来自「在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程」· 汇编 代码 · 共 51 行

ASM
51
字号
;单字节表格的删除算法
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 + =
减小字号Ctrl + -
显示快捷键?