当前位置: 首页 > 知识库问答 >
问题:

将32位有符号整数存储到寄存器中的具体细节是什么?

勾向文
2023-03-14

我的数字类型是有符号二的补码整数。

在内存寄存器%rdi/edi/di中,我有0xFFFFFFFF。在%rsi/esi/si中,我有0x8000000。

如何正确添加这些?

我认为答案是:

由于我添加的是完整的32位寄存器,因此可以添加完整的0xFFFFFFFF和0x8000000。

我把一个有符号整数加到一个有符号整数上,它们都是32位的。我实际上是在加-2147483648和0x8000000。因为0x8000000在十六进制中是2147483648,我把这两个加起来,得到零。

零标志被激活进位标志被激活(因为我正在添加32位寄存器的前导值)

共有1个答案

滑畅
2023-03-14

在32位二的补码中,0xFFFFFFFF表示−1,并且表示0x8000000−2147483648。这些总和为−2147483649。这不适合32位,因此它溢出。计算结果将为0x7FFFFFFF,表示2147483647。

在位级别:FFFFFFFFplus8000000产生17FFFFFFF,这意味着7FFFFFFF存储在32位目标中,并且1执行

 类似资料:
  • 问题内容: 由于Redis尝试将字符串解析为64位带符号整数,因此存储32位带符号整数而不是基数10个整数字符串的二进制表示是个好主意吗? 在我们的系统中,我们列出了许多32位带符号整数ID。 问题答案: 在内部,Redis以最有效的方式存储字符串。将整数强制为基数10的字符串实际上会占用更多的内存。 这是Redis存储字符串的方式- 小于10000的整数存储在共享内存池中,并且没有任何内存开销。

  • 基本上指令有8->16、8->32、8->64、16->32和16->64。 32->64的转换在哪里?我必须使用签名版本吗? 如果是的话,您如何使用完整的64位来表示无符号整数?

  • (*在下面的帖子中,所有的IP、端口和密码都已更改。很抱歉这篇文章的格式,编辑似乎不喜欢新行。) 问题:如何将整数存储为带符号的32位小尾数? 背景:我试图使用RCon连接到bash中的minecraft服务器。到目前为止,服务器显示正在接收连接,但我无法正确格式化数据包。我可以使用mcrcon连接到服务器并在wireshark中查看数据包,但是当我尝试使用bash脚本时,数据包长度、reques

  • 我正在寻找一种方法来移动arch64寄存器x1中的任何32位常数。 是否有一种方法可以执行

  • 我正在使用x86 Assembly,我遇到了使用指令的需要。 我的代码片段过去是这样的: 其中<代码> 所以我的程序正在命中未定义的行为,在这种情况下是一个无限循环,在检查了很长时间可能出错的地方之后,我认为我必须使用,因为 实际上将结果存储在< code>ax中。因此,我在< code>ax中有一个有符号的结果,而我希望在< code>al中有一个无符号的(有上溢/下溢)结果。 所以我的问题是:

  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 32位寄存器,包括了Intel x86 Assembly& Microarchitecture 32位寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 英特尔生产80386时,他们从16位处理器升级到了32位处理器。32位处理意味着两件事:要处理的数据都是32位,而要访问的内存地址是32位。为此,他们仍然