MOV A ,@R0 取R0指向的地址中的数据到A
ANL A,#0FH ;高四位清零
ADD A,#16 ;加16
MOVC A, @A+PC ;查表,表的首地址为绝对地址PC+A
MOVC A,@A+PC就需要1个字节啊
查表指令距离表首地址的长度是字节数
用DPTR的汇编程序:
ORG 0100H
MOV 30H,#12H
MOV 31H,#34H
MOV 32H,#56H
MOV 33H,#78H
LCALL SUBRTE
ORG 1000H
SUBRTE: MOV R0,#30H ;置地址指针R0初值
MOV R1,#40H ;置地址指针R1初值
MOV R2,#4 ;置字节数
LOOP:MOV A,@R0 ;取16进制数
ANL A,#0FH ;屏蔽高4位
MOV DPTR,#TABLE ;
MOVC A,@A+DPTR;查表低4位转换为ASCⅡ码
MOV @R1,A ;送结果
INC R1;修改指针
MOV A,@R0;从新取16进制数
SWAP A;高4位与低4位互换
ANL A,#0FH ;取高4位
ADD A,#7
MOVC A,@A+PC ;查表高4位转换为ASCⅡ码
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
DEC R1
RET
TABLE: DB '012345678'
DB '9ABCDEF'
END
51单片机查表指令是:MOVC A,@A+DPTRDPTR是表的首地址,第二个A是偏移量。第一个A是取出的结果。
乘2相当于左移一位,即:RLC A(C需要先清零)
除2相当于右移一位,即:RRC A(C需要先清零)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)