根据二进制算术规则,我有8位int zero = 0b00000000;和8位int one = 0b00000001;,
0 - 1 = 1(从下一个有效位借1).
所以,如果我有:
int s = zero - one;
s = -1;
-1 = 0b1111111;
Run Code Online (Sandbox Code Playgroud)
所有这些1都来自哪里?有没有借到,因为所有位都0在zero变化.
我注意到EDX包含一些随机默认值,如00401000,然后我使用这样的DIV指令:
mov eax,10
mov ebx,5
div ebx
Run Code Online (Sandbox Code Playgroud)
它会导致INTEGER OVERFLOW ERROR.但是,如果我设置edx为0并执行相同的操作.我相信使用div会导致商重写eax和其余覆盖edx.
获得此INTEGER OVERFLOW ERROR确实让我感到困惑.
由于 ?x = not(x)+1 则意味着 ab = a+not(b)+1,那么
sub rax, rcx
Run Code Online (Sandbox Code Playgroud)
相当于
mov temp, rcx
not temp
add rax, temp
add rax, 1
Run Code Online (Sandbox Code Playgroud)
temp 某些寄存器被认为是易失性的?
换句话说,后者是否以完全相同的方式影响 EFLAGS?如果不是,又怎么能强求呢?