【问题标题】:How do I run the linaro assembler for a thumb2 (T32) instruction如何为 thumb2 (T32) 指令运行 linaro 汇编程序
【发布时间】:2014-07-28 10:05:07
【问题描述】:

我有一个带有 thumb2 (T32) 指令的简单汇编文件 (temp.S)。例如: 或 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

【问题讨论】:

  • 如果在程序集文件的顶部添加.syntax unified.code 16 并跳过-mthumb 命令行选项会怎样?
  • 同意迈克尔,这很好。
  • 是的。也为我工作,非常感谢。
  • GCC 4.5 文档提到 -mthumb 的行为优于同一文档的当前版本gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/ARM-Options.html

标签: assembly arm thumb linaro


【解决方案1】:

引用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) */

【讨论】:

  • 很可能,设置-mcpu or -march 也是一种替代解决方案。 .syntax unified 将向汇编器发出 thumb2 信号。
猜你喜欢
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
相关资源
最近更新 更多