【问题标题】:How do you 'OR' arguments in assembly language? [closed]你如何在汇编语言中“或”参数? [关闭]
【发布时间】:2016-03-14 17:55:31
【问题描述】:

例如(在 C 中)...

int main() {
    fxn(EXAMPLE_VALUE | EXAMPLE_VAL | EXAMPLE_V);
}

如何用汇编语言做到这一点?

【问题讨论】:

  • 可能使用 OR 指令或类似名称的指令。

标签: c assembly


【解决方案1】:

与 C 中的方法相同。

global main
main:
    mov    edi, EXAMPLE_VALUE | EXAMPLE_VAL | EXAMPLE_V
    call   fxn             ; AMD64 SysV ABI: first arg in rdi
    xor    eax,eax
    ret

(或者,如果这不是 main,带有隐式 return 0,则优化对 jmp fxn 的尾调用。)

asm 语法允许复杂的表达式,只要一切都是汇编时常量。通常也允许将链接时常量(例如符号地址)添加/减去其他常量,例如[ static_buf + 10 ]

请参阅 标签 wiki 以获取指向 NASM 文档等的链接。

其他架构的汇编器类似;这不是特定于 x86 的。

【讨论】:

  • 非常感谢。我还检查并发现 ORing 整数参数只是将它们加在一起。
  • @Sam:在1^1 的情况下,加法是 XOR 与位之间的进位,所以是的,它在无进位情况下给出与 OR 相同的结果(例如,每个都有一个单一的常量位设置)。在这种情况下,OR 是首选,以更好地表达在位掩码中设置多个位的语义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多