如何为thumb2(T32)指令运行linaro汇编程序

时间:2014-07-28 10:05:08

标签: assembly arm thumb linaro

我有一个带有一个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

1 个答案:

答案 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) */