天天看點

51單片機之資料轉移指令MOV、MOVX、MOVC等

文章目錄

    • 一、片内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等

由本人水準有限,文章難免有錯誤,望告知

繼續閱讀