Mam do policzenia wartości pobrane od użytkownika według podanego niżej wzoru:
A+2B-5. Kod wygląda tak:
.data
msg1: .asciiz "Podaj liczbe A: \n"
answer: .asciiz "Wprowadzona liczba to: \n"
msg2: .asciiz "Podaj liczbe B: "
answer2: .asciiz "Wprowadzona liczba to: \n"
result: .asciiz "Wynik"
.text
main:
li $v0, 4
la $a0, msg1
syscall
li $v0, 5
syscall
move $s0, $v0
li $v0, 4
la $a0, answer
syscall
li $v0, 1
move $a0, $s0
syscall
li $v0, 4
la $a0, msg2
syscall
li $v0, 5
syscall
move $s0, $v0
li $v0, 4
la $a0, answer2
syscall
li $v0, 1
move $a0, $s0
syscall
add $t0, $a0, $a0 #$t0, 2B
add $s0, $a0, $t0 #A + 2b
li $v0, 4
la $a0, result
syscall
li $v0, 1
move $a0, $s0
syscall
li $v0, 10
syscall
Dane wyjściowe, które generuje mi ten program są nieprawidłowe:
A tutaj rozwiązanie tego samego problemu tylko nieco inaczej napisane:
.data
labelA: .asciiz "Podaj luczbe A:"
labelB: .asciiz "Podaj luczbe B:"
labelC: .asciiz "Wynik: "
.text
main:
## Print first message ##
la $a0, labelA
li $v0, 4
syscall
#Read first number
li $v0, 5
syscall
move $s0,$v0
## Print second message ##
la $a0, labelB
li $v0, 4
syscall
#Read second number
li $v0, 5
syscall
move $s1,$v0
add $t1, $s1, $s1 #2B $t1
add $s2, $s0, $t1 # A + 2B $s2
## Print resust message ##
la $a0, labelC
li $v0, 4
syscall
# Print result #
move $a0, $s2
li $v0, 1
syscall
a tutaj dane wynikowe dla tych samych danych wejściowych:
i czemu są takie rozbieżności?