Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在MIPS中,我需要使用重复加法计算指数的程序,以及使用重复减法求解除法的程序_Assembly_Mips_Mips32_Mars Simulator - Fatal编程技术网

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
    重置为(未初始化)
    $t1
    。因此,外部循环for-i没有任何预期效果,因为内部循环只是重新开始(for-i循环的迭代不会累积任何内容,因此结果就像只执行了一次for-j循环一样)

  • 您的循环测试比较关闭了1,因为您在小于条件下退出for循环,但是:您的退出条件应该与Java保持不变条件相反,即
    错误消息清楚地说明了问题。您的代码没有结尾。您需要一个退出系统调用。我刚才使用
    li$v0,10 sysca添加了一个退出系统调用ll
    结果不太可能是相同的。您的问题与更新的代码有关。请确保您正在运行新版本。还可以使用模拟器单步执行代码,并验证代码是否到达退出调用。更新。它不会通过第一步。正如我单击“单步”时一样,单步执行功能会以相同的错误终止。您应该在您的数据之后,请切换回
    .text
    。java代码确实有效,谢谢您提供的这些指针。我将尝试更好地进行翻译。有时我们需要相同的逻辑运算,但操作数却是相反的。有时我们需要逻辑运算的相反或相反。(有时我们需要两者。)在前一种情况下,
    ,意思是
    a
    b>a
    相同。但是,如果要对条件求反,则
    的“对立面求反”是code>=
    ,意思是
    !(a=b
    希望您能看到
    =
    移动与不移动的区别,这取决于我们是仅仅交换操作数还是逻辑上对条件求反。我理解这背后的逻辑是,但我仍然不清楚我需要在哪里实现什么。此外,我修复了将
    $t0
    重置为初始值的位置zed
    $t1
    。我相信你指的是
    移动$t0,$t1
    我刚刚颠倒了这两个参数,我得到的输出比我应该得到的15625要高出很多,我将假设它是因为循环比较问题。我只是不确定如何更改除法代码现在起作用了正确地说,我现在只需要修复乘法循环就可以了!谢谢,我将
    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);
    
        }
    
    }