|
| | <!--插入廣告JS代碼--> | MOV指令在程序設(shè)計(jì)時(shí)使用最為頻繁,且使用非常靈活。使用時(shí)應(yīng)注意以下幾個(gè)問(wèn)題:
1、每條指令格式和功能制造廠家規(guī)定,用戶只能按規(guī)定使用,不得任意制造指令。例如:MOV R7,@R3這條語(yǔ)句是非法的,首先用于間接尋址的寄存器只能是R0或RI,其次用@Ri間接尋址不能直接送Rn.
2、要清楚每種尋址方式的尋址范圍。例如:MOV R0, #90H
MOV A, @R0
這段程序看似合理,但90H為P1的物理地址,而P1為特殊功能寄存器,只能直接尋址。又如:MOV 20H,0A1H直接尋址范圍雖為00H——0FFH,其中00H——7FH是內(nèi)部RAM的地址,而SFR中80H——0FFH地址,只有21個(gè)地址有效,如表2—4所示。

0A1H單元無(wú)定義,因此對(duì)0A1H的訪問(wèn)無(wú)意義。
3、以累加器A為目的寄存器的傳送指令會(huì)影響PSW中的奇偶標(biāo)志位,其余傳送指令對(duì)所有標(biāo)志位均無(wú)影響。
4、外部數(shù)據(jù)存儲(chǔ)器(或I/O)的讀寫(xiě)指令(MOVX)
(1)用@DPTR進(jìn)行間接尋址的指令
如 MOVX A,@DPTR
MOVX,@DPTR, A
DPTR為16位數(shù)據(jù)指針,該指令可尋址外部RAM 64KB范圍(0000H—0FFFFH)。地址低8位由P0口輸出,地址高8位由P2口輸出,數(shù)據(jù)通過(guò)P0口讀入或?qū)懗觥?
(2)用@Ri進(jìn)行間接尋址的指令
MOVX A, @Ri
MOVX @Ri,A
這類指令可尋址范圍是:
(1)若外部擴(kuò)展RAM小于等于256個(gè)單元,用@Ri間接尋址進(jìn)行數(shù)據(jù)傳送,8位地址線足夠使用。
(2)若外部擴(kuò)展較大的RAM區(qū)域,須用P2口輸出高8位地址,用@Ri表示低8位地址,P0口分時(shí)作低8位地址線和數(shù)據(jù)線,P2口應(yīng)事先預(yù)置。若設(shè)計(jì)循環(huán)程序,Ri被加到0或被減到0時(shí),必須考慮對(duì)P2口高8位地址進(jìn)位或借位的關(guān)系。
例如:若外部RAM中,(20FFH)=30H,(2100H)=15H,則執(zhí)行
MOV DPTR,#20FFH
INC DPTR
MOVX A,@DPTR
結(jié)果是外部RAM2100H單元內(nèi)容送A,(A)=15H,若
MOV P2, #20H
MOV R0, #0FFH
INC R0
MOVX A, @R0
結(jié)果是外部RAM2000H單元內(nèi)容送A,而不是2100H單元內(nèi)容送A。
注意:外部RAM之間不能直接傳送數(shù)據(jù),必須通過(guò)累加器A傳送。
|