2013-02-13 1 views
3

현재 MIPS 어셈블리 클래스에 포함되어있어 사용하는 책이 절판되어 있으므로 이해할 수 있도록 인터넷에 의존하고 있습니다. 이 프로그램은 3 개의 정수를 취합니다. 두 개는/sub/mult/div를 추가하고 세 번째는 연산자입니다. 여기에 코드가 있습니다.간단한 MIPS 추가

.text 
    .globl __start 
__start: 

    # Prompt for first int and accept first int 
    la $a0,firstint 
    li $v0,4 
    syscall 

    li $v0,5 
    move $s0, $v0 
    syscall 

    # Prompt for second int and accept second int 
    la $a0,firstint 
    li $v0,4 
    syscall 

    li $v0,5 
    move $s1, $v0 
    syscall 

    # Prompt for operation 
    la $a0,operation 
    li $v0,4 
    syscall 

    li $v0,5 
    move $s2, $v0 
    syscall 

    beq $s2,0,__add0 

    li $v0,10 
    syscall 

__add0: 
    la $a0,added 
    li $v0,4 
    syscall 

    add $a0, $s0, $s1 
    li $a0,1 
    syscall 


    .data 
firstint: .asciiz "Enter the first integer: " 
secondint: .asciiz "Enter the second integer: " 
operation: .asciiz "Enter operation (add=0, subtract=1, multiply=2, divide=3): " 
added:  .asciiz "The added number is: " 

나의 이해는 $의 S2의 값이 0 인 경우 BEQ가 ADD0으로 이동합니다 ..하지만이 일어나고있는 것 같다하지 않습니다. 작업 유형을 입력 한 후 출력이 중지됩니다. 출력 예시 :

Enter the first integer: 10 
Enter the first integer: 5 
Enter operation (add=0, subtract=1, multiply=2, divide=3): 0 

-- program is finished running -- 

아이디어가 있으십니까?

답변

3

당신이 이동하기 전에 콜을 할 필요가 :

li $v0,5 
syscall 
move $s2, $v0 
+1

야호를! 그것은 효과가있다! 고맙습니다. 나는 나머지 코드를 수정하여 작동한다. 정말 고맙습니다! –