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