ciao a tutti, sono alle prime armi con il linguaggio assembly del mips.
oggi ho provato a scrivere un semplicissimo programma che addiziona tre numeri dati da tastiera, avvalendomi dello stack.
il programma compila, ma la somma dei tre numeri esce tipo "88475838384473847384", insomma, un numero lunghissimo e non esatto.
vi posto il codice, potete dirmi cosa ho sbagliato?
.data
input: .asciiz "Inserisci un numero: "
input2: .asciiz "Inserisci secondo numero: "
input3: .asciiz "Inserisci terzo numero: "
output: .asciiz "La loro somma è: "
.text
.globl main
main:
li $v0, 4 #leggo prima stringa
la $a0, input
syscall
li $v0, 5 #acquisisco primo numero
syscall
add $t0, $zero, $a0
li $v0, 4
la $a0, input2
syscall
li $v0, 5
syscall
add $t1, $zero, $a0
li $v0, 4
la $a0, input3
syscall
li $v0, 5
syscall
add $t2, $zero, $a0
sub $sp, $sp, 16
sw $t0, 12($sp)
sw $t1, 8($sp)
sw $t2, 4($sp)
sw $t3, 0($sp)
add $t3, $t0, $t1
add $t3, $t3, $t2
move $a0, $t3
lw $t3, 0 ($sp)
lw $t2, 4 ($sp)
lw $t1, 8 ($sp)
lw $t0, 12 ($sp)
add $sp, $sp, 16
li $v0,4
la $a0, output
syscall
li $v0,1
syscall
li $v0, 10
syscall
oggi ho provato a scrivere un semplicissimo programma che addiziona tre numeri dati da tastiera, avvalendomi dello stack.
il programma compila, ma la somma dei tre numeri esce tipo "88475838384473847384", insomma, un numero lunghissimo e non esatto.
vi posto il codice, potete dirmi cosa ho sbagliato?
.data
input: .asciiz "Inserisci un numero: "
input2: .asciiz "Inserisci secondo numero: "
input3: .asciiz "Inserisci terzo numero: "
output: .asciiz "La loro somma è: "
.text
.globl main
main:
li $v0, 4 #leggo prima stringa
la $a0, input
syscall
li $v0, 5 #acquisisco primo numero
syscall
add $t0, $zero, $a0
li $v0, 4
la $a0, input2
syscall
li $v0, 5
syscall
add $t1, $zero, $a0
li $v0, 4
la $a0, input3
syscall
li $v0, 5
syscall
add $t2, $zero, $a0
sub $sp, $sp, 16
sw $t0, 12($sp)
sw $t1, 8($sp)
sw $t2, 4($sp)
sw $t3, 0($sp)
add $t3, $t0, $t1
add $t3, $t3, $t2
move $a0, $t3
lw $t3, 0 ($sp)
lw $t2, 4 ($sp)
lw $t1, 8 ($sp)
lw $t0, 12 ($sp)
add $sp, $sp, 16
li $v0,4
la $a0, output
syscall
li $v0,1
syscall
li $v0, 10
syscall