问题描述
指数代码:
.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,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,1
j For2
Exit:
li $v0,1
move $a0,$t0
syscall
li $v0,10
syscall
划分代码:
.data
a: .word 1562
B: .word 7
space: .asciiz "\n"
.globl main
main:
lw $s0,a
lw $s1,B
add $t1,$zero,$s0 #make copy of first integer value in $s0
add $t2,$s1 #make copy of second integer value in $s1
add $t0,$zero #make $t0 the counter
div_loop:
sle $t3,$t2,$t1 #checks if equal
beq $t3,end_divis
sub $t1,$t1,$t2
addi $t0,1
j div_loop
end_divis:
move $s5,$t0
move $s6,$t1
li $v0,$s5
syscall
addi $v0,4
la $a0,space
syscall
li $v0,$s6
syscall
li $v0,10
syscall
我对这两个Java程序都进行了建模,这些Java程序编写了执行相同功能的程序,但是却收到“程序已完成运行(从底部移出)错误”以及Mars消息“ Go:执行终止”通过空指令”
在指数程序中打印答案,在除法程序中打印商和余数。
编辑:在终止代码中添加了,当以“步进”模式运行时,我立即出错并出现相同的错误。
我对大会还很陌生,所以任何帮助都是不可思议的。
谢谢
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);
}
}
用于划分的Java代码
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);
}
}
解决方法
在第一个程序中:
- 您没有做任何有趣的事情来为
$t1
提供价值。 - 每次执行for-j循环时,都将
$t0
重置为(未初始化的)$t1
。因此,外循环for-i并没有达到预期的效果,因为内循环只是重新开始(for-i循环的迭代没有积累任何东西,因此结果就好像您只完成了for -j循环一次) - 当您以小于条件退出for循环时,您的循环测试比较会减少1,但是:您的退出条件应该与Java保持条件相反,即
<
—和<
的对立面是>=
,但是由于您将操作数从Java代码反转为blt
,因此需要<=
。
因此,假设您的Java代码有效,则需要查看Java中的变量以及汇编中的映射。并尝试将Java尽可能地转换为汇编语言-在转换过程中不要捷径,优化或其他方式。
否则,您就很接近了,创建一个有效的Java(最好是C)程序并进行翻译(尽可能从字面上看)的方法是个好方法。