表 3-2 數據傳送指令
操作碼 |
目標操作數 |
可選擇的源操作數 |
說 明 |
MOV |
A Rn direct @Ri DPTR |
Rn;direct;@Ri;# data A;direct;# dataA;Rn;direct;@Ri;# data A;direct;# data # data16 |
內部傳送 內部傳送 內部傳送 內部傳送 數據指針賦值 |
PUSH POP |
隱含(SP) direct |
direct 隱含(SP) |
壓棧,只能用直接尋址 退棧,只能用直接尋址 |
XCH |
A |
Rn; direct; @Ri |
內部交換 |
XCHD SWAP |
A A |
@Ri 隱含A |
只交換低四位 A的高、低四位互換 |
MOVX |
A @Ri @DPTR |
@Ri; @DPTR A A |
A與外部數據存儲器間傳送 |
MOVC |
A |
@A+DPTR; @A+PC |
讀外部程序存儲器 |
MOV |
C bit |
bit C |
Cy與可尋址位間傳送 |
1. 數據傳送指令的一般性說明
ê 指令的一般格式: 操作碼 目標操作數,源操作數
操作碼 說明操作的性質
操作內容一般為 (目標操作數)←(源操作數)
ê 8位操作數的形式有A、Rn、direct、@Ri、# data 等五種
16位操作數的形式有DPTR 與 # data16
1位操作數的形式有 C 與 bit
ê 目標與源應同類型,且有規定的允許搭配,一般可逆。
A及direct可全搭配,@Ri、Rn不能相互搭配,# data只可作源.。
ê 傳送指令一般不影響標志位。
直接改寫PSW的情況除外,改寫Acc影響P標志。
2. 內部數據傳送指令(MOV)
ê 內部RAM、特殊功能寄存器(SFR)之間的數據傳送。
ê 注意立即數 #XXH與直接地址XXH 的區別。
ê @Ri指針使用要點:①與循環配合,適用于連續數據區的操作。
②Ri應先賦確定值。i=0,1。
③是XCHD指令唯一的源操作數。
3. 外部數據傳送(MOVX)
ê 以指針方式讀、寫外部數據存儲器或I/O端口。
ê @DPTR提供16位地址指針,可訪問總線擴展的整個64k空間。
ê @Ri只提供低8位地址指針,適用于256個地址的小規模總線擴展。
或者由P2口以I/O方式提供高8位(頁) 地址,采用頁訪問模式。例如:
MOV P2,#30H ;由P2口提供高8位地址30H
MOV R0,#0 ;低8位地址為00H
MOVX A,@R0 ;讀(3000H)單元
ê 應用例:將內部30H~40H單元的內容送外部數據存儲器,從4000H單元開始存放。
MOV R0,#30H
MOV R2,#17
MOV DPTR,#4000H
LOOP: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R2,LOOP
;設置(內部)源指針初值
;設置循環計數器初值
;設置(外部)目標指針初值
;循環入口,讀源數據
;寫目標數據
;源指針下移
;目標指針下移
;循環計數器減一,不為0則繼續循環
4. 讀外部程序存儲器(MOVC)
ê 讀取外部程序存儲器中的數據,用于查表。
ê MOVC A,@A+PC ;(A)←((A)+(PC)+1)
PC為本指令的地址,取指令后加一。
變址偏移量(A)是8位無符號數,因此查表的范圍在(PC)+1 ~ (PC)+255。
ê MOVC A,@A+DPTR ;(A)←((A)+(DPTR))
DPTR是16位指針,因此查表的范圍為全64k空間。
3000H MOV A,#表元素序號
3002H ADD A,#表頭偏移量
3004H MOVC A, @A+PC
¼¼
ORG 30A0H
TABLE: DB 17,22,34,58,82,103
表頭偏移量=表頭地址-(MOVC指令地址+1)
轉載須保留地址:http://www.zg4o1577.cn/mcu/280.html
5. 棧操作數據傳送指令(PUSH / POP)
ê 堆棧在內部RAM區。
ê PUSH和POP的對象可以是內部RAM單元或SFR。
ê 尋址方式只能用direct。例如,
PUSH 30H ;(SP)←(SP)+1,((SP))←(30H)
POP DPH ;(DPH)←((SP)),(SP)←(SP)-1
6. 交換(XCH / XCHD /SWAP)
ê XCH 字節交換:A與內部RAM單元或SFR交換。例如
XCH A,R2 ;(A)«(R2)
ê XCHD 半字節交換:A與內部RAM單元進行低四位交換,只能用寄存器間址@Ri。例如
XCHD A,@R1 ;(A)D0- D 3 «((R1))D0- D 3
ê SWAP A ;(A)D0- D 3 «(A)D4- D 7
ê 應用例:拆字,將壓縮BCD碼擴展為單字節BCD碼。
MOV R0, #30H ; 設立指針
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