📄 insert.asm
字号:
;单字节表格的插入算法
FRONT EQU 40H ;表格首址。
MAX DATA 30H ;元素个数最大值存放单元。
NUMB DATA 31H ;已有元素个数存放单元。
I DATA 32H ;待插入元素的序号存放单元。
X DATA 33H ;待插入元素的数值存放单元。
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV MAX,#10H ;数据设定:最多16个元素
MOV NUMB,#0DH ;已经有13个数据
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 I,#0AH ;准备插入位置序号为10
MOV X,#5AH ;准备插入的数据为90
LCALL INSERT ;调用插入算法
STOP: LJMP STOP
DAT: DB 53H,87H,12H,9AH
DB 2FH,3CH,0A8H,0BCH
DB 37H,15H,8EH,0F2H
DB 0C3H,0,0,0
INSERT: SETB C ;计算MAX-NUMB-1
MOV A,MAX
SUBB A,NUMB ;表格满否?
JC INSEND ;表格已满,插入失败。
MOV A,#FRONT ;取表格首址。
ADD A,I ;加偏移量。
MOV R0,A ;得到插入的实际地址。
MOV A,NUMB ;插入位置超出范围否?
SUBB A,I
JC INSEND ;位置不合理,插入失败。
JZ INST ;不需要移动元素。
MOV R2,A ;保存需要移动元素的个数。
ADD A,R0
MOV R0,A ;指向新表尾位置。
MOVS: DEC R0
MOV A,@R0 ;取一个元素。
INC R0
MOV @R0,A ;后移一个位置。
DEC R0 ;调整指针。
DJNZ R2,MOVS ;移完需要移动的元素。
INST: MOV A,X ;取待插入元素的数值。
MOV @R0,A ;插入到指定位置。
INC NUMB ;元素个数加一。
CLR C ;插入成功。
INSEND: RET ;算法结束。
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -