ArmV7A 汇编代码的 ARM-GCC 代码指令:.code 与 .arm 指令模式指令

ARM-GCC code directives for ArmV7A assembly code: .code vs .arm instruction mode directives

汇编文件中的 .code32.code 32.arm 指令有什么区别?

.S文件将用arm-none-eabi-as

编译

这三个指令是否相同? None 这些指令在程序员指南 (https://developer.arm.com/documentation/den0013/d/Introduction-to-Assembly-Language/Introduction-to-the-GNU-Assembler/Assembler-directives?lang=en) 中进行了解释,所以我自己很难回答这个问题。

本质上,我们希望确保在给定的 .S 文件中编写的所有函数都处于 ARM32 指令模式(即不是 Thumb)。

-- 更新:看起来和我想象的一样 .code32!其他两个指令是相同的,.arm 实际上只是 shorthand for .code 32.

为快速回复干杯!

它们记录在 GNU 汇编程序手册中 https://sourceware.org/binutils/docs/as/ARM-Directives.html#ARM-Directives

.code [16|32]

This directive selects the instruction set being generated. The value 16 selects Thumb, with the value 32 selecting ARM.

.arm

This performs the same action as .code 32.

所以任何一个都会做你想做的。

未提及 .code32 变体。正如您所注意到的,它实际上在 GNU 中不起作用。这可能是一个拼写错误,或者某些版本可能具有允许 space 可选的语法。