1

ユーザーから2つの整数を取得し、配列のメモリに保存して印刷するMIPSアセンブリプログラムを作成しようとしています。これは私がこれまでに持っているものです。私のプログラムは、入力していない大きな数字を出力します。私はこのゲームに非常に慣れていません。誰か助けてください!

これが私のコードです:

.text
.globl main

    main:
        li $v0, 4       
        la $a0, prompt  
        syscall

        li $t0, 0      #count for the loop to get two integers
    getnum:
        li $v0, 5   #read integer
        syscall
        sw $v0, num($s0)    #save the integer from user input into num and $s0 has address for num, I'm not sure if i did this right
        addi $s0, $s0, 4    # increment $s0 by 4 to save another integer
        addi $t0, $t0, 1    #increment the counter
        ble $t0, 1, getnum       #if counter $t0, is less then or equal to 1, it will go through the loop again

    printnum:   
        la $a0, num($s0)        #load address of num to print
        li $v0, 1           #print int
        syscall 
        addi $s0, $s0, 4    
        addi $t1, $t1, 1
        ble $t1, 1, printnum        #does it twice

        li $v0, 10  
        syscall
.data 

    num:
         .word 0, 0  # i want to store my two numbers here
    prompt: 
        .asciiz "Enter 2 positive integers: "
4

1 に答える 1

2

あなたの問題は2つあります。

まず、実際の整数ではなく整数のアドレスをロードしています。この変更を に修正するlaには、lw.

$s02 に、ループ内で 2 回インクリメントしgetnum、すぐにprintnumループ内でそれを使用するため、先が長すぎるmove $s0, $zeroため、この問題を解決するには追加する必要があります。

さらに、あなたのコードは、値 0 でプログラムを開始するという事実に依存しているように見えます$s0が、これはおそらく大きな仮定ではありません。明示的にゼロに設定する方がよいでしょう。

于 2013-11-08T18:49:23.757 に答える