1

メモリから最大 32 個の 8 ビット数を取得するアセンブリ プログラムを作成する必要があります。各アドレスが 1 つの 8 ビット ワードに対応するメモリ空間の配列が与えられます。各数値をレジスターに移動してから、幅を見つける必要があります。この場合、幅は最初の 1 と最後の 1 の間の距離を意味します。

元:

00000000 = 0

00010000 = 1

00101000 = 3

10000001 = 8

このプログラムでは、独自の命令セットを作成する必要があります。各命令は 8 ビット長なので、過度に長い分岐もできません。

私の主な問題は、「幅」を計算する方法を理解することです。それを行う方法がわかれば、それを行うために 8 ビット命令を使用する方法を理解できるはずです。

4

2 に答える 2

3

x86 (386+) アセンブリには、bsf(ビット スキャン フォワード) とbsr(ビット スキャン リバース) があります。bsf最下位ビットのインデックスを 1 に設定し、bsr最上位ビットのインデックスを 1 に設定します。これらのプラス 1 の差は、必要な距離または幅 (ビット単位) です。これらの命令に相当するものは、独自のプロセッサにも実装できると思います。

于 2012-09-11T07:04:26.937 に答える
0

あなたのプロセッサで可能かどうかはわかりませんが、x86では、最初のキャリーが設定されるまで回転し(最後に1を回転させた場合、キャリーは1に設定されます)、回転数を保存してから、反対に行うことを除いて同じことを行います(8 - これらの 2 つのマージンの合計) にする必要があります。

于 2012-09-11T06:20:39.767 に答える