新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 常用ARM指令集及匯編

        常用ARM指令集及匯編

        作者: 時間:2016-11-20 來源:網絡 收藏
        一、ARM處理器的尋址方式

        二、指令集學習

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

        (一)ARM指令集

        1.指令格式

        2.條件碼

        3.ARM存儲器訪問指令

        1)LDR/ STR-加載/ 存儲指令

        2)LDM/ STM-多寄存器加載/ 存儲指令

        3)SWP-寄存器和存儲器交換指令

        4.ARM數據處理指令

        1)數據傳送指令

        a)MOV-數據傳送指令

        b)MVN-數據非傳送指令

        2)算術邏輯運算指令

        a)ADD-加法運算指令

        b)SUB-減法運算指令

        c)RSB-逆向減法指令

        d)ADC-帶進位加法指令

        e)SBC-帶進位減法指令

        f)RSC-帶進位逆向減法指令

        g)AND-邏輯“與”

        h)ORR-邏輯“或”

        i)EOR-邏輯“異或

        j)BIC-位清除指令

        3)比較指令

        a)CMP-比較指令

        b)CMN-負數比較指令

        c)TST-位測試指令

        d)TEQ-相等測試指令

        4)乘法指令

        a)MUL-32位乘法指令

        b)MLA-32位乘加指令

        c)UMULL-64位無符號乘法指令

        d)UMLAL-64位無符號乘加指令

        e)SMULL-64位有符號乘法指令

        f)SMLAL-64位有符號乘加指令

        5.ARM分支指令

        1)B-分支指令

        2)BL-帶連接的分支指令

        3)BX-帶狀態切換的分支指令

        6.ARM協處理器指令

        1)CDP-協處理器數據操作指令

        2)LDC-協處理器數據讀取指令

        3)STC-協處理器數據寫入指令

        4)MCR-ARM處理器到協處理器的數據傳送指令

        5)MRC-協處理器到ARM處理器的數據傳送指令

        7.ARM雜項指令

        1)SWI-軟中斷指令

        2)MRS-讀狀態寄存器指令

        3)MSR-寫狀態寄存器指令

        8.ARM偽指令

        1)ADR-小范圍的地址讀取偽指令

        2)ADRL-中等范圍的地址讀取偽指令

        3)LDR-大范圍的地址讀取偽指令

        4)NOP-空操作偽指令

        (二)Thumb指令集

        1.Thumb指令集和ARM指令集的區別

        2.Thumb存儲器訪問指令

        1)LDR/ STR-加載/ 存儲指令

        2)PUSH/ POP-寄存器入棧 / 出棧指令

        3)LDMIA/ STMIA-多寄存器加載/ 存儲指令

        3.Thumb數據處理指令

        1)數據傳送指令

        a)MOV-數據傳送指令

        b)MVN-數據非傳送指令

        c)NEG-數據取負指令

        2)算術邏輯運算指令

        a)ADD-加法運算指令

        b)SUB-減法運算指令

        c)ADC-帶進位加法指令

        d)SBC-帶進位減法指令

        e)MUL-乘法運算指令

        f)AND-邏輯“與”

        g)ORR-邏輯“或”

        h)EOR-邏輯“異或”

        i)BIC-位清除指令

        j)ASR-算術右移指令

        k)LSL-邏輯左移指令

        l)LSR-邏輯右移指令

        m)ROR-循環右移指令

        3)比較指令

        a)CMP-比較指令

        b)CMN-負數比較指令

        c)TST-位測試指令

        4.Thumb分支指令

        1)B-分支指令

        2)BL-帶連接的分支指令

        3)BX-帶狀態切換的分支指令

        5.Thumb雜項指令

        1)SWI-軟中斷指令

        6.Thumb偽指令

        1)ADR-小范圍的地址讀取偽指令

        2)LDR-大范圍的地址讀取偽指令

        3)NOP-空操作偽指令

        7。匯編指令API

        MOV(MOVe) 傳送指令
        PUSH 入棧指令
        POP 出棧指令
        XCHG(eXCHanG) 交換指令
        XLAT(TRANSLATE) 換碼指令
        LEA (Load Effective Address) 有效地址送寄存器指令
        LDS(Load DS with pointer) 指針送寄存器和DS指令
        LES(Load ES with pointer) 指針送寄存器和ES指令
        LAHF(Load AH with Flags) 標志位送AH指令
        SAHF(Store AH into Flgs) AH送標志寄存器指令
        PUSHF(PUSH the Flags) 標志進棧指令
        POPF(POP the Flags) 標志出棧指令
        ADD 加法指令
        ADC 帶進位加法指令
        INC 加1指令
        SUB(SUBtract) 不帶借位的減法指令
        SBB(SuVtrach with borrow) 帶借位的減法指令
        DEC(DECrement) 減1指領
        NEG(NEGate) 求補指令
        CMP(CoMPare) 比較指令
        MUL(unsinged MULtiple) 無符號數乘法指令
        IMUL(sIgned MUL tiple) 有符號數乘法指令
        DIV(unsigned DIVide) 無符號數除法指令
        IDIV(sIgned DIVide) 有符號數除法指令
        CBW(Count Byte to Word) 字節轉換為字指令
        CWD(Count Word to Doble word) 字轉換為雙字指令
        DAA 壓縮的BCD碼加法十進制調整指令
        DAS 壓縮的BCD碼減法十進制調整指令
        AAA 非壓縮的BCD碼加法十進制調整指令
        AAS 非壓縮的BCD碼加法十進制調整指令
        AND 邏輯與指令
        OR 邏輯或指令
        XOR 邏輯異或指令
        NOT 邏輯非指令
        TEST 測試指令
        SHL(SHift logical Letf) 邏輯左移指令
        SHR(SHift logical Right) 邏輯右移指令
        ROL(Rotate Left ) 循環左移指令P58
        ROR(Rotate Right) 循環右移指令P58
        RCL(Rotate Left through Carry) 帶進位循環左移
        RCR(Rotate Right through Carry) 帶進位循環左移
        MOVS(MOVe String) 串傳送指令
        STOS(STOre into String) 存入串指令
        LODS(LOad from string) 從串取指令
        REP(REPeat) 重復操作前
        CLD(CLear Direction flag) 清除方向標志指令
        STD(SeT Direction flag) 設置方向標志指令
        CMPS(CoMPare String) 串比較指令
        SCAS(SCAn String) 串掃描指令
        REPE/REPZ(REPeat while Equal/Zero)相等/為零時重復操作前綴
        REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不為零進重復前綴
        IN(INput) 輸入指令
        OUT(OUTput) 輸出指令
        JMP(JuMP) 無條件轉移指令
        JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 條件轉移指令
        LOOP 循環指令P70
        LOOPZ/LOOPE 為零/相等時循環指令
        LOOPNZ/LOOPNE 不為零/不相等時循環指令
        CALL 子程序調用指令
        RET(RETun) 子程序返回指令
        CLC(CLear Carry) 進位位置0指令
        CMC(CoMplement Carry) 進位位求反指令
        SRC(SeT Carry) 進位位置1指令
        NOP(No OPeretion) 無操作指令
        HLT(HaLT) 停機指令
        OFFSET 返回偏移地址
        SEG 返回段地址
        EQU(=) 等值語句
        PURGE 解除語句
        DUP 操作數字段用操作符
        SEGMENT,ENDS 段定義指令
        ASSUME 段地址分配指令
        ORG 起始偏移地址設置指令
        $ 地址計數器的當前值
        PROC,ENDP 過程定義語句
        NAME,TITLE,END 程序開始結束語句
        MACRO,ENDM 宏定義指令

        JZ OPR //結果為零轉移
        JNZ OPR //結果不為零轉移
        JS OPR //結果為負轉移
        JNS OPR //結果為正轉移
        JO OPR //溢出轉移
        JNO OPR //不溢出轉移
        JP OPR //結果為偶轉移
        JNP OPR //結果為奇轉移
        JC OPR //有進位轉移
        JNC OPR //無進位轉移


        關鍵詞: ARM指令集匯

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 钟祥市| 门源| 托克逊县| 淳化县| 潮州市| 桂林市| 建德市| 德钦县| 精河县| 宣恩县| 玉林市| 临夏市| 隆尧县| 涿州市| 正定县| 景东| 北辰区| 卢龙县| 宾川县| 阿瓦提县| 鄂尔多斯市| 苍南县| 石家庄市| 无极县| 岗巴县| 淄博市| 朔州市| 武鸣县| 巩留县| 南丹县| 应用必备| 松溪县| 美姑县| 洛川县| 广德县| 沅江市| 丁青县| 秦安县| 太保市| 黑龙江省| 同江市|