新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 111條單片機匯編指令注解匯總

        111條單片機匯編指令注解匯總

        作者: 時間:2016-11-23 來源:網絡 收藏
        Rn:表示當前寄存器區的8個工作寄存器R0~R7

        Ri:表示當前寄存器區的R0或R1,可作地址指針即間址寄存器(i=0或1)

        本文引用地址:http://www.104case.com/article/201611/320554.htm

        @:為間接寄存器或基址寄存器的前綴.

        Direct: 表示8位內部數據存儲單元的地址.它可以是內部RAM的單元地址0~127.特殊功能

        寄存器SFR的地址(128~255)或名稱,

        A:累加器ACC.

        B:.特殊功能寄存器B,用于MUL和DIV指令中.

        C:進位位Cy.

        #data:表示包含在指令中的單字節(8位)立即數.如果用16位進制表示,后綴字母為”H”,數據范圍00~0FFH,不得一字母開頭;如果用16進制表示無須任何后綴,但必須在0~255之間.

        #data16:表示包含在指令中的雙字節(16位)立即數.

        Adda16:表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范圍是從0000H~FFFFH的整個64KB存儲地址空間.

        Adda11:表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必須和下一條指令第一個字節同處一頁.

        Rel:表示8位帶符號的相對偏移量.用語SJMP和所有的條件轉移指令中.偏移量相對于下一條指令的第一個字節計算,在-128~+127范圍內取值.

        DPTR:為數據指針,可用作16位的地址寄存器.

        /:加在位操作的前面,表示對該位進行非運算.

        bit:表示內部可尋址位或特殊功能寄存器中的直接尋址位.

        “(x):寄存器或地址單元中的內容.

        ((x)):有x見解尋址的單元中的內容.

        <-:表示將箭頭右邊的內容傳送至箭頭的左邊.

        $:當前指令的地址.

        單片機指令系統

        (一) 內部數據傳送指令

        (1) 以累加器A為目的的傳送指令:

        MOVA,#data;(A)<-data

        MOVA,direct;(A)<-(direct)

        MOVA,Rn;(A)<-(Rn)

        MOVA,@Ri;(A)<- ((Ri))

        (2) 以通用寄存器Rn為目的的傳送指令:

        MOVRn,A;(Rn)<-(A)

        MOVRn, direct; (Rn)<(direct)-

        MOVRn,#data:; (Rn)<-(data)

        (3) 以直接地址為目的的傳送指令:

        MOVdirect,A;(direct)<-(A)

        MOVdirect,Rn; (direct)<-(Rn)

        MOVdirect,direct2; (direct)<-(direct2)

        MOVdirect,@Ri; (direct)<-((Rn))

        MOVdirect,#data; (direct)<-data

        (4) 以寄存器間接地址為目的的傳送指令:

        MOV@Ri,A;((Ri))<-(A)

        MOV@Ri,direct;((Ri))<-(direct)

        MOV@Ri,#data;((Ri))<-data

        (二) 數據指針賦值指令(16位數據傳送指令)

        MOVDPTR,#data16;

        (三) 片外數據傳送指令

        MOVXA,@Ri;(A)<-((Ri))片外

        MOVXA,@DPTR;(A)<-((DPTR))片外

        MOVX@Ri,A;((Ri))片外<-(A)

        MOVX@DPTR, A;((DPTR))片外<-(A)

        (四) ROM數據訪問指令(查表指令)

        MOVCA,@A+DPTR;(A)<-((A)+(DPTR))rom

        MOVCA,@A+PC;(PC)<-(PC)+1,(A)<-((A)+(PC))rom

        (五) 堆棧操作指令

        PUSHdirect;(SP)<-(SP)+1,(SP)<-(direct)

        堆棧指針先加1,將數據壓入棧頂

        POPdirect;(direct)<-(SP),(SP)<-(SP)-1

        將數據從棧頂彈出存入direct,SP再減1

        (六) 數據交換指令

        (1)整字節(8位)交換指令:

        XCHA,Rn;A和Rn中的數互換

        XCHA,direct;A和direct單元中的數互換

        XCHA,@Ri;A和Ri間址單元中的數互換

        (2)半字節交換指令:

        XCHDA,@Ri;A的低4位Ri間接單元的低4位互換,高4位不動

        (3)累加器高低半字節交換指令:

        SWAPA,;A的高4位(D7~D4)和低4位(D3~D0)互換

        (七) 加法指令

        (1)不帶Cy加法指令:

        ADDA,Rn;(A)<-(A)+(Rn)

        ADDA,direct; (A)<-(A)+(direct)

        ADDA,@Ri; (A)<-(A)+((Ri))

        ADDA,#data; (A)<-(A)+data

        (2)帶進位加法指令:

        ADDCA,Rn;(A)<-(A) +Cy+(Rn)

        ADDCA,direct; (A)<-(A) +Cy+(direct)

        ADDCA,@Ri; (A)<-(A) +Cy+((Ri))

        ADDCA,#data; (A)<-(A) +Cy+data

        (3)加1指令:

        INCA,;(A)<-(A)+1

        INCRn;(Rn)<-(Rn)+1

        INC@Ri;((Ri))<-((Ri))+1

        INCdirect;(direct)<-(direct)+1

        INCDPTR;(FPTR)<-(DPTR)+1

        (八) 減法指令

        (1)帶進位減法指令:

        SUBBA,Rn;(A)<-(A) -Cy-(Rn)

        SUBBA,direct; (A)<-(A) -Cy-(direct)

        SUBBA,@Ri; (A)<-(A) -Cy-((Ri))

        SUBBA,#data; (A)<-(A) -Cy-data

        (2)減1指令:

        DECA;(A)<-(A)-1

        DECdirect;(direct)<-(durect)-1

        DECRn;(Rn)<-(Rn)-1

        DEC@Ri;((Ri))<-((Ri))-1

        (九) 乘除指令

        (1)乘法指令

        MULAB;(B)(A)<-(A)*(B)

        指令功能是把累加器A和特殊功能寄存器B中兩個8位無符號整數相乘,并把積的高8位字節存入B寄存器,低8位字節存入累加器A.

        (2)除法指令

        DIVAB;A/B,商存入A,余數存入B

        指令的功能是把累加器A中的8位無符號整數除以寄存器B中的8位無符號整數商的整數部分存入累加器A中,余數保留在B中.

        (十) 十進制調整指令

        DAA

        (十一) 邏輯運算指令

        (1)邏輯與運算指令:

        ANLA,Rn;(A)<-(A)∧(Rn)

        ANLA,direct; (A)<-(A)∧(direct)

        ANLA,@Ri; (A)<-(A)∧((Ri))

        ANLA,#data; (A)<-(A)∧data

        ANLdirect,A;(direct)<-(A)∧(direct)

        ANLdirect,#data;(direct<-(direct)∧data

        (2)邏輯或運算指令:

        ORLA,Rn;(A)<-(A)∨(Rn)

        ORLA,direct; (A)<-(A)∨(direct)

        ORLA,@Ri; (A)<-(A)∨((Ri))

        ORLA,#data; (A)<-(A)∨data

        ORLdirect,A;(direct)<-(A)∨(direct)

        ORLdirect,#data; (direct)<-(direct)∨data

        (3)邏輯異或運算指令:

        XRLA,Rn;(A)<-(A)⊙(Rn)

        XRLA,direct; (A)<-(A)⊙(direct)

        XRLA,@Ri; (A)<-(A)⊙((Ri))

        XRLA,#data; (A)<-(A)⊙data

        XRLdirect,A;(direct)<-(A)⊙(direct)

        XRLdirect,#data; (direct)<-(direct)⊙data

        (4)累加器清0和去反指令

        CLRA;(A)<-0(累加器清0指令)

        CLRA;(A)<-(A) (累加器取反指令)

        (5)累加器移位指令:

        不帶進位Cy循環左移:RLA;Dn+1<-Dn,D0<-D7

        D7

        D6

        D5

        D4

        D3

        D2

        D1

        D0

        不帶進位Cy循環右移:RRA:Dn+1->Dn,D0<-D7

        D7

        D6

        D5

        D4

        D3

        D2

        D1

        D0

        帶進位Cy循環左移:RLCA;Cy<-D7,Dn+1<-Dn,D0<-Cy

        D7

        D6

        D5

        D4

        D3

        D2

        D1

        D0

        帶進位Cy循環右移:RRCA;Cy->D7,Dn+1->Dn,D0->Cy

        (十二) 控制轉移指令

        [1] 無條件轉移指令:

        (1) 長轉移指令LJMPaddr16;(PC)<-addr16

        (2) 絕對轉移指令AJMPaddr11;(PC)<-(PC)+2,(PC)10~0<-addr11

        (3) 短轉移指令SJMPrel;(PC)<-(PC)+2+rel

        (4) 變址尋址轉移指令JMP@A+DPTR;(PC)<-(A)+(DPTR)

        [2] 條件轉移指令:

        (1) 累加器判0轉移指令:

        JZrel;如果(A)=0,跳轉到目標語句,否則順序執行

        JNZrel;如果(A)≠0,跳轉到目標語句,否則順序執行

        (2) 比較轉移指令:

        CJNZA,#data,rel;如果(A)≠data,則跳轉到目標語句,否則程序順序執行

        CJNZAdirect,rel; 如果(A)≠(direct),則跳轉到目標語句,否則程序順序執行

        CJNZRn#data,rel; 如果(A)≠data,則跳轉到目標語句,否則程序順序執行

        CJNZ@Ri#data,rel; 如果(A)≠data,則跳轉到目標語句,否則程序順序執行

        (3) 循環控制轉移指令:

        DJNZRn,rel;(Rn)先減1,如減1后(Rn)≠0,則跳轉到目標語句;否則順序執行

        DJNZfirect,rel; (direct)先減1,如減1后(direct)≠0,則跳轉到目標語句;否則順序執行

        (十三) 子程序調用和返回指令

        (1) 絕對調用指令:

        ACALLaddr11

        (2) 長調用指令:

        LCALLaddr16

        (3) 返回指令:

        RET子程序返回

        RETI中斷服務程序返回

        (十四) 空操作指令

        NOP空操作指令是一條特殊指令,單片機在執行該指令時不進行任何操作,只是消耗1個機器周期的時間,所以該指令長用于延時程序.軟件陷阱程序等

        (十五) 位操作類指令

        (1) 位傳送指令:

        MOVC,bit;(Cy)<-(bit),bit位的狀態不變

        MOVbit,C; (bit) <- (Cy),Cy位的狀態不變

        (2) 位置位和復位指令:

        SETBC;(Cy)<-1

        SETBbit;(bit)<-1

        CLRC;(Cy)<-0

        CLRbit;(bit)<-0

        (3) 位運算指令:

        ANLC,bit;(Cy)<-(Cy)∧(bit),Cy位和bit位相與,結果賦給Cy

        ANLC,/bit;(Cy)<-(Cy)∧(bit),Cy位和bit位相與,結果賦給Cy

        ORLC,bit;(Cy)<-(Cy)∨(bit),Cy位和bit位相或,結果賦給Cy

        ORLC,/bit;(Cy)<-(Cy) ∨(bit),Cy位和bit位相或,結果賦給Cy

        CPLC; (Cy)<-(Cy),Cy位取反

        CPLbit;(bit)<-(bit),bit位取反

        (4) 位測試轉移指令:

        (1) 以Cy位狀態為條件的轉移指令

        JCrel;如果Cy位=1,跳轉到目標語句,否則順序執行

        JNCrel;如果Cy位=0,跳轉到目標語句,否則順序執行

        (2) 以指定位狀態為條件的轉移指令:

        JBbit,rel;如果bit=1,跳轉到目標語句,否則順序執行

        JNBbit,rel;如果bit=0,跳轉到目標語句,否則順序執行

        JBCbit,rel;如果bit=1,跳轉到目標語句,同時將bit位清0;否則順序執行




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 塔城市| 白水县| 红桥区| 井冈山市| 渭源县| 炉霍县| 扎鲁特旗| 佳木斯市| 花垣县| SHOW| 玉山县| 龙州县| 昭苏县| 金阳县| 天柱县| 溆浦县| 广河县| 白银市| 台南市| 且末县| 健康| 兴仁县| 陆丰市| 调兵山市| 洛宁县| 三河市| 上林县| 民县| 林西县| 永胜县| 余江县| 仁化县| 凉城县| 八宿县| 太谷县| 开封县| 峨眉山市| 上犹县| 茶陵县| 梅州市| 普宁市|