❶ MCS-51单片机查表程序
16和7是查表指令时的PC与数据表格之间的字节数
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
❷ 单片机查表指令相关问题
MOV DPTR,#TABLE :#TABLE 指向的是表格的首地址,把它给了DPTR
MOVC A,@A+DPTR:A是偏移量,加上首地址DPTR后就是你想要的了
比如说10个人排成一对
DPTR就是第一个人战的地方
再往后数几个就可以找到相应的人了
❸ 单片机查表指令MOVC A @A+DPTR
51单片机的指令系统中,是没有MOVC
A,@R0+DPTR的,查表指令只有两条:
1、MOVC
A,@A+DPTR
2、MOVC
A,@A+PC
❹ 单片机的查表指令(1)MOVC A,@A+PC(2)MOVC A,@A+DPTR怎样理解
(1): PC+A 的地址所在的值送到A寄存器中。
(2):DPTR+A的地址所在的值送到A寄存器中。
❺ 单片机查表程序
// 希望能达到你的要求
ORG 0000H
LJMP MAIN
ORG 0003H
ORG 0030H
MAIN:
MOV SP,#30H ; 设置堆栈
MOV R2,#41H ;A的ASCII码
MOV R3,#50H ;循环50次
MOV DPTR,#2000H ;表首地址
MOV A,#00H
GOTO:
PUSH ACC
MOVC A,@A+DPTR
XRL A,R2
JZ CONTROL ;如果是41H 则跳出保存
DJNZ R3,GOTO2 ;是否寻到了50H个地址 寻到了则退出(这时无有效的结果保存)_
LJMP EXIT
GOTO2:
POP ACC
INC A
AJMP GOTO
CONTROL:
POP ACC ;弹出A 即低位地址
MOV R1,A
MOV DPTR,#2051H
MOVX @DPTR,A ; 存放低位地址
INC DPTR
MOV A,#20H
MOVX @DPTR,A ; 存放高位地址
EXIT:
END
❻ 单片机汇编查表指令
mov xp0,#0
mov dptr,#tp0
LOOP: mov a,xp0
movc a,@a+dptr
mov p2,a
inc xp0
mov a,xp0
cjne a,#80,LOOP %循环查表中每一个直接的值,一共80次%
ret
tp0: DB 030H,048H,048H,048H,048H,048H,030H,000H
DB 010H,030H,010H,010H,010H,010H,07CH,000H
DB 000H,038H,044H,004H,018H,020H,07CH,000H
DB 030H,048H,008H,010H,008H,048H,030H,000H
DB 008H,018H,028H,048H,07CH,008H,008H,000H
DB 03CH,020H,020H,038H,004H,024H,018H,000H
DB 078H,040H,040H,078H,048H,048H,078H,000H
DB 078H,008H,008H,008H,008H,008H,008H,000H
DB 030H,048H,048H,030H,048H,048H,030H,000H
DB 030H,048H,048H,038H,008H,048H,030H,000H
❼ 关于单片机两种查表指令偏移量的算法 偏移量怎么计算啊帮帮忙
找到每条指令的字节数
把要跳过的所有指令的字节数都加起来就是偏移量
❽ 汇编语言里面的查表法是什么意思啊。在单片机里面是怎么运行的啊~~~~
51单片机汇编语言有一条查表指令是:MOVC A, @A+DPTR
它不是单独使用的,要和 DB 伪指令配套使用。
例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。
程序如下:
;-------------------------------------
MOV DPTR,#1000H
MOVC A,@A+DPTR
……
ORG 1000H
DB 0, 1, 4, 9, 16, 25......
;-------------------------------------
“DB”,在ROM 1000H中,顺序存放了一系列的“平方”数据。
MOVC A,@A+DPTR指令中A如果等于0,就会在“平方”数据中取出第0个,就是0;
MOVC A,@A+DPTR指令中A如果等于1,就会在“平方”数据中取出第1个,就是1;
MOVC A,@A+DPTR指令中A如果等于2,就会在“平方”数据中取出第2个,就是4;
MOVC A,@A+DPTR指令中A如果等于3,就会在“平方”数据中取出第3个,就是9;
……
MOVC A,@A+DPTR指令中A如果等于9,就会在“平方”数据中取出第9个,就是81。
❾ 单片机查表程序编写 急!
org 0000h
mov 30h, #1
mov 31h, #3
mov 32h, #5
mov 33h, #7
mov 34h, #9
mov 35h, #2
mov 36h, #4
mov 37h, #6
mov 38h, #8
mov 39h, #10
call SQRT
sjmp $
;查表法求平方的程序如下。
SQRT:
MOV R0, #30H
MOV R1, #40H
MOV R2, #10
LOOP:
MOV A, @R0
ADD A, #S_TAB - ($ + 4)
MOVC A, @A + PC
MOV @R1, A
INC R0
INC R1
DJNZ R2, LOOP
RET
S_TAB:
DB 1, 4, 9, 16, 25, 36, 49, 64, 81, 100
;完
❿ 单片机查表程序
DEC A
因为要用自然数作为表的偏移,而自然数是从1开始的、表格偏移是从0开始的,所以当然要减1咯。例如要查2的平方,实际就是要查找表格偏移+1的元素。
RL A
因为表格每个元素是两个字节,所以偏移地址要乘以2。还是以查2的平方为例,它对应于表格偏移+1的元素,但因为每个元素占用2个字节,所以地址偏移量实际是(+1)×2 = +2h。