2

私は SPARC アセンブリを学んでおり、レジスタからフィールドを抽出するスクリプトを作成する必要があります。スクリプトは、初期番号、フィールド開始位置、フィールド長の 3 つの値を受け入れます。
シフト関数は使用できませんが、乗算と除算は使用できます。
私は現在、呼吸器ウイルスに苦しんでおり、その後かなりの量の薬を服用しています. 私はこれをどこから始めるべきかを理解するのに非常に苦労しています. いくつかの指示をいただければ幸いです。

4

1 に答える 1

3

2 による乗算は左シフトであり、2 による除算は右シフトです (少なくとも符号なしの数値の場合)。

2ビット左シフトしたい場合、それは4倍です。

したがって、たとえば、バイナリ値がある場合:

b15              b0
v                 V
0000 1111 0101 1000

b3 と b2 を抽出したい場合は、ロット全体と 0xc0 の AND を取り、4 で割ります。

0000 1111 0101 1000
0000 0000 0000 1100  <- AND with 0xc0
-------------------
0000 0000 0000 1000
-------------------
0000 0000 0000 0010  <- divide by 4

これは宿題のように聞こえるので (そして、私は長い間SPARC 用にコーディングしていません)、完成したソリューションを提供しようとはしません。

于 2009-02-12T06:01:53.897 に答える