什么是單片機(jī)的MOV 指令?示例集錦總結(jié)!
(片內(nèi)RAM)傳送指令MOV(Move)把一個(gè)字節(jié)、字或雙字的操作數(shù)從源位置傳送到目的位置,源操作數(shù)的內(nèi)容不變。可以實(shí)現(xiàn)立即數(shù)到通用寄存器或主存的傳送,通用寄存器與通用寄存器、主存或段寄存器之間的傳送,主存與段寄存器之間的傳送。該操作屬于復(fù)制性質(zhì),不屬于搬家性質(zhì)。
根據(jù)數(shù)據(jù)的存放區(qū)域可以將數(shù)據(jù)傳送指令分為以下幾類(lèi):
1)片內(nèi)RAM區(qū)和特殊功能寄存器的數(shù)據(jù)傳送,包括MOV指令、堆棧操作指令(PUSH、POP)和交換指令(SWAP、XCH和XCHD)。
2)片外RAM或I/O端口與累加器A之間的數(shù)據(jù)傳送,即MOVX指令。
3)ROM中數(shù)據(jù)向累加器A的數(shù)據(jù)傳送,即MOVC指令。
MOV指令的目的操作數(shù)可以是累加器A、工作寄存器Rn(n=0~7)、直接尋址操作數(shù)direct、寄存器間接尋址操作數(shù)@Ri(i=0或1)和數(shù)據(jù)指針寄存器(DPTR)等。表3-2為MCS-51單片機(jī)指令集中的MOV指令。
總結(jié)表3-2所列出的指令語(yǔ)法格式,可以得到圖3-1所示的MOV指令數(shù)據(jù)傳送方向,其中箭頭所指方向即為數(shù)據(jù)傳送方向。
圖3-1 MOV指令數(shù)據(jù)傳送方向
需要特別說(shuō)明的是,大多數(shù)書(shū)籍中將“MOV C,bit”和“MOV bit,C”歸入位操作指令,而本書(shū)將其與字節(jié)傳輸指令列入同一個(gè)表格,是為了便于進(jìn)行字節(jié)傳送指令和位傳送指令的對(duì)照,有利于讀者理解、記憶和區(qū)分這些指令。
【例3-18】以累加器A為目的操作數(shù)的MOV指令。指令如下:
在本例中,需要注意以下幾點(diǎn):
1)累加器A的尋址方式是寄存器尋址。
2)指令②和⑤中的源操作數(shù)的尋址方式不同,②中的72H前沒(méi)有“#”是直接地址,⑤中的72H前有“#”是立即數(shù)。
3)PSW是特殊功能寄存器,其字節(jié)地址是0D0H;特殊功能寄存器的名稱(chēng)是其字節(jié)地址的符號(hào)化,在指令中特殊功能寄存器的地址與其符號(hào)名稱(chēng)是等價(jià)的。
【例3-19】以Rn為目的操作數(shù)的MOV指令。指令如下:
【例3-20】以direct為目的操作數(shù)的MOV指令。指令如下:
在本例中,需要特別注意的是指令①和②的作用完全相同,而且源操作數(shù)均是累加器。但是以A表示的累加器是寄存器尋址,累加器的地址不會(huì)出現(xiàn)在指令的機(jī)器代碼中;以ACC表示的累加器是直接尋址,累加器的地址0E0H將出現(xiàn)在指令的機(jī)器代碼中。
【例3-21】以@Ri為目的操作數(shù)的MOV指令。指令如下:
【例3-22】以DPTR為目的操作數(shù)的MOV指令。指令如下:
MOV DPTR,#1234H;(DPTR)←1234H,即(DPH)←12H且(DPL)←34H
“MOV DPTR,#data”是MCS-51指令中唯一的16位數(shù)據(jù)傳輸指令,DPTR由兩個(gè)特殊功能寄存器DPH和DPL構(gòu)成,分別對(duì)應(yīng)DPTR的高字節(jié)和低字節(jié)。
【例3-23】位傳送指令。指令如下:
在本例中,20H和24H.0是同一個(gè)位地址;0D5H、F0、PSW.5和0D0H.5是同一個(gè)位,即PSW寄存器的第5位。
判斷MOV指令對(duì)錯(cuò)的基本方法是:檢查指令的格式是否符合表3-2的要求,不符合的即是錯(cuò)誤的。在例3-24中,指令?和?的錯(cuò)誤原因如下:
1)根據(jù)表3-2,位傳送指令中必然出現(xiàn)進(jìn)位標(biāo)志位CY,而指令?試圖完成進(jìn)位標(biāo)志位CY和字節(jié)型寄存器A之間的數(shù)據(jù)傳輸,但是由于CY和A數(shù)據(jù)類(lèi)型不一致,所以無(wú)法完成數(shù)據(jù)傳送。
2)指令?的源操作數(shù)和目的操作數(shù)雖然都是位尋址操作數(shù)。但是由表3-2可知,位傳送指令中必須有一個(gè)操作數(shù)為CY,所以單片機(jī)不能識(shí)別該指令。
注意事項(xiàng)
1.目的操作數(shù)要與源操作數(shù)類(lèi)型要一致,不能一個(gè)是字,一個(gè)是字節(jié)
2.目的操作數(shù)要和源操作數(shù)類(lèi)型之一必須要有明確的類(lèi)型
3.立即數(shù)不能作為目的操作數(shù)
4.不能用立即尋址方式給段寄存器傳數(shù)
5.源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù),即存儲(chǔ)單元之間不能用MOV指令直接傳送
6.CS和IP不能作為目的操作數(shù),但CS可以作為源操作數(shù)。
7.段寄存器之間不能用MOV指令直接傳送
8.在傳送字單元時(shí),遵循“高字節(jié)存放在高地址,低字節(jié)存放在低地址”的原則。