arm彙編學習 六 跳轉到thumb狀態

2022-07-21 03:24:09 字數 831 閱讀 2346

通常函式返回使用 pop 或bx lr等方式(bx,b類似jmp為跳轉指令,但bx可以指定跳轉區域究竟為thumb還是arm指令。

thumb指令指令的時候,直接填寫該位址卻總是產生sigsys訊號(非法指令執行)。

原因就是該函式為thumb指令,因此跳轉時必須要把指令位址的最低位設定為1(bx 通過這一位來區分指令集),所以函式位址就加了一。

thumb指令集與arm指令集切換

mov

r0,#5;

argument to function is in r0

addr1,pc,#1;

load address of sub_branch, set for thumb by adding 1

bx r1 ;

r1 contains address of sub_branch+1

;assembler-specific instruction to switch to thumb

sub_branch:

blthumb_sub

;must be in a space of +/- 4 mb

addr1,#7;

point to sub_return with bit 0 clear

bxr1

;assembler-specific instruction to switch to arm

sub_return:

arm狀態下指令的位址末兩位都是0

而thumb狀態下指令位址的末尾是0

thum1+1表明你即將跳入thumb狀態,系統會自動調整位址的

參考:

arm 彙編學習

一 暫存器和定址 arm有16個暫存器,r0 r15 pc r15 lr r14 sp r13 ip r12 push sp減少,pop sp增加 1.定址方式 從操作位址尋找運算元的方式 2.arm的定址方式 a 暫存器定址,運算元在暫存器中 b 立即定址,運算元就在指令中 subs r0,r0,...

ARM彙編學習

前言 任何彙編行都是如下結構 comment 注釋 gnu arm 彙編中,任何以冒號結尾的都被認為是乙個標籤,而不一定非要在一行的開始。下面是乙個簡單的例子,這段匯程式設計序定義了乙個 add 的函式,該函式返回兩個引數的和 section text,x global add give the s...

ARM彙編學習

前言 任何彙編行都是如下結構 comment 注釋 gnu arm 彙編中,任何以冒號結尾的都被認為是乙個標籤,而不一定非要在一行的開始。下面是乙個簡單的例子,這段匯程式設計序定義了乙個 add 的函式,該函式返回兩個引數的和 section text,x global add give the s...