Assembly 在MIPS中,我需要使用重复加法计算指数的程序,以及使用重复减法求解除法的程序
指数代码:Assembly 在MIPS中,我需要使用重复加法计算指数的程序,以及使用重复减法求解除法的程序,assembly,mips,mips32,mars-simulator,Assembly,Mips,Mips32,Mars Simulator,指数代码: .data a: .word 5 #base B: .word 6 # power .globl main main: lw $s0, a # $s0 = a lw $s1, B # $s0 = B li $s3, 1 # i = 1 li $s4, 1 # j = 1 move $t0, $s0 # answer = base move $s1, $t0 # increment = base F
.data
a: .word 5 #base
B: .word 6 # power
.globl main
main:
lw $s0, a # $s0 = a
lw $s1, B # $s0 = B
li $s3, 1 # i = 1
li $s4, 1 # j = 1
move $t0, $s0 # answer = base
move $s1, $t0 # increment = base
For1:
blt $s1, $s3, Exit #for(i=1; i < B; i++)
addi $s3, $s3, 1 #i++
li $s4, 1 # resets j to 1
move $t0, $t1
j For2
For2:
blt $s0, $s4, For1 #for(j=1; j <a; j++)
add $t0, $t0, $t1
addi $s4, $s4, 1
j For2
Exit:
li $v0, 1
move $a0, $t0
syscall
li $v0, 10
syscall
我对这两个执行相同功能的Java程序进行了建模,但我得到了一个“程序已完成运行(从底部掉下来)”错误,以及一条Mars消息,上面说“Go:执行被null指令终止”
我用指数程序打印答案,用除法程序打印商和余数
编辑:在终止代码中添加,当以步骤模式i运行时,会立即出现相同的错误
我是一个新手,所以任何帮助都是难以置信的
谢谢
EDIT2:这是我试图翻译的java代码
EDIT3:部门代码现在运行正常
指数的java代码:
public class exponentLoop {
public static final int BASE = 5;
public static final int POWER = 6;
public static void main(String[] args) {
int answer = BASE;
int increment = BASE;
for(int i = 1; i < POWER; i++)
{
for(int j = 1; j < BASE; j++)
{
answer += increment;
}
increment = answer;
}
System.out.println(answer);
}
}
在第一个程序中:
- 您没有做任何有趣的事情来为
提供值$t1
- 每次执行for-j循环时,都会将
重置为(未初始化)$t0
。因此,外部循环for-i没有任何预期效果,因为内部循环只是重新开始(for-i循环的迭代不会累积任何内容,因此结果就像只执行了一次for-j循环一样)$t1
- 您的循环测试比较关闭了1,因为您在小于条件下退出for循环,但是:您的退出条件应该与Java保持不变条件相反,即
,意思是错误消息清楚地说明了问题。您的代码没有结尾。您需要一个退出系统调用。我刚才使用
结果不太可能是相同的。您的问题与更新的代码有关。请确保您正在运行新版本。还可以使用模拟器单步执行代码,并验证代码是否到达退出调用。更新。它不会通过第一步。正如我单击“单步”时一样,单步执行功能会以相同的错误终止。您应该在您的数据之后,请切换回li$v0,10 sysca添加了一个退出系统调用ll
。java代码确实有效,谢谢您提供的这些指针。我将尝试更好地进行翻译。有时我们需要相同的逻辑运算,但操作数却是相反的。有时我们需要逻辑运算的相反或相反。(有时我们需要两者。)在前一种情况下,.text
与a
相同。但是,如果要对条件求反,则b>a
的“对立面求反”是code>=,意思是
希望您能看到!(a=b
移动与不移动的区别,这取决于我们是仅仅交换操作数还是逻辑上对条件求反。我理解这背后的逻辑是,但我仍然不清楚我需要在哪里实现什么。此外,我修复了将=
重置为初始值的位置zed$t0
。我相信你指的是$t1
我刚刚颠倒了这两个参数,我得到的输出比我应该得到的15625要高出很多,我将假设它是因为循环比较问题。我只是不确定如何更改除法代码现在起作用了正确地说,我现在只需要修复乘法循环就可以了!谢谢,我将移动$t0,$t1
更改为blt
,它就可以工作了ble
public class exponentLoop { public static final int BASE = 5; public static final int POWER = 6; public static void main(String[] args) { int answer = BASE; int increment = BASE; for(int i = 1; i < POWER; i++) { for(int j = 1; j < BASE; j++) { answer += increment; } increment = answer; } System.out.println(answer); } }
public class divLoopTest { public static final int F = 1562; public static final int G = 7; public static void main(String[] args) { int result = 0; int rest = F; while(rest >= G) { rest = rest - G; result ++; } System.out.println("result = "+result); System.out.println("remainder = "+rest); } }