📄 let2.asm
字号:
;多字节二维数组的赋值算法
FRONT EQU 2000H ;二维数组存放首址。
M EQU 6 ;二维数组的行数。
N EQU 8 ;二维数组的列数。
SIZE EQU 3 ;每个元素所占字节数。
I DATA 30H ;待赋值数组元素的行号存放单元。
J DATA 31H ;待赋值数组元素的列号存放单元。
X EQU 32H ;待赋值数组元素的数值存放单元首址。
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV I,#3 ;数据设定:准备将行号为3
MOV J,#5 ;列号为5的数据元素
MOV X,#08H ;赋值为085AA5H
MOV X+1,#5AH
MOV X+2,#0A5H
LCALL LET ;调用赋值算法
STOP: LJMP STOP
LET: SETB C
MOV A,#N
SUBB A,J
JC LETEND ;待赋值数组元素的列号超范围。
SETB C
MOV A,#M
SUBB A,I
JC LETEND ;待赋值数组元素的行号超范围。
MOV DPTR,#FRONT;取数组首址。
MOV A,I ;计算偏移元素的个数。
MOV B,#N
MUL AB
ADD A,J
MOV R2,A
CLR A
ADDC A,B
XCH A,R2
MOV B,#SIZE ;按每个元素所占字节数计算偏移量。
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,R2
MOV B,#SIZE
MUL AB
ADD A,DPH
MOV DPH,A ;得到待赋值元素的实际地址。
MOV R0,#X ;指向待赋值元素的数值存放单元。
MOV R2,#SIZE;传送一个完整的数据。
LETS: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R2,LETS
CLR C ;赋值成功。
LETEND: RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -