Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何生成装配轮班代码?_Assembly_Mips - Fatal编程技术网

Assembly 如何生成装配轮班代码?

Assembly 如何生成装配轮班代码?,assembly,mips,Assembly,Mips,我正在使用SIM-PL汇编程序(MIPS指令)并尝试生成此汇编代码。我需要将寄存器值移位为1,但当它到达最后一位时,它必须“重新启动”并将值添加到第一位。我甚至不知道该怎么开始。有人能帮我吗 pattern = 110 Register value = 00......00000110 Register value = 00......00001100 Register value = 00......00011000 .... Register value = 11......0000000

我正在使用SIM-PL汇编程序(MIPS指令)并尝试生成此汇编代码。我需要将寄存器值移位为1,但当它到达最后一位时,它必须“重新启动”并将值添加到第一位。我甚至不知道该怎么开始。有人能帮我吗

pattern = 110
Register value = 00......00000110 
Register value = 00......00001100
Register value = 00......00011000
....
Register value = 11......00000000
Register value = 10......00000001
Register value = 00......00000011
....
这叫做旋转。由于mips没有旋转,您可以简单地将其分解为
(x>>31)|(x移位将“新”输入位填充为零或1,具体取决于移位类型

您所描述的是旋转指令。旋转指令将离开寄存器一端的位推入寄存器另一端的输入位

rol用于左旋转,ror用于右旋转


大多数MIPS汇编器为您实现旋转,但MIPS芯片本身没有内置的旋转指令。

这里可能重复的只是为了学究:MIPS在2002年发布的MIPS32r2 ISA中引入了旋转指令。但是像SPIM这样的教学工具大多停留在旧版本的ISA上。