2014-03-14 64 views
1
.syntax unified 
.thumb 

.cpu cortex-m4 
.arch armv7e-m 
.fpu fpv4-sp-d16 

/* Changes from unprivileged to privileged mode. */ 
.thumb_func 
.section .kernel 
.global  raise_privilege 
.type  raise_privilege, %function 
raise_privilege: 
mrs  r0, control 
bic  r0, r0, #1 
msr  control, r0 
dsb 
isb 
bx  lr 

這是臂裝配代碼的一部分。我可以查看芯片手冊以找出說明的含義。但我不知道如何弄清楚像.thumb_func這樣的彙編指令的行爲。更重要的是,我也不知道如何使用這個零件代碼,它看起來不像常規功能。所以我不知道如何「打電話」。瞭解此零件臂裝配代碼

+0

僞OPS可能是無關緊要搞清楚**的代碼做什麼**。請參閱[控制寄存器](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/CHDBIBGJ.html),它不是* ARM *,而是* cortex-M *具體。 Thumb互聯網可能不是太有用,也不是* cortex-M *的統一。 –

回答

4
  • 指令.開頭的確是組裝指令。你可以在GAS: ARM machine directives
  • .syntax unified的信號中使用統一的ARM/Thumb彙編語法。該概念解釋爲herehere
  • .thumb_func表示用於ARM-Thumb interwork的Thumb模式功能的開始。這個概念解釋爲herehere
  • raise_privilege看起來完全像一個void raise_privilege(void)葉函數(即它不調用其他函數)給我。與調用它:
 
bl raise_privilege 
0

GNU彙編器壞了,愚蠢,笨拙,選擇你的話......

在這種情況下

.thumb_func加一個標籤是你需要爲了能夠調用該標籤的thumb_func告訴彙編的以下標籤是我可能想要調用或加載地址並使用bx的東西。

所以在這個代碼或其他你可以簡單

bl raise_priviliedge 

(如果BL能達到和/或鏈接器增加了蹦牀)。或者您可以

ldr rX,=raise_priviledge 
blx rX 

其中rX是某個通用寄存器(例如r3)。