專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

數(shù)據(jù)傳送指令

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2007年09月17日   【字體:

表 3-2  數(shù)據(jù)傳送指令

操作碼

目標(biāo)操作數(shù)

可選擇的源操作數(shù)

說         明

MOV

A

Rn

direct

@Ri

DPTR

 Rn;direct;@Ri;# data

 A;direct;# data

 A;Rn;direct;@Ri;# data

 A;direct;# data

 # data16

 內(nèi)部傳送

 內(nèi)部傳送

 內(nèi)部傳送

 內(nèi)部傳送

 數(shù)據(jù)指針賦值

PUSH

POP

隱含(SP)

direct

 direct

 隱含(SP)

 壓棧,只能用直接尋址

 退棧,只能用直接尋址

XCH

A

 Rn; direct; @Ri

 內(nèi)部交換

XCHD

SWAP

A

A

 @Ri

 隱含A

 只交換低四位

 A的高、低四位互換

MOVX

A

@Ri

@DPTR

 @Ri; @DPTR

 A

 A

  A與外部數(shù)據(jù)存儲器間傳送

MOVC

A

 @A+DPTR; @A+PC

  讀外部程序存儲器

MOV

C

bit

 bit

 C

  Cy與可尋址位間傳送

 

1.      數(shù)據(jù)傳送指令的一般性說明

ê                 指令的一般格式:  操作碼  目標(biāo)操作數(shù),源操作數(shù)

操作碼  說明操作的性質(zhì)

操作內(nèi)容一般為   (目標(biāo)操作數(shù))(源操作數(shù))

ê                 8位操作數(shù)的形式有A、Rn、direct、@Ri、# data 等五種

16位操作數(shù)的形式有DPTR 與 # data16

1位操作數(shù)的形式有 C 與 bit

ê                 目標(biāo)與源應(yīng)同類型,且有規(guī)定的允許搭配,一般可逆。

A及direct可全搭配,@Ri、Rn不能相互搭配,# data只可作源.。

ê                 傳送指令一般不影響標(biāo)志位。

直接改寫PSW的情況除外,改寫Acc影響P標(biāo)志。

2.      內(nèi)部數(shù)據(jù)傳送指令(MOV)

ê                 內(nèi)部RAM、特殊功能寄存器(SFR)之間的數(shù)據(jù)傳送。

ê                 注意立即數(shù) #XXH與直接地址XXH 的區(qū)別。

ê                 @Ri指針使用要點(diǎn):①與循環(huán)配合,適用于連續(xù)數(shù)據(jù)區(qū)的操作。

②Ri應(yīng)先賦確定值。i=0,1。

③是XCHD指令唯一的源操作數(shù)。

 

3.      外部數(shù)據(jù)傳送(MOVX)

ê                 以指針方式讀、寫外部數(shù)據(jù)存儲器或I/O端口。

ê                 @DPTR提供16位地址指針,可訪問總線擴(kuò)展的整個(gè)64k空間。

ê                 @Ri只提供低8位地址指針,適用于256個(gè)地址的小規(guī)?偩擴(kuò)展。

或者由P2口以I/O方式提供高8位(頁) 地址,采用頁訪問模式。例如:

MOV   P2,#30H     ;由P2口提供高8位地址30H

MOV   R0,#0        ;低8位地址為00H

MOVX  A,@R0       ;讀(3000H)單元

 

ê                 應(yīng)用例:將內(nèi)部30H~40H單元的內(nèi)容送外部數(shù)據(jù)存儲器,從4000H單元開始存放。


MOV  R0,#30H

MOV  R2,#17

MOV  DPTR,#4000H

LOOP: MOV  A,@R0

MOVX  @DPTR,A

INC  R0

INC  DPTR

DJNZ  R2,LOOP

;設(shè)置(內(nèi)部)源指針初值

;設(shè)置循環(huán)計(jì)數(shù)器初值

;設(shè)置(外部)目標(biāo)指針初值

;循環(huán)入口,讀源數(shù)據(jù)

;寫目標(biāo)數(shù)據(jù)

;源指針下移

;目標(biāo)指針下移

;循環(huán)計(jì)數(shù)器減一,不為0則繼續(xù)循環(huán)


 

4.      讀外部程序存儲器(MOVC)

ê                 讀取外部程序存儲器中的數(shù)據(jù),用于查表。

ê                 MOVC  A,@A+PC   ;(A)((A)+(PC)+1)

PC為本指令的地址,取指令后加一。

變址偏移量(A)是8位無符號數(shù),因此查表的范圍在(PC)+1 ~ (PC)+255。

ê                 MOVC  A,@A+DPTR   ;(A)((A)+(DPTR))

DPTR是16位指針,因此查表的范圍為全64k空間。

ê                 應(yīng)用例:查Y(x)函數(shù)表。

3000H  MOV A,#表元素序號

3002H  ADD A,#表頭偏移量

3004H  MOVC A, @A+PC

¼¼

       ORG 30A0H

TABLE: DB 17,22,34,58,82,103

表頭偏移量=表頭地址-(MOVC指令地址+1)

 轉(zhuǎn)載須保留地址:http://www.torrancerestoration.com/mcu/280.html

5.      棧操作數(shù)據(jù)傳送指令(PUSH / POP)

ê                 堆棧在內(nèi)部RAM區(qū)。

ê                 PUSH和POP的對象可以是內(nèi)部RAM單元或SFR。

ê                 尋址方式只能用direct。例如,

PUSH 30H ;(SP)(SP)+1,((SP))(30H)

POP DPH  ;(DPH)((SP)),(SP)(SP)-1

 

6.       交換(XCH / XCHD /SWAP)

ê                 XCH 字節(jié)交換:A與內(nèi)部RAM單元或SFR交換。例如

XCH A,R2  ;(A)«(R2)

ê                 XCHD 半字節(jié)交換:A與內(nèi)部RAM單元進(jìn)行低四位交換,只能用寄存器間址@Ri。例如

XCHD A,@R1    ;(A)D0- D 3 «((R1))D0- D 3

ê                 SWAP A  ;(A)D0- D 3  «(A)D4- D 7

ê                 應(yīng)用例:拆字,將壓縮BCD碼擴(kuò)展為單字節(jié)BCD碼。


《堆棧數(shù)據(jù)傳送指令》

MOV  R0, #30H  ; 設(shè)立指針

MOV  A, #0     (A)=0

XCHD  A, @R0   ;(A)=0BH

MOV  R4, A    ;(R4)=0BH

XCH  A,30H    ;(A)=30H

SWAP  A       ;(A)=03H

MOV  R3,A     ;(R3)=03H

 

關(guān)閉窗口

相關(guān)文章