.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 :(得分:5)
.
开头的指令实际上是汇编程序指令。您可以在GAS: ARM machine directives .syntax unified
表示使用统一的ARM / Thumb汇编语法。该概念已解释为here和here。.thumb_func
表示ARM-Thumb互通的Thumb模式功能的开始。该概念已解释为here和here。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)。