Aprofundando em Assembly
Aprendendo mais um pouco
Agora temos conhecimento o bastante para entender como um código em Assembly funciona e porque é importante estudar diversos assuntos relacionados ao sistema operacional, formato do binário e a arquitetura em si para poder programar em Assembly.
Mas vimos tudo isso com cĂłdigo rodando sobre um sistema operacional em submodo 64-bit. A ideia desta parte do livro Ă© focar menos nas caracterĂ­sticas do sistema operacional e mais nas caracterĂ­sticas da prĂłpria arquitetura. Para isso vamos testar cĂłdigo de 64, 32 e 16 bit.

Ferramentas

Certifique-se de ter o Dosbox instalado no seu sistema ou qualquer outro emulador do MS-DOS que você saiba utilizar. Sistemas compatíveis com o MS-DOS, como o FreeDOS por exemplo, também podem ser utilizados.
Também é importante que o seu GCC possa compilar código para 64 e 32-bit. Em um Linux x86-64 ao instalar o GCC você já pode compilar código de 64-bit. Para compilar para 32-bit basta instalar o pacote gcc-multilib. No Debian você pode fazer:
$ sudo apt install gcc-multilib
No Windows basta instalar o Mingw-w64 como já mencionei.
Para testar se está funcionando adequadamente você pode passar para o GCC a opção -m32 para compilar para 32-bit. Tente compilar um "Hello World" em C e veja se funciona:
$ gcc hello.c -o hello -m32
Neste capítulo usaremos também uma ferramenta que vem junto com o NASM, o ndisasm. Ele é um disassembler, um software que converte código de máquina em código Assembly. Se você tem o NASM instalado também tem o ndisasm disponível.
O uso básico é só especificar se as instruções devem ser desmontadas como instruções de 16, 32 ou 64 bits. Por padrão ele desmonta as instruções como de 16-bit. Para mudar isso basta usar a opção -b e especificar os bits. Exemplo:
$ ndisasm -b32 binary
Export as PDF
Copy link