文章目錄
-
- 一、片内RAM資料轉移指令 MOV
-
- MOV A, XXX
- MOV Rn, XXX
- MOV direct, XXX
- MOV @Ri, XXX
- MOV DPTR XXX
- 二、片外RAM資料轉移指令 MOVX
-
- MOVX XXX XXX
- 三、片内片外ROM資料轉移指令 MOVX
-
- MOVC XXX XXX
- 四、棧指令 PUSH POP
-
- PUSH direct
- POP direct
- 五、位元組交換指令 XCH XCHD
-
- XCH XXX, XXX
- XCHD A, @Ri
一、片内RAM資料轉移指令 MOV
MOV英文全稱: Move
MOV A, XXX
目的:将指定的内容送入到累加器A中;
源操作數:寄存器Rn,間接寄存Ri、直接位址direct與立即數#data
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV A, Rn | (Rn) -> A | √ | × | × | × | 1 | 1 |
MOV A, @Ri | ((Ri)) -> A; i = 0, 1 | √ | × | × | × | 1 | 1 |
MOV A, direct | (direct) -> A | √ | × | × | × | 2 | 1 |
MOV A, #data | data -> A | √ | × | × | × | 2 | 1 |
隻有修改累加器中資料才會影響PSW标志位
例 設 R1 中内容為50H,位址50H中内容為60H
- MOV A R1:表示将R1所存放的50H内容移動到A中,(Rn) -> A,50H -> A;
- MOV A @R1:表示R1所表示的50H位址中的60H内容移動到A中,((R1)) = 60H -> A;
- MOV A, 50H:表示将位址50H存放的60H内容移動到A中,(50H) = 60H -> A;
- MOV A, #50H:表示将50H這個數移動到A中,50H -> A。
MOV Rn, XXX
目的:把源操作數所指定的内容送入目前工作寄存器組中;
源操作數:累加器A,直接位址direct與立即數data
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV Rn, A | (A) -> Rn | × | × | × | × | 1 | 1 |
MOV Rn, direct | (direct) -> Rn | × | × | × | × | 2 | 2 |
MOV Rn, #data | data -> Rn | × | × | × | × | 2 | 1 |
例 累加器A中内容為50H, 位址為60H的空間内容為61H
- MOV R1, A:表示将A的内容移動到寄存器R1中, (A) = 50H -> R1;
- MOV R1, 60H:表示将60H的内容移動到寄存器R1中,(60H) = 61H -> R1;
- MOV R1, #60H:表示将60H這個數放在寄存器R1中,60H -> R1。
MOV direct, XXX
目的:把源操作數所指定的内容送入由直接位址direct所指出的記憶體單元
源操作數:累加器A,寄存器Rn,直接位址direct1,間接位址@Ri與立即數#data
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV direct, A | (A) -> direct | × | × | × | × | 2 | 1 |
MOV direct, Rn | (Rn) -> direct | × | × | × | × | 2 | 2 |
MOV direct1, direct2 | (direc2t) -> direct1 | × | × | × | × | 3 | 2 |
MOV direct, @Ri | ((Ri) )-> direct1 | × | × | × | × | 2 | 2 |
MOV direct, #data | data -> direct | × | × | × | × | 3 | 2 |
例 設R1中内容為為50H,50H中内容為60H,累加器A中的内容為40H
- MOV 70H, A:表示為将A中内容40H送到位址為70H中,(A) = 40H -> 70H;
- MOV 70H, R1:表示為将R1中内容50H送到位址為70H中,(R1) = 50H -> 70H;
- MOV 70H, 50H:表示将位址為50H空間的内容60H送到位址為70H中,(50) = 60H -> 70H;
- MOV 70H, @R1:表示R1所表示的50H位址中的60H内容送到位址為70H空間中,((R1)) = 60H -> 70H;
- MOV 70H, #50H:表示将50H這個數送到位址為70H空間中,50H -> 70H。
MOV @Ri, XXX
目的:将源操作數的内容送入間接寄存器中内容指定的RAM單元
源操作數:累加器A,直接位址direct,立即數#data
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV @Ri, A | (A) -> (Ri) | × | × | × | × | 1 | 1 |
MOV @Ri, direct | (direct) -> (Ri) | × | × | × | × | 2 | 2 |
MOV @Ri, #data | data -> (Ri) | × | × | × | × | 2 | 1 |
例 累加器A中内容為50H, 位址為60H的空間内容為61H,R1的内容為70H
- MOV @R1, A:表示将A的内容送入到R1中的内容指定的RAM單元, (A) = 50H -> (R1) = 70H即70H單元的内容為50H;
- MOV @R1, 60H:表示将60H的内容送入到R1中的内容指定的RAM單元,(60H) = 61H -> (R1) = 70H即70H單元的内容為61H;
- MOV @R1, #60H:表示将60H這個數送入到R1中的内容指定的RAM單元,60H -> (R1) = 70H即70H單元的内容為60H。
MOV DPTR XXX
目的:将16位源操作數送入16位資料指針
源操作數:16位操作數,分别對其高8位DPH、低8位DPL傳送數值
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV DPTR, #data16 | dataH -> DPH,dataL -> DPL | × | × | × | × | 3 | 2 |
例 對DPTR送入08D0H内容
- MOV DPTR, #08D0H;
- 或
- MOV DPH, #08H,MOV DPL, #D0H;
二、片外RAM資料轉移指令 MOVX
MOVX英文全稱: Move External RAM
MOVX XXX XXX
目的:CPU對片外RAM或片外I/O外設晶片通路
源操作數:8為寄存器間接尋址、16為寄存器間接尋址
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOVX A, @Ri | ((Ri)) -> A,且/RD = 0 | √ | × | × | × | 1 | 2 |
MOVX A, @DPTR | ((DPTR)) -> A,且/RD = 0 | √ | × | × | × | 1 | 2 |
MOVX @Ri, A | (A) -> (Ri),且/WR = 0 | × | × | × | × | 1 | 2 |
MOVX @DPTR, A | (A) -> (DPTR),且/WR = 0 | × | × | × | × | 1 | 2 |
- @DPTR:指16寄存器間接尋址,尋址範圍是片外RAM 0~64KB;
- @Ri:指8位寄存器間接尋址,尋址範圍是片外RAM 0~255B,包括@R1和@R2兩種寄存器間接尋址;
例 R1寄存器指向片外RAM 10H,DPTR寄存器指向片外RAM 7000H,其中10H中内容為20H,7000H中内容為30H,累加器A中内容為40H
- MOVX A, @R1:表示将R1指向10H位址中的内容送入累加器A,((R1)) = 20H -> A;
- MOVX A, @DPTR:表示将DPTR指向7000H位址中的内容送入累加器A,((DPTR)) = 30H -> A;
- MOVX @R1, A:表示将A中的内容送入R1指向10H位址中,(A) = 40H -> (R1) = 10H即10H中的内容改為40H;
-
MOVX @DPTR, A:表示将A中的内容送入DPTR指向7000H位址中,(A) = 40H -> (DPTR) = 7000H即7000H中的内容改為40H。
執行MOVX指令讓/DR和/WR(讀寫選通信号)自動有效,進而對片外RAM讀寫
MOVX A, @Ri隻能通路外部RAM 低8位00H~FFH 的256B,高8位由P2決定
三、片内片外ROM資料轉移指令 MOVX
英文全稱: Move Code
MOVC XXX XXX
目的:對程式存儲器(ROM)進行尋址
源操作數:寄存器間接尋址
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOVX A, @A + DPTR | ((A) + (DPTR)) -> A | √ | × | × | × | 1 | 2 |
MOVX A, @A + PC | 先(PC) + 1 -> PC,後((A) + (PC)) -> A | √ | × | × | × | 1 | 2 |
例 A中内容為0DH,PC内容為1003H,1010H的内容為02H
- MOVC A, @A + PC:表示為将PC内容和累加器A相加形成的位址,取出該位址單元的内容送入到累加器A中,((A) + (PC)) = 02H -> A;
例 A中内容為10H,DPTR内容為7000H,1010H的内容為02H
-
MOVC A, @A + DPTR:表示為将DPTR内容和累加器A相加形成的位址,取出該位址單元的内容送入到累加器A中,((A) + (DPTR)) = 02H -> A;
MOVC指令隻能讀取程式存儲器,不能寫程式存儲器
MOVC A, @A + PC指令查找後面的256B
MOVC A, @A + DPTR指令查找整個程式存儲器64KB
四、棧指令 PUSH POP
PUSH英文全稱: Push onto Stack
POP英文全稱: Pop from Stack
PUSH direct
目的:直接位址尋址的單元内容壓入目前SP堆棧中
源操作數:直接位址direct
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
PUSH direct | 先(SP) + 1 -> (SP),後(direct) -> (SP) | × | × | × | × | 2 | 2 |
SP先向下移動一個單元(加一),在将direct中内容送入SP中
POP direct
目的:将堆棧頂的内容送入直接位址尋址的單元
源操作數:堆棧頂内容
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
POP direct | 先(SP) -> (direct),後(SP) - 1 -> (SP) | × | × | × | × | 2 | 2 |
先将SP指向的堆棧中資料送入直接位址direct,在SP向上移動一個單元(SP減一)
五、位元組交換指令 XCH XCHD
XCH英文全稱: Exchange
XCHD英文全稱: Exchange low-order Digit
XCH XXX, XXX
目的:交換源操作數和累加器A的内容
源操作數:寄存器Rn,直接位址direct,間接位址@Ri
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
XCH A, Rn | (A) -> <- (Rn) | √ | × | × | × | 1 | 1 |
XCH A, direct | (A) -> <- (direct) | √ | × | × | × | 2 | 1 |
XCH A, @Ri | (A) -> <- ((Ri)) | √ | × | × | × | 1 | 1 |
例 A中内容為10H,20H的内容為30H,30H的内容為40H,R1的内容為20H
- XCH A,R1:表示為交換A與R1中的内容,A = (R1) = 20H,R1 = (A) = 10H;
- XCH A,20H:表示為交換A與20H中的内容,A = (20H) = 30H,20H = (A) = 10H;
- XCH A,@R1:表示為交換A與R1表示的位址空間的内容,A = ((R1)) = 40H,30H = (A) = 10H;
XCHD A, @Ri
目的:交換累加器A中低4位與Ri間接尋址的單元内容低4位,高4位不變
源操作數:Ri間接尋址的單元内容的低4位
助記符 | 功能 | 對标志位影響 | 位元組數 | 周期數 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
XCHD A, @Ri | (A*) -> <- ((Ri*)) | √ | × | × | × | 1 | 1 |
注:A*是指:A0123;
注:Ri*是指:Ri0123;
51單片機之系統指令
51單片機之邏輯運算指令ANL、ORL、XRL等
51單片機之位操作指令SETB、CPL等
51單片機之控制轉移指令SJMP、LJMP等
51單片機之算術運算指令ADDC、SUBB等
由本人水準有限,文章難免有錯誤,望告知