前提
C言語からMIPSに直しています。
入力はうまくいきますが
出力するときに予期しない数字が発生してしまいます。
自分でもサイズが記述ミスが見つかりません。
得意な方どうぞ知恵を貸していただきたいです。
実現したいこと
入力した10個の数字を逆から順に出力したときに、一番前にある入力していないのに発生した数字を取り除きたい。
発生している問題・エラーメッセージ
入力した10個の数字を逆から順に出力したとき
例:
Input
5 3 7 8 6 3 4 2 1 4
1668048215 4 1 2 4 3 6 8 7 3 5
一番前の1668048215という大きな数字が入力していないのに出力されます
該当のソースコード
MIPS
1.data 2 3 array: .space 40 4 prompt:.asciiz "Welcome:)\nPlease enter 10 integers:" 5 point:.asciiz "." 6 colon:.asciiz ":" 7 Nextline:.asciiz "\n" 8 Spacing:.asciiz "," 9 spaceChar:.asciiz " " 10.text 11main: 12 addi $t0,$t0,40 13 addi $t4,$t4,90 14 addi $t9,$t9,1 15 addi $s5,$s5,10 16 move $t1,$zero 17 li $v0,4 18 la $a0,prompt 19 syscall 20 21 li $v0,4 22 la $a0,Nextline 23 syscall 24 25input: 26 27 beq $t1,$t0,whileOutput 28 29 move $a0,$t9 30 li $v0,1 31 syscall 32 33 li $v0,4 34 la $a0,colon 35 syscall 36 37 li $v0,5 38 syscall 39 move $t2,$v0 40 41 sw $t2,array($t1) 42 addi $t1,$t1,4 43 addi $t9,$t9,1 44 45 j input 46 47 48 #print in reversed order 49 50whileOutput: 51 beq $t1, 0 exitOutput 52 lw $t6, array($t1) 53 #print Integer 54 li $v0, 1 55 move $a0, $t6 56 syscall 57 #print space 58 li $v0, 4 59 la $a0, spaceChar 60 syscall 61 addi $t1, $t1, -4 62 j whileOutput 63
C
1#include <stdio.h> 2 3int main() 4{ 5 int array[10]; 6 7 for(int i=0;i<10;++i){ 8 scanf("%d",&array[i]); 9 } 10 11 for(int j=9;j>=0;--j){ 12 printf("%d ",array[j]); 13 } 14 printf("\n"); 15 16 17 return 0; 18}
試したこと
サイズの記述ミスかと思い、配列のサイズをarray: .space 40からarray: .space 36に変更すると9個の数字が入力でき一番前に0が出てきます。
必ずどこかしら入力していないのに出力してしまう数字があります。
補足情報(FW/ツールのバージョンなど)
MarsでMIPSのコードをRunしました。
回答2件
あなたの回答
tips
プレビュー