gpt4 book ai didi

assembly - 我可以移动二进制数的极限是多少?

转载 作者:行者123 更新时间:2023-12-05 09:24:15 27 4
gpt4 key购买 nike

对于一个赋值,我们应该将 32 位二进制数移动 44,这是否意味着最重要的位置变得无关紧要?意思是,我只关心最接近最低有效位的 32 位吗?例如:

 $t0 = 0xBBBBBBBB
#10111011101110111011101110111011
sll $t2, $t0, 44

最佳答案

我认为您的作业有错字。 MIPS sll 指令只支持 5 位的移位。也就是说,指令编码中的字段只有 5 位长,所以只有 [0,31] 中的移位值是合法的。事实上,如果我尝试组装这个简单的程序:

    .globl f
.text
f:
sll $t2, $t0, 44

我收到来自 gcc 的警告:

example.s: Assembler messages:
example.s:3: Warning: Improper shift amount (44)

反汇编输出对象显示:

Disassembly of section .text:

00000000 <f>:
0: 00085300 sll t2,t0,0xc

如您所见,它只会实际上移动 12。它只是减少了移动量模 32。这个结果意味着像您的作业中提供的指令一样简单不合法。

您的问题的另一个可能答案是 0,因为将任何数字左移超过其大小在逻辑上可能会导致寄存器全为零。类似的论点适用于右移,尽管您将以 00xffffffff 结束,具体取决于符号扩展行为以及开始时位 31 中发生的情况.

关于assembly - 我可以移动二进制数的极限是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14619394/

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