2

我正在尝试对寄存器执行按位与,作为位掩码以删除最高有效位(从 0 计数时恰好是第 16 位)。但是,当我尝试使用 gcc 编译我的代码时,它给了我以下错误消息:

汇编器消息:19:错误:重定位溢出

我的猜测是,这与我正在应用的位掩码的大小有关,因为当我对两个包含小数字的寄存器执行 AND 时,我不会遇到相同的错误。代码本身看起来像,

.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

如果有人能就如何解决这个问题提供一些见解,将不胜感激。

谢谢,

坏熊猫

4

1 回答 1

2

最高有效位是第 15 位(在 16 位整数中,当位从零开始时)。

于 2010-10-15T18:04:42.487 回答