有人可以翻译一下 Cortex M7 的 ASM 指令代码吗?

问题描述 投票:0回答:1

" mrs %0, ipsr " : "=r" (reg_tmp) 

出于好奇,我需要翻译这段 ASM 代码,它是针对 ARMV7,特别是在特权模式下执行的 cortex-M7。我知道 MRS 指令是从特殊寄存器(此处的 IPSR 子寄存器/PSR 位字段)移动到通用寄存器。但我不明白这部分:“=r”(reg_tmp)不知何故。另外%0在这里意味着什么?

说实话,我对 ASM 代码知之甚少,所以请记住这一点。 :)

由此生成的 ASM 代码是:

push {r4}
mrs r3,ipsr
mov r4,r3
mov r3,r4
mov r0,r3
pop {r4}
bx  r14

可以优化为:

push {r4}
mrs r0,ipsr
pop {r4}
bx  r14
assembly arm inline-assembly cortex-m
1个回答
0
投票

是的,你的手牌优化是正确的,但你可以通过省略推入和弹出来更进一步,因为它们相互抵消。

如果您用另一个名称

r14
(链接寄存器)来称呼
lr
,也会更容易阅读。如果您使用 GNU objdump 生成代码,请尝试添加
-M reg-names-std
以自动获取此代码。

© www.soinside.com 2019 - 2024. All rights reserved.