Quando falamos em registradores, pensamos em simples “ordens”, ao menos é assim que são interpretadas pelo nosso processador, não é mesmo?Pois bem são um montão de bytes, mas quem faz isso por nós?Onde isso acontece?E porquê? Primeiramente devemos saber o que é e como funciona um processador, a partir daí já podemos avançar um pouco. Os registradores funcionam como a memória RAM que armazena n bits, estando no topo da hierarquia de memória , em que cada um deles acessa funções específicas, como demonstrei no artigo anterior, no Assembly vocês usam bastante os “registradores”, felizmente esta linguagem só se torna legível graças ao uso dos mnemônicos, que funcionam como símbolos. É o seguinte, dentro do processador temos a ALU(Arithmetic Logical Unit) ou em português Unidade Lógica Aritmética(peça fundamental da CPU), que executa a maioria das ações, sendo justamente esta, que recebe dados dos registradores, sendo processados e os resultados são enviados para os registradores de saída, registradores são circuitos digitais capazes de armazenar e deslocar informações binárias, sendo usados como dispositivos de armazenamento temporários.

Ei-lo os tipos de registradores:

REGISTRADORES GERAIS→recebem esse nome porquê são utilizados para quase tudo»manipulação de dados, cálculos, contagem, armazenamento, ponteiros, etc.

Estes abaixo são registradores de 32 bits, e podem ser divididos em 16,8 bits.

EAX→ACUMULADOR→Funciona como acumulador, faz operações matemáticas, acesso a portas I/O, transferência de dados, vice-versa.

EBX →BASE→usado como ponteiro para acessar a memória, índice e auxiliar nas operações aritméticas efetuadas por EAX

ECX →CONTADOR→ Contador de loops, ou seja quantas vezes foi executada ou irá ser executada determinada ação

EDX →DADOS→EDX recebe o resto da divisão e o produto da multiplicação, acesso a I/O.

REGISTRADORES DE SEGMENTO

CS(CODE SEGMENT)→É usado para apontar o “local” ou seja a área de memória onde está o código do programa em execução.

DS(DATA SEGMENT)→Aponta para o segmento de memória que estiver sendo usada no armazenamento de dados do programa em execução.

SS(STACK SEGMENT)→Usa-se para identificar o segmento que irá ser usado como pilha, para uso temporário de memória do programa em execução.

ES(EXTRA SEGMENT)→Acesso a memória de vídeo, determina um segmento extra de dados.

FS (EXTRA SEGMENT)→Idem.

GS(EXTRA SEGMENT)→Idem.

SI

Índice de Origem – Em instruções que movem blocos de memória ele é o endereço inicial do bloco.

DI

Índice de Destino – Em instruções que movem blocos de memória ele é o endereço final do bloco.

BP

Ponteiro da Base – Tem função semelhante ao BX

DS

Segmento de Dados – Este registrador contém o valor de segmento, todas as instruções de acesso à memória vão se utilizar deste valor para acessar a memória.

ES

Segmento de Dados Extra – Somente um segmento de dados não é suficiente.

SS

Segmento de Pilha – Semelhante ao DS e ao ES, mas ele é utilizado pelo processador para indicar o segmento em que o irá usar para armazenar os dados da pilha.

SP

Ponteiro da Pilha – Também utilizado pelo processador para ver o endereço onde serão armazenados os dados da pilha.

CS

Segmento de Código – O processador utiliza esse registrador para saber em qual segmento está o programa que está sendo executado no momento

IP

Ponteiro de Instruções – Assim como o SP, o processador usa este registrador para saber em qual endereço da memória está a instrução a ser executada no momento.

16 BITS

AX

BX

CX

DX

8 BITS

AH

AL

BH

BL

CH

CL

DH

DL

AH e AL são partes de AX, que é parte de EAX. O mesmo vale para os outros registradores gerais.Quaisquer mudanças em um registrador menor, o maior também irá mudar.
31 16 15 0
EAX
AX
AH AL

Se em EAX contiver o valor 1111111111110000’1111000000001111. AX conterá 1111000000001111. AH conterá 11110000 e AL conterá 00001111.
Ainda outro exemplo: Se EAX tiver o valor AABBCCDDh, AX terá CCDDh, AH terá CCh e AL terá DDh.

Porém, existe algo que não podemos negar, os registradores IA-32/AMD64 são muito semelhantes hoje em dia, sendo muitas dessas informações um pouco ultrapassadas.Não há papel pré-definido para cada um deles, entretanto algumas instruções só podem ser usadas com determinados registradores, um belo exemplo é EAX, sendo este o mais genérico.

Os registradores de segmento que citei acima, a maioria já é obsoleta, o modelo de memória segmentada é legado de 16 bits, ESP, EBP, também possuem versões de 32 e 64 bits.O papel de cada registrador não é tão importante hoje em dia, pois via de regra qualquer registrador pode ser usado para qualquer função(por exemplo, compilações com -fomit-frame pointer fazem com que EBP se torne um registrador de uso genérico.

Referências: http://www.sciencehq.com/computing-technology/cpu-registers.html

https://bitismyth.wordpress.com/