将数据放入特定位

时间:2012-11-17 01:28:38

标签: assembly solaris sparc

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

1 个答案:

答案 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