相关疑难解决方法(0)

在8位二进制中从0减去1

根据二进制算术规则,我有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都来自哪里?有没有借到,因为所有位都0zero变化.

c math binary twos-complement integer-arithmetic

1
推荐指数
1
解决办法
1142
查看次数

在使用DIV指令之前,为什么EDX应为0?

我注意到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确实让我感到困惑.

x86 assembly integer-division

0
推荐指数
1
解决办法
5017
查看次数

算术恒等式和 EFLAGS

由于 ?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?如果不是,又怎么能强求呢?

x86 assembly x86-64 eflags

0
推荐指数
2
解决办法
136
查看次数