MIPS打印0到n范围内的2和3的倍数。

时间:2020-06-29 05:55:48

标签: mips

我刚刚开始MIPS,我正在尝试打印0到n之间2到3的倍数的所有数字。我编写了一个程序,可以打印从0到n的数字。 我知道我应该尝试使用“ and $ t0,$ v0,2”和“ and $ t0,$ v0,3”来检查它是否是倍数,但是我在MIPS代码中感到困惑,因为它非常令初学者感到困惑。帮助将不胜感激!

        main:                
                      
    la  $a0, prompt             
    li  $v0, 4
    syscall
    li  $v0, 5                  
    syscall
    li    $t0, 1      
    move $t2,$v0;
loop:                 
    bgt  $t0, $t2 end  
    move $a0, $t0     
    li   $v0, 1
    syscall
    li   $a0, '\n'      
    li   $v0, 11
    syscall
    add  $t0, $t0 1   
    b    loop        
end:
    jr   $ra
    .data
prompt:
    .asciiz "Enter a number: "

1 个答案:

答案 0 :(得分:0)

这是解决这个问题的一种方法

#for (int i =0;i<=n; i++)

#if (i%2 ==0) && (i%3==0)

#print i;

.data

prompt: .asciiz "enter value for n: "

newline: .asciiz "\n"

.text

.globl main

main:

li $t5 0   #initialising i = 0

#for printing prompt

li $v0 4

la $a0 prompt

syscall

#user input reading

li $v0 5

syscall

move $t1 $v0

#displaying on console

move $a0 $t0

li $v0 1

syscall

move $v0 $t0

loop:

beq $t5 $t1 end         #checking if i=n

#checking multiples of 2 
   
div $t2 $t5 2

mfhi $t2                #remainder

beq $t2 0 equal         #if remainder 0, jump to equal

addi $t5 $t5 1          #increment i by 1

j loop

equal:

#beq $t2 $t3 answer

#checking multiples of 3 

div $t3 $t5 3       

mfhi $t3        #remainder

beq $t3 0 equal2    #if remainder 0, jump to equal2

addi $t5 $t5 1          #if remainder != 0, incrementing i and jumping to loop

j loop

equal2:     
        
beq $t2 $t3 answer  #if both remainder equal to zero, jump to answer




answer:

move $a0 $t5            #moving the value of i for which i is a multiple of 2 and 3

li $v0 1        #printing the answer

syscall

#giving space of a line

li $v0,4

la $a0, newline

syscall

addi $t5 $t5 1      #incrementing i

j loop

#terminating

end:

li $v0, 10

syscall
相关问题