wordpress apache google php Python 程序员 编程 Android nginx Ubuntu centos shell Windows 云计算 java Firefox mysql 开源 linux 微软

ARM指令集

 指令集指一個微處理器所有指令的集合,每種微處理器都有自己的指令集,在前面說到過處理器的指令集可以分成CISC和RISC兩種,ARM處理器使用RISC。

 精簡指令集的最大特點是所有的指令占用相同的存儲空間,ARM處理器支持ARM和Thumb兩種指令:ARM指令集工作在32位模式下,指令長度都是32b,thumb指令集工作在16位模式下,指令長度都是16b。

 ARM指令集按照功能可以分成算術運算指令,邏輯運算指令。分支指令,軟件中斷指令,指令長度都是16b。

 B 指令是最簡單的跳轉指令。一旦遇到一個B 指令,ARM 處理器將立即跳轉到給定的目標地址,從那裏繼續執行。註意存儲在跳轉指令中的實際值是相對當前PC 值的一個偏移量,而不是一個絕對地址,它的

值由匯編器來計算(參考尋址方式中的相對尋址)。它是24 位有符號數,左移兩位後有符號擴展為32 位,表示的有效偏移為26 位(前後32MB 的地址空間)。以下指令:
 # 程序無條件跳轉到標號Label 處執行。

  BL 是另一個跳轉指令,但跳轉之前,會在寄存器R14 中保存PC 的當前內容,因此,可以通過將R14 的內容重新加載到PC 中,來返回到跳轉指令之後的那個指令處執行。該指令是實現子程序調用的一個基本但常用的手段。

  BLX 指令從ARM 指令集跳轉到指令中所指定的目標地址,並將處理器的工作狀態從ARM 狀態切換到Thumb 狀態,該指令同時將PC 的當前內容保存到寄存器R14 中。因此,當子程序使用Thumb 指令集,而調用者使用ARM 指令集時,可以通過BLX 指令實現子程序的調用和處理器工作狀態的切換。同時,子程序的返回可以通過將寄存器R14
值復制到PC 中來完成。

  ADD 指令用於把兩個操作數相加,並將結果存放到目的寄存器中。操作數1 應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。

 ADC 指令用於把兩個操作數相加,再加上CPSR 中的C 條件標誌位的值,並將結果存放到目的寄存器中。它使用一個進位標誌位,這樣就可以做比32 位大的數的加法,註意不要忘記設置S 後綴來更改進位標誌。操作數1 應是一個寄存器,操作數2 可以是一個寄存器,被移位的寄存器,或一個立即數。

  SUB 指令用於把操作數1 減去操作數2,並將結果存放到目的寄存器中。操作數1 應是一個寄存器,操作數2 可以是一個寄存器,被移位的寄存器,或一個立即數。該指令可用於有符號數或無符號數的減法運算。

  SBC 指令用於把操作數1 減去操作數2,再減去CPSR 中的C 條件標誌位的反碼,並將結果存放到目的寄存器中。操作數1 應是一個寄存器,操作數2 可以是一個寄存器,被移位的寄存器,或一個立即數。該指令使用進位標誌來表示借位,這樣就可以做大於32 位的減法,註意不要忘記設置S 後綴來更改進位標誌。該指令可用於有符號數或無符號數的減法運算。

 RSB指令稱為逆向減法指令,用於把操作數2 減去操作數1,並將結果存放到目的寄存器中。操作數1 應是一個寄存器,操作數2 可以是一個寄存器,被移位的寄存器,或一個立即數。該指令可用於有符號數或無符號數的減法運算。

 RSC 指令用於把操作數2 減去操作數1,再減去CPSR 中的C 條件標誌位的反碼,並將結果存放到目的寄存器中。操作數1 應是一個寄存器,操作數2 可以是一個寄存器,被移位的寄存器,或一個立即數。該指令使用進位標誌來表示借位,這樣就可以做大於32 位的減法,註意不要忘記設置S 後綴來更改進位標誌。該指令可用於有符號數或無符號數的減法運算。

 MUL 指令完成將操作數1 與操作數2 的乘法運算,並把結果放置到目的寄存器中,同時可以根據運算結果設置CPSR 中相應的條件標誌位。其中,操作數1 和操作數2 均為32 位的有符號數或無符號數。

 MLA 指令完成將操作數1 與操作數2 的乘法運算,再將乘積加上操作數3,並把結果放置到目的寄存器中,同時可以根據運算結果設置CPSR中相應的條件標誌位。其中,操作數1 和操作數2 均為32 位的有符號數或無符號數。

 SMULL 指令完成將操作數1 與操作數2 的乘法運算,並把結果的低32 位放置到目的寄存器Low 中,結果的高32 位放置到目的寄存器High 中,同時可以根據運算結果設置CPSR 中相應的條件標誌位。其中,操作數1 和操作數2 均為32 位的有符號數。

 UMULL 指令完成將操作數1 與操作數2 的乘法運算,並把結果的低32 位放置到目的寄存器Low 中,結果的高32 位放置到目的寄存器High 中,同時可以根據運算結果設置CPSR 中相應的條件標誌位。其中,操作數1 和操作數2 均為32 位的無符號數。

延伸阅读

  • 抱歉,暂无相关内容!

评论