2

最上位ビット (0 から数えるとたまたまビット 16) を削除するためのビットマスクとして、レジスタでビットごとの AND を実行しようとしています。ただし、gcc を使用してコードをコンパイルしようとすると、次のエラー メッセージが表示されます。

アセンブラー メッセージ: 19: エラー: 再配置オーバーフロー

私の推測では、これは適用しているビット マスクのサイズと関係があると思われます。これは、小さな数値を含む 2 つのレジスタで 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 に答える