【发布时间】:2013-04-02 21:21:01
【问题描述】:
这让我感到困惑,我真的无法弄清楚为什么我会遇到这个问题。我将在 c 中创建一个程序,该程序在设置 C 标志之前输出一个无符号值,使用程序集通过 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,当设置 C 标志时,将值传递回 %i0 并返回它。当我运行这个时,我得到 0。这对我来说很有意义,因为我相信我应该得到一个更大的数字。任何帮助将不胜感激。
【问题讨论】:
-
C 标志表示进位?然后我猜它在值为
UINT_MAX时设置为递增。现在,UINT_MAX + 1为 0。 -
这正是我的假设,唯一的问题是我不知道如何在重置之前返回数字。我可以使用:bcs(设置 c 标志时的分支)或 bcc(清除 c 标志时的分支)
-
设置标志后将值减一(还是作弊?)。
-
subcc?我试过了,我得到-1。
-
不,我认为这不会被视为作弊。我虽然有一段时间因为某种原因它没有循环,调试过,是的,它正在循环,所以它必须重置。减去一个会带我到-1!令人沮丧!