所以我需要计算一个整数上的位数,这是我的代码,但我不知道为什么不起作用,我从 c main 发送了一个十六进制值,我必须以某种方式对其进行移位并屏蔽它。我有点迷茫,我想我得到了一个错误的答案,因为我不知道如何转移和掩盖,但我想我有点知道我在用循环和添加做什么。我再次需要数到 32 位不是 0 的 1 位,但我得到了错误的答案,例如 6 110 它将是 2 位。这是一个家庭作业,所以我不能使用内置功能或其他任何东西哈哈。
.global hi
hi:
save %sp,-1024,%sp
clr %i0
clr %i1
clr %i2
loop:
cmp %i2,32
be,a away
mov %l7,%i0
add 1,%i2,%i2
and %i0,1,%l1
cmp %l1,1
be count
nop
!srl %i0,%l2,%10
!mov %l2,%i0
!and %i0,1,%i0
srl %i0,1,%i0
ba loop
nop
!mov %l2,%i0
count:
add 1,%l7,%l7
away:
ret
restore
为什么这还不起作用?我遵循了它的c实现,但仍然没有返回位数:/。返回值为 %i0 ,我不知道如何在递增计数器后跳回循环。
那么这是在做什么呢?当它说ba循环时,它不应该回到循环吗?
所以我不知道是否有太多要问的问题,但是你知道如何解决这个问题吗?:p 因为我真的不知道,我正在查看手册,但没有看到任何可以帮助我的东西:/。