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