ARM彙編基礎

2021-07-31 01:38:42 字數 2979 閱讀 5576

簡介

在armv6中,simd指令使用位[19:16]作為結果的單個位元組或半字的大於或等於(ge)標誌。您可以使用這些標誌來控制以後的sel指令,有關詳細資訊,請參閱第a4-127頁的sel

設定規則有以下三種:

指令為半字操作:

根據上半字計算的結果,將ge [3:2]設定或清除

根據下半字計算的結果,將ge [1:0]設定或清除

指令位byte操作:

根據top byte計算的結果,將ge [3]設定或清除

根據second byte計算的結果,將ge [2]設定或清除

根據third byte計算的結果,將ge [1]設定或清除

根據bottom byte計算的結果,將ge [0]設定或清除

如果相應計算的結果如下,則每個位都被置位(否則清除):

對於無符號位元組加法,如果結果大於或等於128

對於無符號半字加法,如果結果大於或等於65536

對於無符號位元組減法,如果結果大於或等於0

對於有符號運算,如果結果大於或等於0

簡介:

a i f是中斷使能標誌位

a標誌位:

設定時禁用不精確的資料中止。這僅在armv6及更高版本中可用。在早期版本中,cpsr和spsr的位[8]必須被視為保留位

i標誌位:

設定後禁用irq中斷

f標誌位:

設定後禁用fiq中斷

簡介:

m[4:0]用來指示模式標誌位。

m[4:0] mode accessible registers

0b10000 user pc, r14 to r0, cpsr

0b10001 fiq pc, r14_fiq to r8_fiq, r7 to r0, cpsr, spsr_fiq

0b10001 irq pc, r14_irq, r13_irq, r12 to r0, cpsr, spsr_irq

0b10011 supervisor pc, r14_svc, r13_svc, r12 to r0, cpsr, spsr_svc

0b10111 abort pc, r14_abt, r13_abt, r12 to r0, cpsr, spsr_abt

0b11011 undefined pc, r14_und, r13_und, r12 to r0, cpsr, spsr_und

0b11111 system pc, r14 to r0, cpsr (armv4 and above)

並非模式位的所有組合都定義了乙個有效的處理器模式,只能使用那些明確描述的組合

簡介:t和j位選擇當前指令集

j t instruction set

0 0 arm

0 1 thumb t為1時是thumb指令集

1 0 jazelle

1 1 reserved

說明:jazelle操作碼執行的硬體加速可以在armv5tej和armv6及更高版本上實現(實際上是給jvms提供加速的)。在這些架構變體中,當硬體加速器存在並啟用時,bxj指令用於從arm狀態切換到jazelle狀態。如果硬體加速器禁用或不存在,則bxj指令的行為為bx指令,j位保持清零。有關詳細資訊,請參閱第a2-53頁上的「jazelle擴充套件」

arm架構支援七種型別的異常。表a2-4列出了用於處理每種型別的異常型別和處理器模式。

當異常發生時,強制執行從與異常型別相對應的固定記憶體位址。這些固定位址稱為異常向量

exception type mode ve(a) normal address high vector address

reset supervisor 0x00000000 0xffff0000

undefined instructions undefined 0x00000004 0xffff0004

software interrupt (swi) supervisor 0x00000008 0xffff0008

prefetch abort (instruction fetch memory abort) abort 0x0000000c 0xffff000c

data abort (data access memory abort) abort 0x00000010 0xffff0010

irq (interrupt) irq 0 0x00000018 0xffff0018

1 implementation defined

fiq (fast interrupt) fiq 0 0x0000001c 0xffff001c

1 implementation defined

ve說明: ve = vectored interrupt enable (cp15 control); raz when not implemented

ARM彙編程式設計基礎之四 ARM彙編偽操作

掌握了基本的arm彙編指令後,要寫出簡單的arm匯程式設計序,還必須要掌握基本的arm彙編偽操作 directive 現在我們來看乙個簡單的匯程式設計序,該程式呼叫子程式完成了加法操作。1 檔名 test.s 2 功能 實現兩個暫存器相加 3 area example,code,readonly 宣...

ARM彙編程式設計基礎之四 ARM彙編偽操作

掌握了基本的arm彙編指令後,要寫出簡單的arm匯程式設計序,還必須要掌握基本的arm彙編偽操作 directive 現在我們來看乙個簡單的匯程式設計序,該程式呼叫子程式完成了加法操作。1 檔名 test.s 2 功能 實現兩個暫存器相加 3 area example,code,readonly 宣...

基礎常用arm彙編指令

ldr 目的暫存器 儲存器位址 作用 指令從記憶體中讀出資料到暫存器中 比如 ldr r1,r2,4 將位址r2 4的記憶體單元的資料讀取到r1中 ldr r1,r2 將位址r2的記憶體單元的資料讀取到r1中。r1 r2 注意 ldr中的第二個引數為 時,表示偽指令,或者表示記憶體訪問指令 比如 l...