最上位ビット (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
誰かがこの問題を解決する方法についての洞察を提供できれば、それは非常に高く評価されます.
ありがとう、
悪いパンダ