gpt4 book ai didi

c - char数据类型在32位寄存器中是如何表示的?

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:46 25 4
gpt4 key购买 nike

我知道 int 和其他 32 位数据类型适合寄存器。但是我不明白当我们的数据类型(例如 1 个字节的 char)小于 32 位时会发生什么。就像在 char 示例中一样,其余 24 位会发生什么?它是否用全 0 填充?是不是太小了,无法用一句话来表示?

更新:假设我有一个带有 char 变量的 C 程序。它在寄存器中如何表示?

最佳答案

如果 CPU 允许分段寄存器访问(例如,字、字节),它可能只使用字节子寄存器。如果 CPU 是严格的 32 位,则您的字节进入位 0-7。根据目标用途,它可能会或可能不会将其余部分屏蔽为 0。(和 reg,0x000000FF)如果目标代码与寄存器一起工作作为一个整体。有太多的变数和太多的开放性,无法给你一个黑色或白色的答案。

使用 0xFF 作为字节寄存器和 0x000000FF 作为 d 字寄存器与使用它们的操作码相同,如果它们具有单独的字节和双字对应部件。除非它们是特定于位的操作,例如“如果设置了高位则分支”或位旋转/移位。如果有符号,0xFF 将扩展为 0xFFFFFFFF(或 0x83 为 0xFFFFFF83)

编辑更新:在寄存器中表示一个 char 的 C 确实会将其余部分置零,具体取决于编译器,它可能会在设置位 0-7 之前先将寄存器置零,或者它可能会按照上面解释的方式执行。有符号时,符号位需要扩展为 0 寄存器,否定它并设置 0-7。有些 CPU 甚至有一个明确的符号扩展操作。

关于c - char数据类型在32位寄存器中是如何表示的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com