不使用 ROR 指令的逻辑循环?
Logical Rotate without using ROR instruction?
我正在尝试编写 ASM,它使用逻辑右移来移动一个字节而不破坏末尾的字节,而是将它们旋转到前面。本质上,我试图在不专门使用该指令的情况下模拟 ROR 指令。
我知道右移指令会自动将剩余的 space 替换为 0,但是是否有可能更改该值的方法?
.data
InArr: .word 0xe0000000
OutArr: .word 0
.text
.global main
main:
lw $s2, InArr
lw $s3, OutArr
loop:
#ror $s2, $s2, 4
srl $s2, $s2, 4
sw $s2, InArr
bne $s2, $s3, loop
syscall
在这种情况下,代码一直运行到 "e" 一直向右移动。
您可以手动将那些底部的位放回顶部,例如
sll $t0, $s2, 28
srl $s2, $s2, 4
or $s2, $s2, $t0
我正在尝试编写 ASM,它使用逻辑右移来移动一个字节而不破坏末尾的字节,而是将它们旋转到前面。本质上,我试图在不专门使用该指令的情况下模拟 ROR 指令。
我知道右移指令会自动将剩余的 space 替换为 0,但是是否有可能更改该值的方法?
.data
InArr: .word 0xe0000000
OutArr: .word 0
.text
.global main
main:
lw $s2, InArr
lw $s3, OutArr
loop:
#ror $s2, $s2, 4
srl $s2, $s2, 4
sw $s2, InArr
bne $s2, $s3, loop
syscall
在这种情况下,代码一直运行到 "e" 一直向右移动。
您可以手动将那些底部的位放回顶部,例如
sll $t0, $s2, 28
srl $s2, $s2, 4
or $s2, $s2, $t0