Escreva um programa em assembly para somar 25 ao dia do seu aniversário e armazenar o resultado no endereço 0 x 120.

Passo 1

Beleza, o exercício pede que a gente escreva um programinha em assembly que:
  1. Pega o “dia do seu aniversário” (um valor numérico),
  2. Soma 25 nesse valor,
  3. Guarda o resultado no endereço de memória tt0x120.
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 $t2 em memória no endereço t2` em memória no endereço . Como o valor é um endereço “grande”, usamos 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 t1, 0(t0)

Passo 7

addi $t2, $t1, 25

Passo 8

li $t3, 0x120

Passo 9

sw t2, 0(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

Exercícios relacionados