Escreva um código para armazenar os valores 0 x 30 e 0 x 97 nas posições de memória 0 x 105 e 0 x 106, respectivamente.
Passo 1
Beleza! O enunciado pede pra gente escrever um código em assembly que guarde os valores
e
nas posições de memória
e
, respectivamente. Aqui o conteúdo é manipulação de memória em assembly (uso de endereçamento direto e da instrução MOV). Pra resolver, vamos precisar saber como:
- Identificar um endereço de memória em assembly;
- Usar a instrução MOV para escrever um byte na memória.
Passo 2
Primeiro, um pouquinho de teoria sobre memória e registradores:
- A “memória” é um monte de caixinhas numeradas (cada uma guarda um byte).
- Um “registrador” é uma caixinha interna do processador, onde ele faz contas rápidas.
- Em assembly, pra acessar uma posição de memória a partir de um endereço fixo, a gente coloca o endereço entre colchetes, tipo
[0x105]
. Isso indica “o conteúdo que está no endereço 0x105”.
Passo 3
Agora, a instrução MOV em x86 (8 bits) funciona assim:
MOV destino, origem
MOV destino, origem
- Se destino for
[endereço]
, a gente tá escrevendo na memória. - A origem pode ser um valor imediato (por exemplo,
0x30
) ou um registrador.
Então, para gravar direto um número em memória, usamos algo como
MOV BYTE PTR [endereço], valor_imediato
O
BYTE PTR
só deixa claro que a gente quer mover um byte (8 bits).Passo 4
Vamos escrever o código passo a passo:
- Guardar o valor
no endereço : MOV BYTE PTR [0x105], 0x30
- Guardar o valor
no endereço : MOV BYTE PTR [0x106], 0x97
Resposta
; assemble para x86, modo real ou protegido
MOV BYTE PTR [0x105], 0x30 ; coloca 0x30 na posição de memória 0x105
MOV BYTE PTR [0x106], 0x97 ; coloca 0x97 na posição de memória 0x106