51單片機具有兩條查表指令,用于從 ROM 中讀出預(yù)存的數(shù)據(jù):
MOVC A, @A + PC
MOVC A, @A + DPTR
其中前一條指令的用法,比較難,使用的時候,需要計算一個“偏移量”。不了解“指令的字節(jié)數(shù)”的人,都不清楚應(yīng)該如何計算。
最佳答案:
51單片機匯編語言有一條查表指令是:
MOVC A, @A + DPTR
它不是單獨使用的,要和 DB 偽指令配套使用。
例如:若累加器A中有一個0~9的數(shù),請用查表法求出該數(shù)的平方值,設(shè)平方表表頭地址為1000H。
程序如下:
;-------------------------------------
MOV DPTR, #1000H
MOVC A, @A + DPTR
……
ORG 1000H
DB 0, 1, 4, 9, 16, 25......
;-------------------------------------
DB 偽指令從 ROM 1000H 開始,順序存放了一系列的“平方”數(shù)據(jù)。
MOVC A, @A+DPTR 指令中的A,如果等于0,就會在“平方”數(shù)據(jù)中取出第0個,就是0;
MOVC A, @A+DPTR 指令中的A,如果等于1,就會在“平方”數(shù)據(jù)中取出第1個,就是1;
MOVC A, @A+DPTR 指令中的A,如果等于2,就會在“平方”數(shù)據(jù)中取出第2個,就是4;
MOVC A, @A+DPTR 指令中的A,如果等于3,就會在“平方”數(shù)據(jù)中取出第3個,就是9;
……
MOVC A, @A+DPTR 指令中的A,如果等于9,就會在“平方”數(shù)據(jù)中取出第9個,就是81。
-------------------------------
==============================================================
后記:
這條指令的用法,相對前一條就簡單了,事先并不需要計算“偏移量”。但是這條指令必須要使用寄存器DPTR。
大家知道,凡是涉及到片外RAM存儲單元的時候,基本上都要使用DPTR,這個DPTR寄存器通常是比較“繁忙”的,它形成了一個片內(nèi)、片外之間,數(shù)據(jù)傳傳輸?shù)摹捌款i”。因此在讀取ROM數(shù)據(jù)的時候,能夠不用這后一條指令,就不要用它,應(yīng)該盡量使用前一條指令。
==============================================================