【发布时间】:2012-05-17 12:09:51
【问题描述】:
我正在使用 Apple 的 llvm-gcc 来编译一些带有内联汇编的代码。我写了我想要它做的事情,但是它添加了一些无关的命令,这些命令不断地将变量写入内存。为什么会这样?我该如何阻止它?
例子:
__asm__{
mov r11, [rax]
and r11, 0xff
cmp r11, '\0'
}
成为(在“装配”助手视图中):
mov 0(%rax), %r11 // correct
movq %r11, -104(%rbp) // no, GCC, obviously wrong
and $255, %r11
movq %r11, -104(%rbp)
cmp $0, %r11
干杯。
【问题讨论】:
-
您是否尝试过使用extended asm syntax 设置适当的输入、输出和破坏列表?
-
@Adam,这是我最好的猜测......我今天会试试。我是否必须切换到
asm("cmd1\n\t" "cmd2" : ... : ... : ... )样式,或者有没有办法将说明符添加到大括号符号中? -
我不知道是否有办法使用花括号表示法添加这些说明符;将其转换为使用带引号的字符串应该不会太难。
-
@Adam 看起来像这样修复了它——如果你想要适当的信用,请将它作为答案发布:)
标签: gcc inline-assembly llvm-gcc