Acesso a memória é o tipo de coisa que acontece o tempo todo, o asssembly faz acessos a memória o tempo todo, na verdade toda linguagem faz, mas isto acontece automaticamente.
Neste programa vamos fazer a leitura de um endereço de memória, digo … um endereço informado numericamente.
Quando fazemos isto em um código Assembly:
frase DB “Ola mundo assembly intel”
O label “frase” na verdade é um endereço de memória, quando passamos este código pelo compilador e o programa .ASM se transforam em .EXE, o nome “frase” vai sumir! e tudo que temos é um endereço de memória numérico do tipo FEA4h , na verdade, na hora de programar, é mais cômido usar label do tipo “frase como no exemplo.
Então vamos ler diretamente da memória, do endereço 0033h.
Neste exemplo, usaremos registradores de 16 bits, para usar o emulador emu8086, se você ainda não baixou, baixe-o.
MOV SI, 0033h
MOV AX, [SI]
O código acima faz a leitura do endereço 0033h da memória, na primeira linha ele informa o endereço a ser lido que é 0033h, na segunda alinha, move o valor para o registrador AX usando o comando MOV do assembly.
Vamos fazer um código um pouco mais ousado, nover o valor de:
AX -> MEMÓRIA -> BX
Mover um valor do registrador AX para BX, se fazer o velho MOV BX,AX, na verdade isto seria muito fácil, vamos complicar enviando o valor para memóira e recuperando com outro registrador.
MOV AX, 123
MOV SI, 0033h
MOV [ SI ], AX
MOV BX, [ SI ]
O valor 123 vai passar para memória no endereço 0033h, e depois enviado para o registrador BX.
Movendo valor através dos STACK
O recurso de stack (PUSH, POP), é uma das formas mais simples de se fazer isto, neste caso não é preciso encontrar um endereço disponível, basta enviar para área do stack com PUSH e recuperar com POP.
MOV AX, 123
PUSH AX
POP BX
Perceba que não é necessario procurar um endereço para enviar o valor 123, a própria CPU encontra um endereço disponível no segmento Stack e envia para lá, este envio é feito com o PUSH AX, o valor de AX é enviado so Stack, já o POP BX recupera o valor recém enviado, facil.
Perceba que usamos o recurso do Stack (com PUSH para empurrar e POP para recuperar, não precisamos nos recuperar com endereço de memória onde gravar)