在MIPS中,我需要使用重复加法来计算指数的程序,以及可以使用重复减法来解决除法的程序

如何解决在MIPS中,我需要使用重复加法来计算指数的程序,以及可以使用重复减法来解决除法的程序

指数代码

 .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)程序并进行翻译(尽可能从字面上看)的方法是个好方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?