以mips打印直角三角形

时间:2018-04-14 23:32:19

标签: loops assembly mips32

这是我写的试图解决这个问题的代码。 我的代码是endl;没有得到循环,似乎只输入任意数字的两颗星。

li $t1,1 #start row at 1
li $t2,1 #start col at 1
li $t3,0 #temp=0

outer:
bgt $t1,$t0,done  #row < user input
addi $t1,$t1,1 #row++



inner:
bgt $t2,$t1,done  #col<row
addi $t2,$t2,1 #col++

#print star
la $a0,Star
li $v0,4
syscall

addi $t3,$t3,1 #adds 1 to temp after every print

beq $t2,$t3,outer #if col = temp counter  jump to outer

j inner #restart loop

#code to endl;
la $a0,endl
li $v0,4
syscall

j outer #restart loop

以下是预期输出的示例:

Please enter the edge length of the base of right triangle: 5 
* 
** 
*** 
**** 
***** 

2 个答案:

答案 0 :(得分:0)

。数据     提示:.asciiz“请输入直角三角形底边的长度:”     ExitMsg:.asciiz“退出程序。”     明星:.asciiz“*”     newLine:.byte'\ n' 。文本     ##您的主线程序将询问用户右三角形底边的长度。     输入:
    li $ v0,4     la $ a0,提示     系统调用

  app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['email'] }));


app.get('/auth/facebook/callback',
    passport.authenticate('facebook', { failureRedirect: '/auth/fail' }),
function(req, res) {
    var responseHTML = '<html><head><title>Main</title></head><body></body><script>res = %value%; window.opener.postMessage(res, "*");window.close();</script></html>'
    responseHTML = responseHTML.replace('%value%', JSON.stringify({
        user: req.user
    }));
    res.status(200).send(responseHTML);


});

答案 1 :(得分:0)

您不需要在单个循环中使用多个分支语句。您的代码只打印两颗星的原因是您没有将内部循环的计数器重置为 1。因此它循环两次,然后退出循环。

这是我的代码,它完全符合您的要求:

.data
    prompt: .asciiz "Please enter the edge length of the base of right 
                      triangle: "
    newLine: .asciiz "\n"
    star: .asciiz "*"

.text
    main:
        li $v0, 4       # print the prompt
        la $a0, prompt
        syscall

        li $v0,5            #take user input
            syscall
    
        move $s0, $v0     # move the input to $s0

        li $t0, 0       # load 0 at t0

    outerLoop:
        beq $t0, $s0, end   #(for i=0;i<=baseLength;i++)
                    #if t0=s0 branch to end
        
        addi $t0, $t0, 1    # increment i

        li $t1, 1       #load 1 at t1

        jal changeLine      #jump to changeLine

    innerLoop:
        bgt $t1, $t0, outerLoop  #(for j=0;j<=i;j++)
                     # if t1=t0 branch to outerLoop

        li $v0, 4       # print star
        la $a0, star
        syscall 
    
        addi $t1, $t1, 1    # increment j

        j innerLoop     # jump to innerLoop

    changeLine: 
        li $v0, 4       # new line
        la $a0, newLine
        syscall 

        jr $ra          # jump to after the call instruction

    end:
        li $v0, 10      # end of program
        syscall