2017-11-16 24 views
-1

0을 입력하고 프로그램이 종료 될 때까지 MIPS 단위로 정수를 한 번에 하나씩 가져와 8 비트 이진수로 변환하는 프로그램을 작성하려고합니다. 내 코드는 짝수 입력의 경우 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 자의 정수)를 8 부 인쇄한다는 의미입니까? 디버거에서 코드를 단일 단계로 실행하고 레지스터 값을 변경하십시오. 루프의 각 명령어에 대해 입력 및 출력으로 사용중인 레지스터를주의 깊게 살펴보십시오. –

답변

0

낮은 비트의 8 개 사본 (한 자리 숫자)을 의미합니까?

디버거에서 코드를 단일 단계로 실행하고 레지스터 값을 변경하십시오. 루프의 각 명령어에 대해 입력 및 출력으로 사용중인 레지스터를주의 깊게 살펴보십시오.

을 쓰지 않으므로 andi $t1, $t0, 1은 반복 할 때마다 똑같은 것을 만들어냅니다. $t0srl $t1, $t1, 1으로 바뀌 었습니까? 당신은 실제로 당신이 겹쳐 쓰려고하는 임시적인 것을 옮기고 있습니다.