我有一个带有一个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汇编程序(crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11)2.24.0.20131220
答案 0 :(得分: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) */