Programar em Assembly com GAS/Registradores
Registradores
Registradores de propósito geral
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
%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"
%cr0 Registrador de Controle 0 %cr2 Registrador de Controle 2 %cr3 Registrador de Controle 3
Registradores de debug
%db0, %db1 , %db2, %db3 , %db6 , %db7
Registradores de estado
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
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