我正在尝试学习 SPARC 并尝试创建一个大小为 4,000 字节的数组。在这个数组内部,我需要计算一个偏移量以将值放置在该数组中的正确位置。我想我知道如何调整数组的大小(只需使用.skip?)并且我知道如何计算我的偏移量,但是谁能告诉我如何将值放入正确的字节中?感谢大家。编辑:我最初说的是位,意思是说字节。
问问题
69 次
1 回答
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
哦,我看到问题已更新为字节而不是位。嗯,这更容易。假设索引 in %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 回答