MIPS调整位和循环?
我是MIPS新手,对如何编写MIPS CAN感到困惑,因为有一个问题,我被要求将MIPS代码写入0xABCDABC0内存位置的脉冲位6,总共2*n+74次,假设n在$s1中 我不确定如何在给定地址访问特定位,我知道我必须使用或立即使用1专门打开位,然后使用1将位返回0。循环(没有乘法)我可以加$s2,$s1,$s1MIPS调整位和循环?,mips,Mips,我是MIPS新手,对如何编写MIPS CAN感到困惑,因为有一个问题,我被要求将MIPS代码写入0xABCDABC0内存位置的脉冲位6,总共2*n+74次,假设n在$s1中 我不确定如何在给定地址访问特定位,我知道我必须使用或立即使用1专门打开位,然后使用1将位返回0。循环(没有乘法)我可以加$s2,$s1,$s1 然后再加上$s2,$s2,74,但如何循环呢 这里最简单的部分是编写循环,我可以帮你。我很生疏,但我会尽力让你开始的 循环可以通过临时值、添加立即值、分支指令和/或跳转指令来实现 您
然后再加上$s2,$s2,74,但如何循环呢 这里最简单的部分是编写循环,我可以帮你。我很生疏,但我会尽力让你开始的 循环可以通过临时值、添加立即值、分支指令和/或跳转指令来实现 您正在寻找的基本流程听起来像:
andi $t1, $t1, 0 # set a counter variable to 0 (t1)
loop:
# do some work - whatever you want to accomplish by looping
addi $t1, $t1, 1 # increment the counter
add $s2, $s1, $s1 # this is the code you devised
addi $s2, $s2, 74
bne $s2, $t1, loop #branch to the beginning of the loop if you need more iterations
您需要的下一部分是在内存地址获取一个值,有几种方法可以实现这一点。您应该查看MIPS中可用的加载/存储说明。特别是,我认为您需要使用lw(装入字)指令
lw r1,label->将存储在“label”中的地址处的内存中的字加载到寄存器r1中
我在谷歌上搜索了一下,找到了一些合理的解释和这些说明的例子
访问特定位需要使用一些位操作。特别是,我认为您会发现位移位和掩蔽非常有用。MIPS提供了一些您可能喜欢的说明: sll d,s1,s2 d=s1逻辑左移s2位 sra d,s1,s2 d=s1乘以s2的算术右移 srl d,s1,s2 d=s1逻辑右移s2位 和d,s1,s2 d=s1和s2;按位和 --从我上面引用的来源 我希望这足以回答你的问题,至少能让你继续这个问题。我不想把代码交给你,因为听起来像是家庭作业。如果有什么不清楚或需要澄清的地方,请说出来
希望这些至少能对你有所帮助 像翻转一样跳动?您可以在
和之间交替选择,在您感兴趣的位的位置使用0(…11011111-关闭)和或在您感兴趣的位置使用1(…00100000-打开)。非常感谢Dylan S!我真的很感谢你帮助我对mips编码有了深刻的了解和更好的理解!我很高兴能帮上忙。