-2

我正在尝试学习 SPARC 并尝试创建一个大小为 4,000 字节的数组。在这个数组内部,我需要计算一个偏移量以将值放置在该数组中的正确位置。我想我知道如何调整数组的大小(只需使用.skip?)并且我知道如何计算我的偏移量,但是谁能告诉我如何将值放入正确的字节中?感谢大家。编辑:我最初说的是位,意思是说字节。

4

1 回答 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 回答