-2

私は SPARC を学び、サイズ 4,000 バイトの配列を作成しようとしています。この配列内で、その配列の正しい位置に値を配置するためのオフセットを計算する必要があります。配列のサイズを設定する方法は知っていると思いますが(.skipを使用するだけですか?)、オフセットを計算する方法も知っていますが、値を正しいバイトに配置する方法を誰か教えてもらえますか? みんな、ありがとう。編集:私はもともとビットと言いましたが、バイトと言う意味でした。

4

1 に答える 1

0

読み取り-変更-書き込みおよび適切なビット単位の操作 (ANDビットをクリアする、ビットORを設定する) を使用します。メモリが問題にならない場合は、もちろん各ビットに 1 バイトを使用することもできます。

更新: 配列内のビットをクリアする方法を示すサンプル コード。ビットの設定は似ていますが、使用する代わりに を使用andnしますor

! clear bit index %o0 in "array"
clrbit:
    mov %o0, %o1
    srl %o0, 3, %o0     ! byte offset
    and %o1, 7, %o1     ! bit offset
    set array, %o2      ! array base
    add %o2, %o0, %o0   ! byte address
    set 1, %o3          ! bit mask
    sll %o3, %o1, %o1   ! 1 << bit offset
    ldub [%o0], %o3     ! load byte
    andn %o3, %o1, %o3  ! mask off bit to clear
    stb %o3, [%o0]      ! write back
    retl
    nop

ああ、質問がビットではなくバイトに更新されているようです。まあ、それは簡単です。インデックスが であると仮定すると%o0、書き込むデータは次の%o1とおりです。

set array, %o2      ! array base address
add %o2, %o0, %o2   ! add byte offset
stb %o1, [%o2]      ! write byte
于 2012-11-17T01:40:39.057 に答える