新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 頭文件定義和ARM指令

        頭文件定義和ARM指令

        作者: 時間:2016-11-10 來源:網絡 收藏
        內存管理:內存的分配和釋放等

        靜態和動態內存:主要是在釋放方式上的區別

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

        靜態變量:編譯時就已經確定,定義在函數外面
        自動變量:在程序運行時才能在棧中確定
        只讀數據節:存放常量的地方,包括字符常量,不修改的數據

        查看數據存放在那個節點:(用命令)
        readelf -S (查看節點號和節點名)
        readelf -x .data a.out

        生命周期:(分成靜態,動態)

        兩個宏的定義和包含:

        定義一個a.h
        #ifndef _A_H_
        #define _A_H_
        ..............................
        ..............................

        #endif


        定義一個b.h,其中包含a.h
        #ifndef _B_H_
        #define _B_H_

        #include "a.h"

        ..............................
        ..............................

        #endif

        ARM指令集中指令:

        STR R0,[R1] //[R1] <= R0

        MVN R0, #0XFF //R0 = 0XFFFFFF00 //取后面數的反碼
        MVN R0,#0XA7 //0XA7的反碼為0x5FFFFFF8 -> R0

        MOV R0,#1
        MOV R1,#2
        CMP R0,R1 ;若R0>R1,則置R0=3,若R0<=R1,則置R1=3
        MOVHI R0,#3 ;根據CPSR條件標志位中的HI(無符號大于)判斷,若R0>R1,則R0=3
        MOVLS R1,#3 ;根據CPSR條件標志位中的LS(無符號小于或等于)判斷,R0<=R1,則R1=3

        ORR R0,R0,#3 ;邏輯或運算,R0 = R0 3

        BIC R0,R0,#0x0B ;將R0的bit0,bit1,bit3清零,其余位不變

        跳轉指令:
        B 無條件跳轉
        BL 適合子程序的調轉,地址有保存,可以返回
        B label PC <- label
        BL label LR <- PC-4,PC <- label

        MRS R0,CPSR ;傳送CPSR的內容到R0
        MRS R1,SPSR ;傳送SPSR的內容到R1

        LDR R1,=0x33100
        LDRB R0,[R1] ;將存儲器地址為R1的字節數據讀入寄存器R0,并將R0的高24位清零
        LDRH R2,[R1] ;將存儲器地址為R1的半字數據讀入寄存器R2,并將R2的高16位清零

        STR R0,[R1] ;將R0中的字數據寫入以R1為地址的存儲器中
        STR R0,[R1,#8] ;將R0中的字數據寫入以R1+8為地址的存儲器中


        LDR R1,=0x33100
        LDMIA R1,{R5,R6} ;R5 = [R1],R6 = [R1+4]
        MOV R2,#0x33
        MOV R3,#0X44
        STMIA R1,{R2,R3} ;[R1]=R2,[R1+4]=R2

        數據傳送指令:
        MOV
        MOVS (會影響標志位)
        MVN 取反

        ADD
        SUB
        RSB Rd,Rn,R1 Rd <- R1-Rn 逆向減法

        影響標志位:
        ADC
        SBC
        RSC

        邏輯處理指令:
        AND
        ORR
        EOR 異或
        BIC 位清除指令

        比較指令:
        CMP 減法運算,結果不保存,修改標志位
        TST 位測試指令TST Rn operand 將Rn的值與operand的值按位作邏輯“與”操作,根據操作的結果更新CPSR中的相應條件標志位,當所有測試位為0時-> Z = 1
        TEQ 相等測試指令,將Rn的值與operand的值按位作邏輯“異或”操作,根據操作的結果更新CPSR中的相應條件標志位,當兩個數據相等時:EQ有效,否則:NE有效

        程序狀態寄存器訪問指令:
        MRS 狀態寄存器 -> 寄存器
        MSR 狀態寄存器 <- 寄存器

        MRS R1,CPSR 將CPSR狀態寄存器讀取,保存到R1
        MRS CPSR,R1 R1 -> CPSR

        加載/存儲指令--單寄存器加載

        LDR
        LDRB
        LDRT
        ....

        STR
        STRB
        STRT
        ....

        向后索引:LDR Rd,[Rn],#-0x04 1.Rd <- [Rn] Rn = Rn-4

        ***********************************************************************************************************************************
        ***********************************************************************************************************************************
        ***********************************************************************************************************************************
        ***********************************************************************************************************************************



        關鍵詞: 頭文件定義ARM指

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平利县| 本溪市| 罗江县| 鄱阳县| 莒南县| 昌平区| 永靖县| 桂东县| 吉林市| 新郑市| 西昌市| 台州市| 华容县| 石棉县| 赞皇县| 佛学| 徐州市| 丹阳市| 金坛市| 无极县| 平罗县| 晴隆县| 海口市| 襄城县| 沙洋县| 余江县| 永济市| 金阳县| 清流县| 通渭县| 凤凰县| 汾阳市| 建始县| 临汾市| 惠水县| 博乐市| 卫辉市| 英超| 兴化市| 遂平县| 蒲江县|