Registradores Assembly | Linguagem Assembly
Habilidades Profissional Linguagem Assembly
"Hello World" Assembly para Windows
Programar diretamente na memória
15 de agosto de 2015 - Fundamentos
Vamos começar explicando registradores 16 Bits (ex. AX, BX, etc ) mesmo porque os registradores de 32 e 64 bits somente aumentam o tamanho (óbvio !), então sabendo disto, basta "bater o olho" para saber como usar 32 ou 64 bits.
PC ? Sim, vamos começar baseando os exemplo no PC/WINDOWS/DOS , futuramente partiremos para o mundo LINUX, não muda tanto, e esta é a vantagem de saber baixo nível, o que vai mudar entre DOS/WINDOWS e LINUX são as chamados do sistema para realizar alguma tarefa, as operações de movimento de valores, stack, segmentação de memória, manipulação de registradores são inerentes ao microprocessador Intel,e portanto são iguais para qualquer sistema operacional.
Juntamente com cada postagem, vou procurar Links que possam adicionar conhecimento ao assunto, aliás, percebi que muita coisa está em inglês, então vou aproveitar para ajudar o Wikipedia traduzindo páginas sobre Baixo Nível (Assembly) para Português para que exista também uma versão em língua portuguesa.
Para não complicar, e começar pelo fim, é bom ter o WindowsXP instalado para começarmos a praticar … depois passamos para tópicos avançados utilizando Windows7/Windows8 , o WindowsXP é util , porque podemos utilizar o DEBUG.EXE que ainda está contido nele, assim como manipulação de áreas que não estarão sob supervisão do sistema, coisa que começou a ficar bem rígida a partir do Windows vista, os Windows posteriores já não possuem o DEBUG.EXE, ele será útil para praticarmos exemplos simples, este é mais um motivo para ter o Windows XP rodando.
Logo no decorrer do curso, vamos utilizando um Debugger mais avançado como o WinDBG, e até como fazer alguns programas para anexar ao Kernel do Windows. Outra coisa, sim ! sou fã do Linux, e muito mais que o Windows, mas como a maioria dos usuários utilizam Windows, então o windows será mais utilizado.
Como funcionam os Registradores Assembly
O registradores armazenam valores, assim como as variáveis que utilizamos em nossa linguagem de programação como ( int valor = 5) em assembly ficaria ( MOV AX, 5 ). No entanto, não podemos sair criando variáveis como em linguagem de alto nível como C++, existe um limite de registradores para colocar valores, assim como outros especiais que indicam offset e segmentos de memoria como (CS, DS por exemplo), eles indicam que segmento de memoria o programa esta rodando, e ainda o IP que indica que posição de memória está em execução no momento.
Em 32 bits, utilizaremos EAX no lugar de AX, mas aprendendo como utilziar os registradores de 16 bis (AX,BX,CS,etc), fica fácil entender quando eles se transformam em 32 bits (EAX, EBX,ECX), e até quando se transforma 64 bits.
AX.CX, DX, BX, SP, BP, SI, DI
Embora possamo atribuir a eles qualquer valor, alguns dele tem utilidade para o sistema, por exemplo, o SP (stack pointer) é utilizado guardar o valor no Stack, o que é Stack ? é uma área da memória onde são gravado valores via PUSH, POP, CALL por exemplo, (veremos isto mais tarde)
Ainda existem mais registradores de segmento:
CS, DS, ES, FS, GS, SS
Assim como os registradores descritos anteriormente, alguns deles são utilizados pelo ssitema como por exemplo o principal deles ( CS Code Segment), ele vai ter o valor exatamente do segmento da memória que o programa atual está rodando (também veremos isto no decorrer do curso).
Existe também registradores extras chamados MMX que foi adicionado em meados de 1997, e seu poder é fabuloso ! ele permite manipulação de memoria gráfica de uma forma tão rápida que pode ser cofundida com uma gravação analógica, comentaremos sobre seu poder durante o curso também.
Até agora foi só teoria … sim, isto pode parecer um pouco chato, mas é essencial para que possamos compreender como "a banda toca" neste bundo maluco do microprocessador, que é na verdade, o coração do processamento de qualquer computador.
Não sera explicado todos fundamentos num capítulo e depois a parte prática, prefiro ir colocando experiência prática e ir explicando , afinal, é assim que aprendemos a andar e a falar esta língua complicada que é o português: Na prática !
Vamos começar com um exemplo simples, exibir uma frase no vídeo, para isto não iremos compilar nada ! vamos inserir diretamente na memória e ver "in natura" como a coisa acontece.
Para isto precisaremos do programa DEBUG.EXE que viveu até o WindowsXP, então, você deve ter o WindowsXP rodando provavelmente em uma máquina virtual como VirtualBOX ou VMWare, ou pode ainda copiar o DEBUG.EXE para o Windows7 (ou superior) e utiliza-lo para praticarmos.