新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編編程基礎之三-基本尋址方式與基本指令

        ARM匯編編程基礎之三-基本尋址方式與基本指令

        作者: 時間:2016-11-27 來源:網絡 收藏

        3、分支指令,共3條:B、BL、BX

        B label :跳轉到標號label處,也就是說在該條b指令執行后,下一條執行的指令是標號label處的指令。

        BL label :與B指令的功能相同,也實現跳轉,不同之處在于,bl在跳轉的同時還要將返回地址(bl指令的下一條指令的地址)保存到lr中

        BX r0 :將r0的值作為地址,跳轉到該地址處,并根據r0的值決定是否在ARM和thumb態之間進行切換。(關于BX指令,以及ARM態和thumb態的切換,詳見“ARM程序與thumb程序的切換”一文)

        特別說明:

        B和BL指令,其跳轉范圍限制在當前指令的±32M字節地址內(ARM指令為字對齊,最低2位地址固定為0)。這是為什么呢?詳見“雜項解釋”一文。

        4、數據處理指令

        MOV r0, r1:將r1的值賦給r0

        ADD(SUB) r0, r1, r2:將r1的值加上(減去)r2的值,結果存放到r0中

        AND(ORR, EOR) r0, r1, r2:將r1的值與(或、異或)r2的值,結果存放到r0中

        CMP r1, r2:比較r1與r2值的大小

        特別需要說明的問題:

        指令CMP r1,r2,其作用細節是:執行r1-r2的操作,如果結果為負數,則置位CPSR的N位,清零Z位;結果為0,則清零CPSR的N位,置位Z位;結果為正,則清零CPSR的N位,清零Z位。但r1-r2的結果并不保存。CMP指令通常用于分支跳轉。例如,如下的C程序

        int i,j;

        if (i == j) {

        i++;

        } else {

        j++;

        }

        如果使用匯編語句改寫的話,就應該寫為:

        使用ldr指令將變量i的值放入r0

        使用ldr指令將變量j的值放入r1

        cmp r0, r1

        addeq r0, r0, #1

        使用streq指令將r0的值放入變量i中

        beq label

        add r1, r1, #1

        使用str指令將r1的值放入變量j中

        label其它代碼

        ……

        其中addeq, streq, beq這幾條指令,是add, str, b指令的條件執行版本。講到這里就不得不講解一下什么是條件執行了。ARM指令集的所有指令均支持條件執行,條件執行指的是,指令可以根據執行時的情況(CPSR的條件代碼標志位)決定自身是否被執行。eq表示如果CPSR的Z位為1(對于本程序,實際上就是r0的值與r1的值相等,因為cmp會根據r0與r1的值設置Z位)的情況下,該指令要執行,否則不執行。

        其它條件助記符如下:

        條件助記符標志含義
        EQZ=1相等
        NEZ=0不相等
        CS/HSC=1無符號數大于或等于
        CC/LOC=0無符號數小于
        MIN=1負數
        PLN=0正數或零
        VSV=1溢出
        VCV=0沒有溢出
        HIC=1,Z=0無符號數大于
        LSC=0,Z=1無符號數小于或等于
        GEN=V有符號數大于或等于
        LTN!=V有符號數小于
        GTZ=0,N=V有符號數大于
        LEZ=1,N!=V有符號數小于或等于
        AL任何無條件執行 (指令默認條件)
        NV任何從不執行(不要使用)


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 措勤县| 沈丘县| 仁化县| 温泉县| 临澧县| 柘荣县| 新绛县| 许昌市| 宁强县| 馆陶县| 安达市| 淳化县| 汾阳市| 抚顺市| 昌邑市| 偃师市| 金乡县| 赤水市| 秭归县| 贵溪市| 阿拉善右旗| 蓝田县| 合川市| 邛崃市| 望奎县| 墨玉县| 仁化县| 泰州市| 泾源县| 阳东县| 沙雅县| 固始县| 视频| 清镇市| 景谷| 绍兴市| 天等县| 高平市| 福清市| 文昌市| 大洼县|