2014-06-21 2 views
-2
.data 
prompt:.asciiz "\nEnter an integer: " 
add: .asciiz "\n The sum in decimal is: " 
bin: .asciiz "\n The sum in binary is: " 
sgt: .asciiz "\n The second integer is greater than the first. " 
fgt: .asciiz "\n The first integer is greater than the second." 
equal: .asciiz "\n The two entered values are equal: " 

.text 

main: 

li $v0, 4 #print string code 
la $a0, prompt #argument 
syscall #execute, service print stri 

li $v0, 5 # read integer 
syscall #v0 gets the returned value 
move $s0, $v0 #set v0 -> s0 

li $v0, 4 
la $a0, prompt 
syscall 

li $v0, 5 
syscall 
move $s1, $v0 #set v0 -> s1 
add $s2, $s1, $s0 #s2 -> s0 + s1 

li $v0, 4 #print string 
la $a0, add #argument 
syscall 

move $a0, $s2 
li $v0, 1 #print int 
syscall 

# Output "sum in binary is:". 
la $a0, bin 
li $v0, 4 
syscall 


# Output the binary number. (This is done by isolating one bit 
# at a time, adding it to the ASCII code for '0', and outputting 
# the character. It is important that the bits are output in 
# most-to-least significant bit order. 
move $t2, $a0 
li $s1, 32   # Set up a loop counter 
Loop: 
    rol $t2, $t2, 1 # Roll the bits left by one bit - wraps highest bit to lowest bit. 
    and $t0, $t2, 1 # Mask off low bit (logical AND with 000...0001) 
    add $t0, $t0, 48 # Combine it with ASCII code for '0', becomes 0 or 1 

    move $a0, $t0  # Output the ASCII character 
    li $v0, 11 
    syscall 

    subi $s1, $s1, 1 # Decrement loop counter 
    bne $s1, $zero, Loop # Keep looping if loop counter is not zero 

slt $t0, $s0, $s1 
beq $t0, $0, else 
li $v0, 4 
la $a0, sgt 
syscall 
j jump 
else: 
li $v0, 4 
la $a0, fgt 
syscall 

jump: 
li $v0, 10 #system call for exit 
syscall 

두 개의 입력 된 숫자가 동일하게 작동하는 데에도 문제가 있습니다. 세 가지 시나리오를 사용하고 세 개의 별도 레이블을 사용하여 시도했습니다. ..하지만 내가 세드릭 모르는 작동하지 않았다 여기mips 용 바이너리로 인쇄하려면 번호를 알아야합니다. 이 숫자는 계산 된 합계입니다. 내 코드가 작동하지 않습니다

+1

서식을 약간 정리할 수 있습니까? 코드 블록에 대해 4 개의 들여 쓰기를 지정하고, 코드 블록을 제외하고는 해시 마크를 사용하지 마십시오. –

+0

정의가 작동하지 않음 –

답변

2

아주 사소한 실수를

봐 루프 전에 줄에서 :..

move $t2, $a0 

당신은 명확를 시도하는 합계를으로 옮기십시오.3210이지만 $a0의 주소는 bin입니다. 제대로

move $t2, $s2 

그리고 모든 기능 :

는이 라인을 변경.