gpt4 book ai didi

c - 如何将偏移量添加到程序计数器?

转载 作者:太空宇宙 更新时间:2023-11-04 03:17:43 24 4
gpt4 key购买 nike

基本上,程序计数器可能具有无符号整数值:

例如,如果 PC 是 0b11110000(240),那么我们认为它是 240,而不是负值。

但是,如果我们将偏移量(符号扩展)添加到上面的 PC(0b11110000) 中,添加的值可以是负值也可以是正值:

For example, if we add 0b11111001(-7) to PC 0b11110000(240), the PC should have 233(which means we do add operation between unsigned and signed). However, if offset is positive value, then PC 0b11110000(240) + offset 0b00001111(15) = 255(which means we do add operation between unsigned and signed)

unsigned 和 signed 之间的相加操作如何实现?

最佳答案

关于 two's complement 的好处之一算术是它对有符号和无符号数量一致地工作。事实上,很多时候,CPU 不知道/不关心它是在有符号数还是无符号数上运行——在某种程度上(尤其是加法和减法),这主要是解释问题。

您问的是 240 + -7 和 240 + 15。让我们看看有符号域和无符号域中的这两个问题:

  1. 未签名 + 已签名:

    240 + -7 = 233

    240 + 15 = 255

  2. 无符号 + 无符号:

    240 + 249 = 233 (489 % 256)

    240 + 15 = 255

  3. 签名+签名:

    -16 + -7 = -23

    -16 + 15 = -1

  4. 有符号 + 无符号:

    -16 + 249 = -23

    -16 + 15 = -1

这是怎么回事?好吧,233 unsigned 与 -23 signed 相同:它们都是 11101001(8 位)。在二进制中,这两个问题如下所示:

11110000 + 11111001 = (1)11101001

11110000 + 00001111 = 11111111

第一个结果溢出:它真的是 111101001(489),但它溢出了,我们丢失了第 9 位,结果是 11101001(233)。

剩下的都是解释。 11110000 是 -16 有符号,或 240 无符号。 11111001 是 -17 有符号,或 249 无符号。 11101001 是 -23 有符号或 233 无符号。 11101111 是 -1 有符号,或 255 无符号。 00001111 始终为 15。

(所有这些都假设二进制补码。如果使用二进制补码或符号/大小,情况会大不相同。但二进制补码是您的计算机使用的。)

关于c - 如何将偏移量添加到程序计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49831259/

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