gpt4 book ai didi

assembly - 如果数字不 >= 0,为什么代码加 7

转载 作者:行者123 更新时间:2023-12-04 14:03:24 25 4
gpt4 key购买 nike

我在 MIPS 汇编中有这个程序,它来自一个 C 代码,它对函数的第八个参数进行简单的平均。

average8:
addu $4,$4,$5
addu $4,$4,$6
addu $4,$4,$7
lw $2,16($sp)
#nop
addu $4,$4,$2
lw $2,20($sp)
#nop
addu $4,$4,$2
lw $2,24($sp)
#nop
addu $4,$4,$2
lw $2,28($sp)
#nop
addu $2,$4,$2
bgez $2,$L2
addu $2,$2,7
$L2:
sra $2,$2,3
j $31

当数为正时,我们直接除以8(移位3位),但当数为负时,我们先 addu 7然后做除法。

我的问题是我们为什么要添加 7$2$2 is not >= 0 ?

编辑:这是 C 代码:
int average8(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8)
{
return (x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8) / 8;
}

注意:由于我们使用整数而不是浮点数或 double 数,因此除法中可能的损失在这种情况下并不重要。

最佳答案

这种差异似乎解释了 / 8 的不同行为。和 >> 3当涉及负数时:

int main() {
printf("%d\n", (-50) / 8);
printf("%d\n", (-50) >> 3);
printf("%d\n", (-50 + 7) >> 3);
}


-6
-7
-6

所以,编译器想使用 >> 3优化,但与 / 8 不完全一样,所以它添加了一些代码来纠正它。

关于assembly - 如果数字不 >= 0,为什么代码加 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237188/

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