Temos os registradores de uso geral e os registradores especiais, cada qual com suas funções e características bem definidas. Devemos lembrar também, que dependendo da geração e tecnologia empregada na fabricação daquele processador, isso influenciará diretamente na capacidade de armazenamento de dados pelo registrador bem como em seu nome.
Por exemplo, o registrador BP, na arquitetura de 16 bits, possui a mesma função que o EBP, de 32 bits, e o RBP, de 64 bits. Entretanto, sua capacidade de armazenamento muda de arquitetura para arquitetura.
Mas antes de falarmos de registradores, precisamos entender como funciona a CPU. A unidade central de processamento de um computador possui os seguintes elementos que permitem que o mesmo pegue dados da memória e processe-os:
- Contador;
- Decodificador de Instrução;
- Barramento de dados;
- Registradores de uso geral;
- Unidade lógica e aritmética.
O contador é utilizado para dizer ao computador onde está localizada a próxima instrução a ser executada. Ao localizar tal instrução, através do endereço de memória armazenado no contador, tal função é transferida ao decodificador, que buscará entender o que a mesma significa. Isto inclui qual o tipo de processo será necessário (adição, subtração e etc) e em qual local da memória os dados necessários se encontram.
Após essas operações básicas, o barramento de dados (Data Bus) é utilizado para fazer a conexão entre a CPU e a memória. Além da memória externa ao processador, esse último tem alguns locais na memória chamado de registradores, como citado anteriormente.
Os registradores de uso geral são onde as principais ações ocorrem. Operações como adição, subtração, multiplicação, comparações lógicas e outras, utilizam os registradores de uso geral para o processamento dos dados.
Já os registradores especiais, que são a segunda categoria de registradores existentes, possuem propósitos bem específicos, que serão abordados mais a frente.
Após a CPU recuperar todos os dados necessários, ela os transfere, bem como as instruções decodificadas, para a unidade lógica e aritmética para o posterior processamento. É aqui que a instrução é executada.
Obviamente que essa é uma explicação bem simplória, mas já serve para compreendermos o funcionamento básico de uma CPU.
Para conhecermos os registradores, vamos separá-los pelas duas categorias citadas: uso geral e especiais. Alguns dos registradores de uso geral, onde podemos armazenar valores para serem utilizados em operações, são os seguinte:
- EAX = Extended Acumullator (registrador acumulador extendido)
- EBX = Extended Base (registrador de base extendido)
- ECX = Extended Couter (registrador contador extendido)
- EDX = Extended Data (registrador de dados extendido)
- ESI = Extended Source Index (registrador de índice de origem extendido)
- EDI = Extended Destination Index (registrador de índice de destino extendido)
Como havia comentado antes, os registradores de 16 bits possuíam nomes um pouco diferentes dos de 32 bits, por conta de sua capacidade de armazenamento. Por exemplo, o registrador EDX possui esse nome porque faz parte de uma CPU de arquitetura de 32bits de dados, quanto que se fossem apenas 16bits seu nome seria DX.
Um gráfico tosco para entender isso seria mais ou menos assim:
---------------------------------------------------------------------------------
| EDX |
---------------------------------------------------------------------------------
| | DX |
---------------------------------------------------------------------------------
| | DH | DL |
---------------------------------------------------------------------------------
- EDX armazenaria, por exemplo, um valor fictício de 0x00000000.
- DX, que é a parte alta de EDX, armazenaria 0x0000.
- DH, é a parte alta de DX, enquanto DL é a parte baixa de DX (ambos são de arquitetura 8bits), e armazenam apenas 0x00 cada um.
Em adição aos registradores de uso geral, temos os registradores especiais, que são:
- EBP = Extended Base Pointer (Ponteiro de Base)
- ESP = Extended Stack Pointer (Ponteiro de Stack/Pilha)
- EIP = Extended Instruction Pointer (Ponteiro de Instrução)
- EFLAGS =
Uma coisa que precisamos ter sempre em mente, é que tanto como o EIP quanto o EFLAGS, só poderão ser acessados através de instruções especiais e bem específicas, diferente dos demais registradores.
O EBP sempre aponta para a base da pilha, e também é utilizado para acessar essa mesma pilha, apesar de também poder ser utilizado como um registrador comum (de uso geral). Já o ESP, aponta para a posição atual da stack (pilha) e é o 'offset' do SS (Stack Segment).
Agora, por que precisamos conhecer os registradores para aprender Assembly? Simplesmente porque todas as instruções desta linguagem, lida diretamente com tais registradores, assim como todos os programas.
A diferença, é que nas demais linguagens, não precisamos conhecer dessa estrutura de baixo nível. No entanto, todas elas após serem compiladas, ou interpretadas pela CPU, suas instruções vão trabalhar diretamente com essa estrutura de funcionamento.