新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM指令解析

        ARM指令解析

        作者: 時間:2016-11-10 來源:網絡 收藏
        今天我來總結一下arm指令的學習,今天我不會對所有的arm指令進行一一的解析,在這里希望大家去看arm匯編手冊,這個手冊的中文版我放在了http://download.csdn.net/detail/wrjvszq/8324589大家先拿到這個文檔,這個文檔對arm指令的解析相當的全面,但是這里要注意的是文檔是arm對標準的匯編寫出的文檔,但是我們要用的是gnu的匯編,這兩個稍微有點區別,關于區別大家可以去看看這個博客http://www.cnblogs.com/hnrainll/archive/2011/05/17/2048315.html說完了這些,今天我的重點將會放在arm偽指令和arm協處理器訪問指令進行解析。
        l偽指令
        1、為什需要偽指令
        要解決這個問題我們先要了解一下機器碼,同樣我們要用到在arm寄存器解析那一節用到的《ARM Architecture Reference Manual》這本資料在我們學習arm的過程中十分重要。說到機器碼我們必須要看看arm的機器編碼格式

        28~31bits(cond):是條件碼,就是表明這條語句里是否有大于、等于、非零等的條件判斷,這4bits共有16種狀態,分別為:
        二進制碼指令符號含義二進制碼指令符號含義
        0EQ相等1NE不等
        0010CS/HS進位/無符號數大于等于0011CC/LO清進位/無符號數小于
        0100MI減/負數0101PL加/正數或0
        0110VS溢出0VC沒溢出
        1HI無符號數大于1001LS無符號數小于等于
        1010GE有符號數大于等于1011LT有符號數小于
        1100GT有符號數大于1101LE有符號數小于等于
        0AL任何條件1-未定義
        25bit(I)是用來區別shifer_operand域是采用立即數尋址方式還是寄存器尋址方式,該bit為0表示寄存器尋址方式,為1表示立即數尋址方式。
        21~24bits(opcode)是指令碼,用來表明這條指令是什么指令。
        12~15bits(Rd)是指令中的目的寄存器,存放寄存器的4bits編號
        0~11bits(shifter_operand)指令的操作數。
        我們可以看到指令的操作數最多只能為12位(其實中間還有4位用作別的用途,因此只有8位來表示立即數或者寄存器),難以解決多余8位的數,因此引入偽指令來解決。
        2、偽指令解析
        偽指令主要在編譯的時候起作用,它本身不產生機器碼,而是在編譯的時候起作用,告訴編譯器如何編譯,另一種作用就是轉換為其他的實際的指令。
        下面介紹幾個常見的GNU風格的偽指令(一般會在前面加一個點’.’):
        (1)global:把一個符號定義為全局的。
        (2)data:用來定義數據段。
        (3)ascii:字符串類型的數據。
        (4)byte:字節型數據
        (5)word:子數據
        (6)equ:類似于C語言的宏定義
        (7)align:控制對齊。加在需要被對齊(被調整)的標號(地址/指令)之前
        l協處理器指令
        1.什么是協處理器
        用于執行特定的任務,減輕處理器核的負擔。一共可以支持16個協處理器,cp15是最重要的一個協處理器。
        2.CP15的作用
        系統控制協處理器,提供了很多額外的寄存器,通過這些寄存器我們可以控制和配置cache,MMU,時鐘系統等。訪問他主要是訪問他的寄存器,從而達到對系統的控制。
        3.CP15的寄存器訪問
        1.mcr:從通用寄存器到協處理器的寄存器
        2.mrc:從協處理器的寄存器到通用寄存器
        這里只是說到他的簡單用法,更多內容參考《ARM Architecture Reference Manual》(一定要多讀英文文檔)。
        以上是自己的arm指令的簡單理解,希望各位提出寶貴意見。


        關鍵詞: ARM指令解

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 佛教| 林周县| 嘉禾县| 开江县| 万源市| 霍林郭勒市| 石屏县| 额尔古纳市| 贞丰县| 恩平市| 韩城市| 沙坪坝区| 鄯善县| 临夏市| 金阳县| 云南省| 德兴市| 木兰县| 泽州县| 民勤县| 剑河县| 芦溪县| 银川市| 常宁市| 靖西县| 昔阳县| 邵阳市| 喀什市| 嘉祥县| 个旧市| 磴口县| 峨眉山市| 门头沟区| 石门县| 乌鲁木齐县| 连云港市| 安化县| 龙山县| 云安县| 开阳县| 宾阳县|