我正在尝试学习SPARC并尝试创建一个大小为4,000字节的数组。在这个数组内部,我需要计算一个偏移量,将值放在该数组中的正确位置。我想我知道如何调整数组的大小,(只是使用.skip?)我知道如何计算我的偏移量,但有人能告诉我如何将值放入正确的字节中吗? 感谢大家。 编辑:我最初说的是位,意思是说字节。
答案 0 :(得分:0)
使用read-modify-write和正确的按位操作(AND
清除一位,OR
设置一个位)。如果内存不是问题,那么你当然也可以为每个位使用一个字节。
更新:说明如何清除数组中的位的示例代码。设置位是类似的,除了使用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