Programar em Assembly com GAS/Registradores

Origem: Wikilivros, livros abertos por um mundo aberto.

Registradores[editar | editar código-fonte]

Registradores de propósito geral[editar | editar código-fonte]

Os registros podem ser vistos como pequenas regiões da memória dentro do microprocessador, dentro das quais podemos colocar diferentes valores de diferentes tamanhos dependendo do tipo de registro.
Utilizando as instruções, podemos colocar as informações contidas até então na memória principal e por dentro dos registros do processador.
Para trabalhar com esses dados contidos nos registros, utilizamos instruções.


No as os registradores são definidos usando o prefixo "%".

Registradores                  bits                Hexadecimal
%eax,%ebx, %ecx, %edx          32          DWORD   00 00 00 00
%edi,%esi, %ebp, %esp          32
%ax, %bx,  %cx,  %dx           16          WORD    00 00
%di, %si,  %bp,  %sp           16
%ah,%al,%bh,%bl,%ch,%cl        8           byte    00 
%dh,%dl,%ax,%bx,%cx,%dx        8


ACUMULADOR

  • %eax, %ax, %ah, %al :

Estes registradores são chamados de "acumuladores" e podem ser usados para operações aritméticas e de entrada e saída ou para executar chamadas de interrupções. Veremos como é indispensável o uso deles quando temos que realizar chamadas do sistema(system calls)

BASE

  • %ebx, %bx, %bh, %bl :

Estes registradores são a base dos registradores e são usados como ponteiros base para o acesso a memória. Nós iremos usá-los para passar argumentos de chamada do sistema. Eles também são usados para guardar o valor de retorno de uma interrupção.
CONTADORES

  • %ecx, %cx, %ch, %cl :

DATA

  • %edx, %dx, %dh, %dl:

Estes são os registradores de dados, eles podem ser usados para operações aritméticas, chamadas de interrupções e algumas operações de input/output.

Registradores de seção ou segmento para acesso a memória[editar | editar código-fonte]

 %cs    Code  Section
 %ss    Stack Section
 %ds    Data  Section
 %es    Extra Section
 %fs    O mesmo que %es
 %gs    O mesmo que %es

Registradores de Status "controle de processador"[editar | editar código-fonte]

%cr0   Registrador de Controle 0 
%cr2   Registrador de Controle 2 
%cr3   Registrador de Controle 3 

Registradores de debug[editar | editar código-fonte]

 %db0, %db1 , %db2, %db3 , %db6 , %db7

Registradores de estado[editar | editar código-fonte]

O registrador de estado guarda o estado do processador depois de cada instrução.
Registradores intel de flags(Bandeiras).
FLAGS: 16 bit
EFLAGS: 32 bit
RFLAGS: 64 bit

Outros registros[editar | editar código-fonte]

Global Descriptor Table Register GDTR
Interrupt Descriptor Table Register IDTR
Local Descriptor Table Register LDTR
Task Register TR
Test Registers TR6 é TR7
Time Stamp Counter TSC