我试图在寄存器上执行一个位置,作为一个位掩模,以删除最重要的位(从0计数时恰好是1个位)。但是,当我尝试使用GCC编译代码时,它会给我以下错误消息:

汇编消息:19:错误:搬迁溢出

我的猜测是,这与我所施加的位掩码的大小有关,因为当我执行并使用包含少量数字的两个寄存器时,我不会遇到相同的错误。代码本身看起来像

.global main
main:
save    %sp, -96, %sp

clr %l1
clr     %l2
set 0xffff, %l0
set 0xaaaa8c01, %l4
set 0xff001234, %l5
set 0x13579bdf, %l6
set 0xc8b4ae32, %l7
srl %l4, 31, %l1    
srl %l0, 15, %l2
xor %l1, %l2, %l1
and %l1, 0x1, %l1
sll %l0, 1, %l0
add %l0, %l1, %l0
and %l0, 0xffff, %l0


mov 1, %g1
ta  0

如果有人可以就如何解决此问题提供一些见解,那么将不胜感激。

谢谢,

Badpanda

有帮助吗?

解决方案

最重要的位是位15(当位基于零时,在16位整数中)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top