<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM GNU 匯編偽指令簡介

          ARM GNU 匯編偽指令簡介

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          一.什么是匯編偽指令
          1. 匯編指令語句
            每一條指令語句在源程序匯編時都要產(chǎn)生可供計算機執(zhí)行的指令代碼(即目標代碼),所以這種語句又叫可執(zhí)行語句。每一條指令語句表示計算機具有的一個基本能力,如數(shù)據(jù)傳送,兩數(shù)相加或相減,移位等,而這種能力是在目標程序(指令代碼的有序集合)運行時完成的,是依賴于汁算機內(nèi)的中央處理器(CPU)、存儲器、I/O接口等硬件設(shè)備來實現(xiàn)的。
          2. 匯編偽指令語句
            偽指令語句是用于指示匯編程序如何匯編源程序,所以這種語句又叫命令語句。例如源程序中的偽指令語句告訴匯編程序:該源程序如何分段,有哪些邏輯段在程序段中哪些是當前段,它們分別由哪個段寄存器指向;定義了哪些數(shù)據(jù),存儲單元是如何分配的等等。偽指令語句除定義的具體數(shù)據(jù)要生成目標代碼外,其他均沒有對應(yīng)的目標代碼。偽指令語句的這些命令功能是由匯編程序在匯編源程序時,通過執(zhí)行一段程序來完成的,而不是在運行目標程序時實現(xiàn)的。
          3. 匯編偽指令的作用

          二 .ARM GNU 匯編偽指令簡介

          本文引用地址:http://www.ex-cimer.com/article/201611/319130.htm


          (1)abort
          .abort 停止匯編
          (2)align
          .align absexpr1,absexpr2
          以某種對齊方式,在未使用的存儲區(qū)域填充值. 第一個值表示對齊方式,4, 8,16或32. 第二個表達式值表示填充的值.
          (3)if...else...endif
          .if
          .else
          .endif: 支持條件預(yù)編譯
          (4)include
          .include "file": 包含指定的頭文件, 可以把一個匯編常量定義放在頭文件中
          (5)comm
          .comm symbol, length:
          在bss段申請一段命名空間,該段空間的名稱叫symbol, 長度為length. Ld連接器在連接
          會為它留出空間
          (6)data
          .data subsection: 說明接下來的定義歸屬于subsection數(shù)據(jù)段
          (7)equ
          .equ symbol, expression: 把某一個符號(symbol)定義成某一個值(expression).該
          指令并不分配空間
          (8)global
          .global symbol: 定義一個全局符號, 通常是為ld使用
          (9)ascii
          .ascii "string": 定義一個字符串并為之分配空間
          (10)byte
          .byte expressions: 定義一個字節(jié), 并為之分配空間
          (11)short
          .short expressions: 定義一個短整型, 并為之分配空間
          (12)int
          .int expressions: 定義一個整型,并為之分配空間
          (13)long
          .long expressions: 定義一個長整型, 并為之分配空間
          (14)word
          .word expressions: 定義一個字,并為之分配空間, 4 bytes
          (15)macro/endm
          .macro: 定義一段宏代碼, .macro表示代碼的開始, .endm表示代碼的結(jié)束, .exitm
          跳出宏, 示例如下:
          .macro SHIFTLEFT a, b
          .if /b < 0
          mov /a, /a, ASR #-/b
          .exitm
          .endif
          mov /a, /a, LSL #/b
          .endm
          (16)req
          name .req register name: 為寄存器定義一個別名
          (17)code
          .code [16|32]: 指定指令代碼產(chǎn)生的長度, 16表示Thumb指令, 32表示ARM指令
          (18)ltorg
          .ltorg: 表示當前往下的定義在歸于當前段,并為之分配空間

          注:PC寄存器長轉(zhuǎn)移

          三.ARM GNU專有符號
          (1)@ 表示注釋從當前位置到行尾的字符.
          (2)# 注釋掉一整行.
          (3); 新行分隔符.

          四. 操作碼
          (1)NOP: nop 空操作, 相當于MOV r0, r0
          (2)LDR: ldr , = 相當于PC寄存器或其它寄存器的長轉(zhuǎn)移
          (3)ADR: adr




          關(guān)鍵詞: ARMGNU匯編偽指

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();