gpt4 book ai didi

c - SPARC 程序集,设置 cflags

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

这让我感到困惑,我真的不明白为什么我会遇到这个问题。我要在 c 中创建一个程序,它在设置 cflags之前输出一个无符号值,使用汇编通过 addcc 累积一个变量,并将该值发送回 c 中的 main。我相信我的 c 代码是正确的:

unsigned int func();

int main(void){
printf("The max value before the C flag is set is: %u\n", func());
}

现在问题出在程序集上......

.global func
func: save %sp, -128, %sp
addcc %g0, 1, %g0
clr %l0

loop:
bcs away
mov %l0, %i0
addcc %i0, 1, %l0
ba loop
nop

away:
ret
restore

这应该做的是累积 %l0,当设置 cflags时将值传递回 %i0 并返回它。当我运行它时,我得到 0。这对我来说很有意义,因为我相信我应该得到一个更大的数字。任何帮助将不胜感激。

最佳答案

问题是 Sparc 上的分支被延迟了——分支之后的下一条指令将在分支实际执行之前执行。所以当你有:

bcs away
mov %l0, %i0

当设置 cflags并采用此分支时,mov 仍将执行,覆盖 %i0 中的值(最后添加该设置之前的值C) 与%l0(添加后的值 -- 0)。

如果你在这里打个盹:

bcs away
nop
mov %l0, %i0

它应该给你你想要的值(value)。

关于c - SPARC 程序集,设置 cflags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774623/

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