日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.jsp后缀语言_ARM汇编语言入门(三)

發布時間:2024/9/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .jsp后缀语言_ARM汇编语言入门(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Part 3 ARM指令集

ARM模式和Thumb模式

ARM處理器主要有兩種工作模式(先不算Jazelle)-ARM狀態和Thumb狀態。這些狀態模式與權限級別無關,它們主要區別是指令集,在ARM模式下指令集始終是32-bit,但是在Thumb模式下可以是16-bit或者32-bit。學會怎么使用Thumb模式對于ARM開發很重要。編寫ARM殼代碼時,我們需要避免NULL字節,使用16位Thumb指令而不是32位ARM指令可以降低這種風險。ARM各版本的調用規范容易讓人混淆,不是所有的ARM版本都支持相同的Thumb指令集。后來,ARM 引入了增強的 Thumb 指令集(偽名稱:Thumbv2),它允許 32 位 Thumb 指令甚至允許條件執行,而這在之前的版本中就不行。為了在Thumb中支持條件執行,引入了“it”指令。但是,此指令隨后在更高版本中被刪除,并與更簡單的東西進行了替換。我不知道所有不同ARM/Thumb指令集的所有不同變體,實話說,我不關心。你也最好也別關心。您只需要知道的是你的目標設備的 ARM 版本及其特定的 Thumb 支持,然后再調整代碼。ARM 信息中可以幫助您確定ARM 版本的細節(http://infocenter.arm.com/help/index.jsp)。

  • Thumb-1(16 位指令):在ARMv6和更早的體系結構中使用。
  • Thumb-2(16 位和 32 位指令):在Thumb-1基礎上添加更多指令并允許它們為 16 位或 32 位寬(ARMv6T2、ARMv7)。
  • ThumbEE:更改和添加了一些支持動態生成代碼的功能(在執行之前或執行期間在設備上編譯代碼)。

ARM模式和Thumb模式的態區別:

  • 條件執行:在ARM模式下所有的指令都支持條件執行。一些版本的ARM處理器可以通過it指令在Thumb工作模式下支持條件執行。
  • ARM和Thumb模式下的32-bit指令:在Thumb模式下的32-bit指令有.w后綴。
  • 桶型位移器(barrel shifter)是ARM模式下的另一個特點。它可以將多條指令縮減為一條。例如,你可以通過向左位移1位的指令后綴將乘法運算直接包含在一條MOV指令中(將一個寄存器的值乘以2,再將結果MOV到另一個寄存器):MOV R1, R0, LSL#1 ;R1 = R0 * 2,而不需要使用專門的乘法指令來運算。
    要切換處理器在其中執行的狀態,必須滿足以下兩個條件之一:
    • 我們可以使用分支指令 BX(分支和切換狀態)或 BLX(分支、鏈接和切換狀態),并將目標寄存器的最小有效位設置為 1。可以通過偏移量加1來實現,例如0x5530+1。您可能會認為這將導致對齊問題,因為指令是 2 或 4 字節對齊的。這不是問題,因為處理器將忽略最低有效位。詳見Part 6:條件執行和分支。
    • 如果當前程序狀態寄存器的T位被置位,就說明工作在Thumb模式下。

ARM指令簡介

本節簡單介紹ARM指令集以及基本用法。了解匯編語言中的最小部分如何操作,它們之間如何銜接,它們之間能組合成什么樣的功能。

ARM指令后面通常跟著兩個操作數,像下面這樣的形式:

MNEMONIC{S}{condition} {Rd}, Operand1, Operand2

由于ARM指令集的靈活性,并不是所有的指令都用到這些字段。這些字段的解釋如下:

MNEMONIC - 操作指令(機器碼對應的助記符)。 {S} - 可選后綴. 如果指定了該后綴,那么條件標志將根據操作結果進行更新。 {condition} - 執行指令所需滿足的條件。 {Rd} - 目標寄存器,存儲操作結果。 Operand1 - 第一操作數(寄存器或者立即數) Operand2 - 第二操作數. 立即數或者帶有位移操作后綴(可選)的寄存器。

MNEMONIC, S, Rd和Operand1字段比較明了,condition 和 Operand2字段需要再解釋一下。condition字段與CPSR寄存器的值有關,準確的說是和CPSR某些位有關。Operand2也叫可變操作數,因為它可以有多種形式--立即數、寄存器、帶有位移操作的寄存器。例如Operand2可以有以下多種形式:

#123 - 立即數。 Rx - 寄存器x (如 R1, R2, R3 ...)。 Rx, ASR n - 寄存器x,算術右移n位 (1 = n = 32)。 Rx, LSL n - 寄存器x,邏輯左移n位 (0 = n = 31)。 Rx, LSR n - 寄存器x,邏輯右移n位 (1 = n = 32)。 Rx, ROR n - 寄存器x,循環右移n位 (1 = n = 31)。 Rx, RRX - 寄存器x,擴展的循環位移,右移1位。

讓我們以一個簡單的例子看一下這些指令的不同:

ADD R0, R1, R2 - 將寄存器R1內的值與寄存器R2內的值相加,結果存儲到R0。 ADD R0, R1, #2 - 將寄存器R1內的值加上立即數2,結果存儲到R0。 MOVLE R0, #5 - 僅當滿足條件LE(小于或等于)時,才將立即數5移動到R0(編譯器會把它看作MOVLE R0, R0, #5)。 MOV R0, R1, LSL #1 - 將寄存器R1的內容向左移動一位然后移動到R0(Rd)。因此,如果R1值是2,它將向左移動一位,并變為4。然后將4移動到R0。

來快速總結一下,看一下后續示例中將涉及的一些常用指令:

<end>

總結

以上是生活随笔為你收集整理的.jsp后缀语言_ARM汇编语言入门(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。