执行位和(SPARC组装)时搬迁溢出?
-
08-10-2019 - |
题
我试图在寄存器上执行一个位置,作为一个位掩模,以删除最重要的位(从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位整数中)。
不隶属于 StackOverflow