奇怪的汇编语言添加

Strange Assembly Language Addition

我最近在学习汇编语言,我遇到了一个我不明白的添加语句。

ebx=00000003;
esi=0FFFFFFFFh;
add ebx,esi
The Result was: ebx=00000002

这怎么可能? 有人可以向我解释加法是如何发生的吗?

这是一个被掩饰为加法的减法。
指令 add ebx,esi 将 ESI 中的值 -1 添加到 EBX 中的 3 的值,从而得到值 2.

这是可能的,因为 two complement binary addition

ebx=000000003h;   3
esi=0FFFFFFFFh;  -1
--------------;   +
ebx=000000002h;   2

减法是通过从0FFFFFFFFh(-1)到00000000h(0)的溢出实现的。