4

我有一个带有 thumb2 (T32) 指令的简单汇编文件 (temp.S)。例如: orr R4,R7,R8
我想用 linaro 汇编器来组装它,但我找不到合适的标志来做这件事。

如果我尝试:

arm-linux-gnueabihf-as -o temp.o temp.S  

然后我得到了A32版本指令的汇编

但是,如果我尝试:

arm-linux-gnueabihf-as -o temp.o -mthumb temp.S  

我收到错误消息

>  temp.S: Assembler messages:  
>  temp.S:1: Error: lo register required -- `orr R4,R7,R8  

好像它正在等待 T16 指令。

任何有关 T32 指令正确标志的帮助将不胜感激。

顺便说一下,我的汇编器版本是:GNU assembler (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) 2.24.0.20131220

4

1 回答 1

3

引用Ubuntu wiki

由于历史原因,as它确实支持-mthumb命令行选项,但它并不能满足您的要求:这启用了较旧的 Thumb-1,它有自己的不兼容语法。要生成 Thumb-2 代码,您仍然需要打开统一的汇编语法,这只能使用.syntax unified汇编源代码中的指令来完成。为了将所有内容保存在一个地方并避免混淆,最好使用指令控制汇编器输出模式,而不是尝试在命令行上控制它。


TL;DR,把它放在你的汇编文件中:

.syntax unified /* use unified assembler syntax */
.code 16        /* assemble in Thumb-2  (.thumb" can also be used) */
于 2014-07-28T16:00:21.287 回答