Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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_Primes - Fatal编程技术网

Assembly MIPS汇编代码,用于查找输入数字下面的所有素数

Assembly MIPS汇编代码,用于查找输入数字下面的所有素数,assembly,mips,primes,Assembly,Mips,Primes,下面我已经发布了我的MIPS代码。我基于的java代码是 Java代码 for (int i=2;i<n;i++){ p = 0; for (int j=2;j<i;j++){ if (i % j == 0) p = 1; } if (p = 0) System.out.println(i); } 对于(int i=2;i有两个问题: 当你增加i时,你忘了把j设置回2。L3应该向上移动1行 MIPS中的ble小于或等于,因此您的代码实际上正在检查j有两个

下面我已经发布了我的MIPS代码。我基于的java代码是

Java代码

for (int i=2;i<n;i++){
  p = 0;
  for (int j=2;j<i;j++){
  if (i % j == 0)
    p = 1;
  }
  if (p = 0) System.out.println(i);
}

对于(int i=2;i有两个问题:

  • 当你增加i时,你忘了把j设置回2。L3应该向上移动1行


  • MIPS中的ble小于或等于,因此您的代码实际上正在检查j有两个问题:

  • 当你增加i时,你忘了把j设置回2。L3应该向上移动1行


  • MIPS中的ble小于或等于,因此您的代码实际上正在检查打印两个输入数字之间的所有素数的MIPS程序,请修改此选项以将下限设置为1

     .text
    
    .globl main
    
    main:
        # put mssge 1
        li $v0, 4
        la $a0, msg1
        syscall
        # take n1
        li $v0, 5
        syscall
        move $t1, $v0
        # put mssge 2
        li $v0, 4
        la $a0, msg2
        syscall
        # take n2
        li $v0, 5
        syscall
        move $t2, $v0
        # if n1 == n2
        bne $t1, $t2, continue1
        li $v0, 4
        la $a0, msg4
        syscall
        j exit
    
        continue1:
    
        blt $t1,$t2, continue2
        li $v0, 4
        la $a0, msg3
        syscall
    
        move $t4, $t1
        move $t1, $t2
        move $t2, $t4
    
        continue2:
    
        bgt $zero,$t1, negRange
        j continue3
    
        negRange:
            li $v0, 4
            la $a0, msg5
            syscall
    
            j exit
    
        continue3:
        addi $t1, $t1, 1
    
        # n and n+1 handle
        beq $t1, $t2, noRange
        j loop
        noRange:
            li $v0, 4
            la $a0, msg4
            syscall
            j exit
        # for loop for printing primes
        loop:       
            # put num in $a0
            #checkPrime called with jal 
            move $a0, $t1
            jal checkPrime
            #if $v0 is yes print else dont
            move $t8, $v0
            beq $t8, $zero, continue
    
            li $v0, 1
            move $a0, $t1
            syscall
            li $v0, 4
            la $a0, endline
            syscall
        continue:
            #update n1
            addi $t1, $t1, 1
            #loop till _i < n2
            beq $t1, $t2, end_loop
            j loop
        end_loop:
    exit:
        li $v0, 10  
        syscall 
    
    # function for checking a number prime
    # a0 gets number, v0 gets the return yes/no
    # without stack
    
    checkPrime:
        li $t0, 2
        # loop
        li $t6, 1
        beq $a0, $t6, not_prime 
        loopCheck:
            rem $t3, $a0, $t0
            beq $t3, $zero, not_prime
            addi $t0, $t0, 1
            beq $t0, $a0, end_loop_yes
            j loopCheck
        # put yes/no in $v0
        not_prime:
            li $v0, 0
            jr $ra
        end_loop_yes:
            li $v0, 1
            jr $ra
    
    
    .data
    
    msg1: .asciiz "Enter first number: "
    msg2: .asciiz "Enter second number: "
    msg3: .asciiz "Second number is less than First, exchanging and finding\n"
    msg4: .asciiz "no number in between the range!\n"
    msg5: .asciiz "negative range!\n"
    endline: .asciiz "\n"
    
    .text
    格洛博梅因酒店
    主要内容:
    #第1页付诸表决
    李$v0,4
    洛杉矶$a0,msg1
    系统调用
    #以n1为例
    李$v0,5
    系统调用
    移动$t1,$v0
    #第2页
    李$v0,4
    洛杉矶$a0,msg2
    系统调用
    #以n2为例
    李$v0,5
    系统调用
    移动$t2,$v0
    #如果n1==n2
    bne$t1、$t2、续1
    李$v0,4
    la$a0,msg4
    系统调用
    j出口
    续1:
    blt$t1、$t2,续2
    李$v0,4
    la$a0,msg3
    系统调用
    移动$t4,$t1
    移动$t1,$t2
    移动$t2,$t4
    续2:
    bgt$0,$t1,内格罗格
    j继续3
    内格罗格:
    李$v0,4
    洛杉矶$a0,msg5
    系统调用
    j出口
    继续3:
    附加$t1,$t1,1
    #n和n+1手柄
    beq$t1、$t2、noRange
    j环
    诺朗格:
    李$v0,4
    la$a0,msg4
    系统调用
    j出口
    #用于打印素数的for循环
    循环:
    #将num放入$a0
    #打电话给日本航空公司
    移动$a0,$t1
    日航支票优惠
    #如果$v0为“是”,则打印其他内容
    移动$t8,$v0
    beq$t8$零,继续
    李$v0,1
    移动$a0,$t1
    系统调用
    李$v0,4
    洛杉矶$a0,终点线
    系统调用
    继续:
    #更新n1
    附加$t1,$t1,1
    #循环至_i
    打印两个输入数字之间的所有素数的Mips程序,修改此设置以将下限设置为1

     .text
    
    .globl main
    
    main:
        # put mssge 1
        li $v0, 4
        la $a0, msg1
        syscall
        # take n1
        li $v0, 5
        syscall
        move $t1, $v0
        # put mssge 2
        li $v0, 4
        la $a0, msg2
        syscall
        # take n2
        li $v0, 5
        syscall
        move $t2, $v0
        # if n1 == n2
        bne $t1, $t2, continue1
        li $v0, 4
        la $a0, msg4
        syscall
        j exit
    
        continue1:
    
        blt $t1,$t2, continue2
        li $v0, 4
        la $a0, msg3
        syscall
    
        move $t4, $t1
        move $t1, $t2
        move $t2, $t4
    
        continue2:
    
        bgt $zero,$t1, negRange
        j continue3
    
        negRange:
            li $v0, 4
            la $a0, msg5
            syscall
    
            j exit
    
        continue3:
        addi $t1, $t1, 1
    
        # n and n+1 handle
        beq $t1, $t2, noRange
        j loop
        noRange:
            li $v0, 4
            la $a0, msg4
            syscall
            j exit
        # for loop for printing primes
        loop:       
            # put num in $a0
            #checkPrime called with jal 
            move $a0, $t1
            jal checkPrime
            #if $v0 is yes print else dont
            move $t8, $v0
            beq $t8, $zero, continue
    
            li $v0, 1
            move $a0, $t1
            syscall
            li $v0, 4
            la $a0, endline
            syscall
        continue:
            #update n1
            addi $t1, $t1, 1
            #loop till _i < n2
            beq $t1, $t2, end_loop
            j loop
        end_loop:
    exit:
        li $v0, 10  
        syscall 
    
    # function for checking a number prime
    # a0 gets number, v0 gets the return yes/no
    # without stack
    
    checkPrime:
        li $t0, 2
        # loop
        li $t6, 1
        beq $a0, $t6, not_prime 
        loopCheck:
            rem $t3, $a0, $t0
            beq $t3, $zero, not_prime
            addi $t0, $t0, 1
            beq $t0, $a0, end_loop_yes
            j loopCheck
        # put yes/no in $v0
        not_prime:
            li $v0, 0
            jr $ra
        end_loop_yes:
            li $v0, 1
            jr $ra
    
    
    .data
    
    msg1: .asciiz "Enter first number: "
    msg2: .asciiz "Enter second number: "
    msg3: .asciiz "Second number is less than First, exchanging and finding\n"
    msg4: .asciiz "no number in between the range!\n"
    msg5: .asciiz "negative range!\n"
    endline: .asciiz "\n"
    
    .text
    格洛博梅因酒店
    主要内容:
    #第1页付诸表决
    李$v0,4
    洛杉矶$a0,msg1
    系统调用
    #以n1为例
    李$v0,5
    系统调用
    移动$t1,$v0
    #第2页
    李$v0,4
    洛杉矶$a0,msg2
    系统调用
    #以n2为例
    李$v0,5
    系统调用
    移动$t2,$v0
    #如果n1==n2
    bne$t1、$t2、续1
    李$v0,4
    la$a0,msg4
    系统调用
    j出口
    续1:
    blt$t1、$t2,续2
    李$v0,4
    la$a0,msg3
    系统调用
    移动$t4,$t1
    移动$t1,$t2
    移动$t2,$t4
    续2:
    bgt$0,$t1,内格罗格
    j继续3
    内格罗格:
    李$v0,4
    洛杉矶$a0,msg5
    系统调用
    j出口
    继续3:
    附加$t1,$t1,1
    #n和n+1手柄
    beq$t1、$t2、noRange
    j环
    诺朗格:
    李$v0,4
    la$a0,msg4
    系统调用
    j出口
    #用于打印素数的for循环
    循环:
    #将num放入$a0
    #打电话给日本航空公司
    移动$a0,$t1
    日航支票优惠
    #如果$v0为“是”,则打印其他内容
    移动$t8,$v0
    beq$t8$零,继续
    李$v0,1
    移动$a0,$t1
    系统调用
    李$v0,4
    洛杉矶$a0,终点线
    系统调用
    继续:
    #更新n1
    附加$t1,$t1,1
    #循环至_i
    非常感谢。我将研究无条件分支。这是否意味着无论发生什么,它都会跳转?@Joshua Lee准确地说。实际上有两种方法可以做到这一点:无条件分支,即“b L4”和无条件跳转,即“J L4”.从编码的角度来看,它们是相同的,但有一些隐藏的东西使它们不同。你可以在这里找到更多关于差异的信息:非常感谢。我将研究无条件分支。这是否意味着它无论如何都会跳转?@Joshua Lee确切地说。实际上有两种方法可以做到这一点:无条件branch,即“b L4”和无条件跳转,即“J L4”。从编码的角度来看,它们是相同的,但有一些隐藏的东西使它们不同。你可以在这里找到更多关于差异的信息:
    b L4
    
     .text
    
    .globl main
    
    main:
        # put mssge 1
        li $v0, 4
        la $a0, msg1
        syscall
        # take n1
        li $v0, 5
        syscall
        move $t1, $v0
        # put mssge 2
        li $v0, 4
        la $a0, msg2
        syscall
        # take n2
        li $v0, 5
        syscall
        move $t2, $v0
        # if n1 == n2
        bne $t1, $t2, continue1
        li $v0, 4
        la $a0, msg4
        syscall
        j exit
    
        continue1:
    
        blt $t1,$t2, continue2
        li $v0, 4
        la $a0, msg3
        syscall
    
        move $t4, $t1
        move $t1, $t2
        move $t2, $t4
    
        continue2:
    
        bgt $zero,$t1, negRange
        j continue3
    
        negRange:
            li $v0, 4
            la $a0, msg5
            syscall
    
            j exit
    
        continue3:
        addi $t1, $t1, 1
    
        # n and n+1 handle
        beq $t1, $t2, noRange
        j loop
        noRange:
            li $v0, 4
            la $a0, msg4
            syscall
            j exit
        # for loop for printing primes
        loop:       
            # put num in $a0
            #checkPrime called with jal 
            move $a0, $t1
            jal checkPrime
            #if $v0 is yes print else dont
            move $t8, $v0
            beq $t8, $zero, continue
    
            li $v0, 1
            move $a0, $t1
            syscall
            li $v0, 4
            la $a0, endline
            syscall
        continue:
            #update n1
            addi $t1, $t1, 1
            #loop till _i < n2
            beq $t1, $t2, end_loop
            j loop
        end_loop:
    exit:
        li $v0, 10  
        syscall 
    
    # function for checking a number prime
    # a0 gets number, v0 gets the return yes/no
    # without stack
    
    checkPrime:
        li $t0, 2
        # loop
        li $t6, 1
        beq $a0, $t6, not_prime 
        loopCheck:
            rem $t3, $a0, $t0
            beq $t3, $zero, not_prime
            addi $t0, $t0, 1
            beq $t0, $a0, end_loop_yes
            j loopCheck
        # put yes/no in $v0
        not_prime:
            li $v0, 0
            jr $ra
        end_loop_yes:
            li $v0, 1
            jr $ra
    
    
    .data
    
    msg1: .asciiz "Enter first number: "
    msg2: .asciiz "Enter second number: "
    msg3: .asciiz "Second number is less than First, exchanging and finding\n"
    msg4: .asciiz "no number in between the range!\n"
    msg5: .asciiz "negative range!\n"
    endline: .asciiz "\n"