Os registradores são pequenas e rápidas áreas de memória utilizada para diversos fins.
Alguns desses registradores são utilizados para designar os locais da memória em que o processador vai executar ou pegar informações.
CS - Code Segment, segmento de código em execução.
DS - Data Segment, segmento de dados.
SS - Stack Segment, segmento de pilha.
ES - Extra Segment, segmento extra para armazenamento de dados.
Registradores ponteiros
Esses registradores são utilizados para indicar posições da memória de instruções e dados.
BP - Base Pointer, usado como ponteiro para indicar a base da stack frame atual. É usado por linguagens de programação de alto nÃvel, como C, para controlar a área de memória na pilha usada por cada função.
IP - Instruction Pointer, aponta para a próxima instrução que será executada.
SP - Stack Pointer, aponta para o final da pilha.
SI - Source Index, usado em operações com blocos de dados para apontar para o bloco de memória fonte.
DI - Destination Index, usado em operações com blocos de dados para apontar para o bloco de memória de destino.
Registradores de dados
Usado de forma geral no programa, para várias operações. Embora possam ser utilizados em outras ocasiões, cada um desses registradores foram feitos para tarefas especÃficas.
O montador possui tabelas, onde armazena informações importantes sobre o programa que está sendo montado. Tabelas de rótulos, de constantes e de comandos são as mais comuns.[5]
Exemplo de código Assembly
Um exemplo de código Olá Mundo feito para arquitetura 8086 que pode ser executado em uma máquina real sem APIs na sintaxe do NASM:
[BITS16]; Faz o assembler gerar código 16-bits[ORG0x7C00]; A BIOS carrega nosso programa no endereço 0x7C00movsi,Hello; Carregar a string de Hello WorldcallPrint; Chamar nossa rotina para escrever a stringjmp$; Parar o programa em um loop infinito; Rotina para escrever stringsPrint:lodsb; Carregar um caractere da string em ALcmpal,0; Ver se estamos no final da string (caractere 0x00)je.END; Se sim, pular para o final da rotinamovah,0Eh; Configurar AH para chamar a rotina 0Eh da BIOSint10h; Executar a interrupção de vÃdeojmpPrint; Escrever o próximo caractere.END:; Final da rotinaret; Retornar; String HelloHello:db"Olamundo!",0x00;=========================================; Preencher o resto do arquivo com zerostimes510-($-$$)db0; Assinatura da BIOSdw0xAA55