了解此零件臂装配代码

时间:2014-03-14 04:36:46

标签: assembly arm gas cortex-m

.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之类的汇编程序指令的行为。更重要的是,我也不知道如何使用这部分代码,它没有'看起来像常规功能。所以我不知道怎么打电话"它。

2 个答案:

答案 0 :(得分:5)

  • .开头的指令实际上是汇编程序指令。您可以在GAS: ARM machine directives
  • 中查找它们
  • .syntax unified表示使用统一的ARM / Thumb汇编语法。该概念已解释为herehere
  • .thumb_func表示ARM-Thumb互通的Thumb模式功能的开始。该概念已解释为herehere
  • raise_privilege看起来与C中的void raise_privilege(void) 叶函数(即它不会调用其他函数)完全相同。请致电:
bl raise_privilege

答案 1 :(得分:0)

gnu汇编程序坏了,傻瓜,笨拙,选择你的话......

在这种情况下。为了能够调用该标签,你需要.thumb_func加上一个标签,thumb_func告诉汇编器以下标签是我可能想要调用或加载地址并使用bx。

所以在这段代码或其他代码中你可以简单地

bl raise_priviliedge 

(如果bl可以到达和/或链接器添加蹦床)。或者你可以

ldr rX,=raise_priviledge  
blx rX 

其中rX是一些通用寄存器(例如r3)。