❶ 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。