assembly - 奇怪的汇编语言添加

标签 assembly binary hex addition cpu-registers

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

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) 的溢出来实现的。

关于assembly - 奇怪的汇编语言添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48273715/

相关文章:

c - 如何阻止文件名/路径出现在已编译的 C 二进制文件中

C# 中的十六进制变量

java - 如何读取二进制文件中的整数和日期

loops - 8086 Assembly - 更好的数据存储/操作?

assembly - 如何在汇编中表示八进制数?

windows - ld 链接器的输出可执行文件比 golink 输出可执行文件大,为什么?

c# - 二进制到字符串为二进制?

c++ - 将两个字符的字符串变量转换为十六进制

C printf %a 和 %La

windows - 为什么这段汇编代码不打印栈顶?