我是MIPS的新手,我很困惑如何编写mips可能会出现一个特定的问题,这个问题是我被要求在0xABCDABC0的内存位置写入mips代码到脉冲位6的总共2 * n + 74次,假设n是$ s1。
我不确定如何处理访问给定地址的特定位,我知道我必须使用或立即使用1来专门打开该位然后将其转回使用1.循环(没有乘法)我可以添加$ s2,$ s1,$ s1 然后addi $ s2,$ s2,74但你怎么循环呢?
答案 0 :(得分:2)
这里最简单的部分是编写循环,我可以帮助你。我很生气,但我会尽我所能让你开始。
循环可以通过临时值,添加立即值,分支指令和/或跳转指令来实现。
您正在寻找的基本流程听起来像:
示例循环代码:
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
中我用Google搜索了一点,http://pages.cs.wisc.edu/~cs354-2/cs354/karen.notes/MAL.instructions.html有一些合理的解释和这些说明的例子。
访问特定位需要使用一些位操作。特别是,我认为你会发现有点转移和屏蔽有用 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;按位AND
- 从上面引用的来源
我希望这足以回答你的问题,至少让你解决问题。我不想只是把代码递给你,因为它听起来像是家庭作业。如果有任何不清楚或需要澄清的话,请说出来。
希望至少有一部分可以帮助你!