2016-03-28 5 views
1

ユーザが文字「*」を入力するまで、整数を合計するMIPSコードを作成しようとしています。文字を含む整数ループの追加を終了します。

出力が "1 4 3 *合計:8" 好きになるでしょう、ユーザが入力したときに "-1" の代わりに "*" の

を私はコードの終了ループ条件を書きました。私は-1の代わりに '*'構文を書こうとしましたが、それは和を与えません。ユーザーが "*"文字を入力すると、ループから抜けることはできますか?これは私の最初の質問でした。ここには "-1"の作業コードがあります。

# $s0=Sum, $s1=Checkvalue 

     .data     # Data memory area 
prompt: .asciiz "Total: " 
     .text     # Code area 

main: 
     move $s0, $zero  # Sum is made "0" 
     li  $s1, -1   # Checkvalue is made "-1" 

loop: bne $s0, $s0, exit # Infinite loop is described 
     li  $v0, 5   # Read integer into $v0 
     syscall     # Make the syscall read_int 

     move $t0, $v0   # Move the integer read into $t0 

     beq $t0, $s1, exit # If the read value is equal "-1", exit 
     add $s0, $t0, $s0  # Add the read integer to sum 
     j  loop    # Return loop 

exit: 
     li  $v0, 4   # Syscall to print string 
     la  $a0, prompt 
     syscall 

     move $a0, $s0   # Syscall to print string 
     li  $v0, 1 
     syscall 

     li  $v0, 10   # Syscall to exit 
     syscall 

# Reference: www.es.ele.tue.nl/~heco/courses/ProcDesign/SPIM.ppt 

私の2番目の質問は、私は私の使用量が標準入出力、システム機能に適しており、「システムコール」使用ということですか?

ありがとうございました。

答えて

2

-1のような整数を読んでいて、それは明らかです。*は整数ではありません。ループを終了するには、文字と整数の読み方を理解する必要があります。数字の長さが1桁の場合は、すべての入力を文字として読み込み、必要に応じて整数に変換することができます。それ以外の場合は、文字列を読み込んで整数に変換する必要があります。

2番目の質問は、標準の入出力システム関数にsyscallを使用することに間違いありません。

+0

ありがとうございます。私はこれに関する新しい質問を投稿しました[ここ](http://stackoverflow.com/questions/36296223/comparing-two-strings-in-mips) – bieaisar

関連する問題