我意识到这可能看起来像一个骗局,但我没有发现任何与我的问题很相似的东西。说我有 yasm:
segment .data
a db 0
...
main:
mov rax, 0xffffffff
mov [a], rax
为什么在进入 a 时不设置进位标志?只是一个字节!当我清楚地移入它时,它比一个字节大得多。事实上,在 gdb 中,整个数字都存储在 a 中。鉴于它的声明,这怎么可能?
因为mov
没有设置标志。没有比这更深层次的原因了。
引用英特尔指令集参考手册:
受影响的标志
没有任何。
The carry bit gets set with mathematical operations only. You might be thinking of the overflow bit, but this also does nothing in this case.
As Stephen rightly says:
mov
doesn't set flags