2017-11-16 14 views
-1

整数を1つずつ取り込み、0になりプログラムが終了するまで8ビットバイナリに変換するプログラムをMIPSで作成しようとしています。私のコードは、偶数の場合は0、奇数の場合は1を出力しています。なぜこのことが分かりませんか?MIPS小数点から8ビットのバイナリプログラムをデバッグ

.data 
zeroString: .asciiz "00000000\n" 

.text 

main: 
li $v0, 5  # 5 = syscall code to read int 
syscall 
beq $v0, 0, exit #exit when 0 is entered 
move $t0, $v0 #t0=v0 
la $t2, 0  #counter 

do:   #loop 
ANDI $t1, $t0, 0x01 #check if least significant digit is 1 
addi $t2, $t2, 1 #increase counter 
move $a0, $t1  #printing value of t1 
li $v0, 1 
syscall 
srl $t1, $t1, 1  #shift to next digit 
bne $t2, 7, do  #check if counter equal to target 

# Print a new line 
li $a0, '\n' # $a0 = ascii code for newline char 
li $v0, 11  # 11 = syscall code to print char 
syscall   # Print newline 

j main 

exit: 
la $a0, zeroString 
li $v0, 4 
syscall 
li $v0, 10 
syscall 
+0

これは、下位ビットの8つのコピー(1桁の整数)を意味していますか?デバッガでコードをシングルステップ実行し、レジスタ値を変更します。ループ内の各命令の入力と出力として使用しているレジスタを注意深く見てください。 –

答えて

0

つまり、下位ビット(8桁の整数)が8個印刷されていますか?

デバッガでコードをシングルステップ実行し、レジスタ値を変更します。ループ内の各命令の入力と出力として使用しているレジスタを注意深く見てください。

$t0を書き込むことはないので、andi $t1, $t0, 1は繰り返しごとに同じものを生成します。 srl $t1, $t1, 1$t0にシフトされましたか?あなたは実際に上書きしようとしている一時的なものをシフトしています。