Rodolfo Azevedo
MC404 - Organização Básica de Computadores e Linguagem de Montagem
http://www.ic.unicamp.br/~rodolfo/mc404
Função é uma abstração para um conjunto de instruções que possui:
CALL
RET
Ambas são pseudo-instruções relacionadas com instruções de salto.
JAL ra, destino
ra
JALR zero, ra, 0
# Função que recebe um valor em a0 e retorna o dobro em a0 # O nome da função é "dobro" dobro: add a0, a0, a0 ret main: li a0, 10 call dobro # a0 = 20 li a0, 5 call dobro # a0 = 10 li a0, 1 call dobro # a0 = 2 ret # e agora? para onde volta?
Imagine que cada uma das funções abaixo foi implementada por um programador diferente. Que registradores cada um poderá alterar (t, s e a)?
t
s
a
sp
lw
sw
addi sp, sp, -8 sw ra, sp, 0 sw s0, sp, 4
lw s0, sp, 4 lw ra, sp, 0 addi sp, sp, 8
Note a ordem invertida das instruções!
Suponha a existência das funções scanf e printf da linguagem C para ler e escrever dados. Implemente um código que leia um número inteiro N, limitado a 20, em seguida ele deve ler N números inteiros sinalizados, guardando cada um num vetor e imprimir a soma desses números. Para a realizar a soma deles, você deve implementar uma função à parte que recebe um vetor e o seu tamanho, retornando a soma que, posteriormente, será impressa. Seu código deve começar na função main.
scanf
printf
main