【发布时间】:2018-01-22 12:02:54
【问题描述】:
我们知道,如果我将 %eax 设置为输入,那么我无法将其包含在已破坏的寄存器列表中。所以我的问题是,在汇编代码中修改%eax 的值而不在clobbered 列表中进行任何声明是否合法?
__asm__ __volatile__("inc %0" :: "a"(num) : "%eax"); // illegal
__asm__ __volatile__("inc %0" :: "a"(num)); // Can I modify %eax?
【问题讨论】:
-
您的代码将编译 + 汇编,但随后可能会在运行时以奇怪的方式中断,或者有时不会中断,具体取决于周围的代码和优化选项。这意味着单元测试不足以证明 inline-asm 正确或安全。
标签: c gcc inline-assembly