Informática Numaboa - Tutoriais e Programação
Arquitetura Intel
Sex 19 Jun 2009 11:01 |
- Detalhes
- Categoria: Assembly Numaboa (antigo oiciliS)
- Atualização: Sexta, 19 Junho 2009 14:27
- Autor: vovó Vicki
- Acessos: 12287
A arquitetura dos processadores da família Intel é formada por registradores de uso geral, registradores de segmento, registradores de status, ponteiros e registradores de pilha.
Registradores de uso geral
Registradores de Uso Geral | |||
---|---|---|---|
16 bits | 32 bits | ||
AX | EAX | AH | AL | Acumulador |
BX | EBX | BH | BL | Base |
CX | ECX | CH | CL | Contador |
DX | EDX | DH | DL | Dados |
Os usos mais comuns dos Registradores de Uso Geral são:
EAX, AX, AH, AL: Chamado de registrador Acumulador. É usado para acessar portas de entrada/saída, operações aritméticas, chamada de interrupções, etc.
EBX, BX, BH, BL: Chamado de registrador Base. É usado como um ponteiro base para acessar a memória. Recebe alguns valores de retorno.
ECX, CX, CH, CL: Chamado de registrador Contador. É usado como contador de loop e para shifts. Recebe alguns valores de interrupções.
EDX, DX, DH, DL: Chamado de registrador de Dados. É usado para acessar portas de entrada/saída, operações artiméticas e algumas chamadas de interrupção.
Registradores de segmento
Registradores de Segmento | |
---|---|
CS | Segmento de Código |
DS | Segmento de Dados |
SS | Segmento de Pilha (Stack) |
ES | Segmento Extra |
FS | Segmento Extra (acima de 386) |
GS | Segmento Extra (acima de 386) |
Os usos mais comuns dos Registradores de Segmento são:
CS: Contém o segmento de Código no qual o programa está rodando. Mudar seu valor pode pendurar o computador.
DS: Contém o segmento de Dados que o programa acessa. Mudar seu valor pode resultar em dados errados.
ES, FS, GS: Estes registrados de segmento extras estão disponíveis para endereçamento distante (far pointer) como memória de vídeo e outras.
SS: Contém o segmento de Pilha usado pelo programa. Algumas vezes tem o mesmo valor que DS. Mudar seu valor pode levar a resultados imprevisíveis, geralmente relacionados aos dados.
Registradores de ponteiros e de pilha
Registradores de Ponteiros | ||
---|---|---|
16 bits | 32 bits | |
SI | ESI | Índice de Origem (Source Index) |
DI | EDI | Índice de Destino (Destination Index) |
IP | Ponteiro de Instrução |
Registradores de Pilha | ||
---|---|---|
16 bits | 32 bits | |
SP | ESP | Ponteiro da Pilha (Stack Pointer) |
BP | EBP | Ponteiro da Base da Pilha (Base Pointer) |
Uso mais comum dos Índices e Ponteiros é:
ES:EDI EDI DI: Registrador do Índice de Destino. É usado para cópia de strings, cópia e configuração de arrays de memória e para endereçamento distante (far pointer) com ES.
DS:ESI EDI SI: Registrador de Índice de Origem. É usado para cópia de strings de de arrays de memória.
SS:EBP EBP BP: Registrador ponteiro da Base da Pilha. Contém o endereço base da pilha.
SS:ESP ESP SP: Registrador ponteiro da Pilha. Contém o endereço do topo da pilha.
CS:EIP EIP IP: Ponteiro do Índice. Contém o deslocamento (offset) da próxima instrução. Pode ser apenas lido.
Registradores de status (Flags)
11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00 | | | | | | | | | | | | | | | | | |--- CF Carry Flag | | | | | | | | | | | | | | | | |------ 1 | | | | | | | | | | | | | | | |--------- PF Flag de Paridade | | | | | | | | | | | | | | |------------ 0 | | | | | | | | | | | | | |--------------- AF Flag Auxiliar | | | | | | | | | | | | |------------------ 0 | | | | | | | | | | | |--------------------- ZF Flag Zero | | | | | | | | | | |------------------------ SF Flag de Sinal | | | | | | | | | |--------------------------- TF Trap Flag (Single Step) | | | | | | | | |------------------------------ IF Flag de Interrupção | | | | | | | |--------------------------------- DF Flag de Direção | | | | | | |------------------------------------ OF Flag de Overflow | | | | | |--------------------------------------- | | | | |------------------------------------------ IOPL Nível de Privilégio I/O (286+) | | | |--------------------------------------------- NT Nested Task Flag (286+) | | |------------------------------------------------ 0 | |--------------------------------------------------- RF Resume Flag (386+) |------------------------------------------------------ VM - Flag de Modo Virtual (386+)
Registradores de status (especiais)
Registradores de Status - Registradores Especiais (386+) | |||
---|---|---|---|
CR0 | Registrador de Controle 0 | DR0 | Registrador de Debug 0 |
CR2 | Registrador de Controle 2 | DR1 | Registrador de Debug 1 |
CR3 | Registrador de Controle 3 | DR2 | Registrador de Debug 2 |
DR3 | Registrador de Debug 3 | ||
TR4 | Registrador de Teste 4 | DR6 | Registrador de Debug 6 |
TR5 | Registrador de Teste 5 | DR7 | Registrador de Debug 7 |
TR6 | Registrador de Teste 6 | ||
TR7 | Registrador de Teste 7 |
Registradores de status MSW (Machine Status Word - 286+)
31 30-5 4 3 2 1 0 | | | | | | |--- PE Protection Enable | | | | | |------ MP Math Present | | | | |--------- EM Emulação | | | |------------ TS Task Switched | | |--------------- ET Tipo de Extensão | |------------------- Reservado | ----------------------- PG Paginação
Bit 0 - PE (Protection Enable): troca o processador entre modo real e protegido
Bit 1 - MP (Math Present): controla o funcionamento da instrução WAIT
Bit 2 - EM (Emulation): indica quais funções do coprocessador devem ser emuladas
Bit 3 - TS (Task Switched): setado e interrogado pelo coprocessador em tarefas de switches e quando interpretando instruções do coprocessador
Bit 4 - ET (Extension Type): indica o tipo do coprocessador no sistema
Bits 5 a 30 - Reservados
Bit 31 - PG (Paging): indica se o processador usa tabelas page para traduzir endereços lineares em endereços físicos
Override de segmentos
As operações ES:, DS:, CS: e SS: são prefixos de "segment override". Por exemplo, o código operacional para ES: é 26. Desta forma, para obter MOV ES:[DI],AL, procura-se o código operacional para MOV [DI],AL (8805) e precede-se o mesmo com 26 (268805), transformando-o em MOV ES:[DI],AL.
Registrador | Segmento Default | Overrides Válidos |
---|---|---|
BP | SS | DS, ES, CS |
SI ou DI | DS | ES, SS, CS |
Strings DI | ES | Nenhum |
Strings SI | DS | ES, SS, CS |
Registradores mal documentados
Existem registradores nos processadores 80386 e acima que não foram bem documentados pela Intel. Estes são divididos em registradores de controle, de debug, de teste e de segmentação no modo protegido. Ao que tudo indica, os registradores de controle, juntamente com os registradores de segmentação, são usados na programação em modo protegido.
Os registradores de teste foram tirados a partir do Pentium. Os registradores de controle são os CR0 a CR4, registradores de debug são os DR0 a DR7, os registradores de teste são os TR3 a TR7 e os registradores de segmentação no modo protegido são o GDTR (Global Descriptor Table Register), o IDTR (Interrupt Descriptor Table Register), o LDTR (Local DTR) e o TR.