Escreva um programa em assembly para somar 25 ao dia do seu aniversário e armazenar o resultado no endereço
.
Passo 1
Beleza, o exercício pede que a gente escreva um programinha em assembly que:
- Pega o “dia do seu aniversário” (um valor numérico),
- Soma 25 nesse valor,
- Guarda o resultado no endereço de memória
.
Conteúdo envolvido: linguagem assembly (MIPS, por exemplo), instruções de carregar da memória (lw), de soma com imediato (addi), de carregar constante grande (li ou lui+ori) e de armazenar na memória (sw). Vamos precisar também entender como funcionam registradores e endereços.
Passo 2
Primeiro, a gente precisa definir onde está o “dia do meu aniversário” e a área de texto (código). Em assembly MIPS isso vira algo assim:
.data
dia: .word 15 # supondo que meu aniversário cai no dia 15
.text
.globl main
main:
Aqui eu usei
.data
para declarar dados estáticos e .word 15
para armazenar o valor 15 (meu dia de aniversário). O rótulo dia
serve de “ponteiro” para esse endereço.Passo 3
Agora vamos carregar esse dia na CPU:
la $t0, dia # carrega em $t0 o endereço de 'dia'
lw $t1, 0($t0) # carrega o valor 15 de memória para $t1
–
–
la $t0, dia
coloca em $t0
o endereço onde está o dia.–
lw $t1, 0($t0)
faz um load word: lê a palavra (word) em 0($t0)
e coloca em $t1
.Passo 4
Em seguida, somamos 25 ao valor lido:
addi $t2, $t1, 25 # $t2 = $t1 + 25
–
addi
é “add immediate”, soma um valor constante (25) ao registrador $t1
e guarda em $t2
.Passo 5
Por fim, precisamos guardar . Como o valor é um endereço “grande”, usamos
$t2
em memória no endereço
li
(load immediate) pra colocar esse endereço num registrador, e então sw
: li $t3, 0x120 # $t3 = 0x120 (endereço destino)
sw $t2, 0($t3) # armazena o resultado em 0x120
–
–
li $t3, 0x120
carrega o imediato 0x120 em $t3
.–
sw $t2, 0($t3)
armazena a word de $t2
no endereço 0($t3)
.Passo 6
lw
t0)
Passo 7
addi $t2, $t1, 25
Passo 8
li $t3, 0x120
Passo 9
sw
t3)
Passo 10
jr $ra # finaliza o programa (retorna)
Pronto! Esse código carrega o dia (15), soma 25, e armazena 40 no endereço $\texttt{0x120}$.
Resposta
.data
dia: .word 15 # dia do aniversário
.text
.globl main
main:
la $t0, dia