Obra: Assembly x86/Registos
Matéria: Matemática
arquitetura tem registradores de uso geral general purpose registers gpr registradores de segmento registrador de flags um apontador de execução instruction pointer fixme no amd em há mais de gprs registradores de uso geral os gprs ou registradores de uso geral são os seguintes por ordem de introdução na pilha ao executar instrução pushad eax acumulador usado em operações aritméticas ecx contador usado em loops edx registrador de dados usado em operações de entrada saída em multiplicações divisões também uma extensão do acumulador ebx base usado para apontar para dados no segmento ds esp apontador da pilha stack pointer aponta para topo da pilha endereço mais baixo dos elementos da pilha ebp apontador da base do frame usado para acessar argumentos de procedimentos passados pela pilha esi índice da fonte de dados copiar source index aponta para dados copiar para ds edi edi índice do destino de dados copiar destination index aponta para destino dos dados copiar de ds esi estes registradores têm bits cada um dizem se estendidos os bits de ordem mais baixa de cada um dos registradores podem ser acessados através das versões não estendidas destes as versões de bits têm os mesmo nomes que as de bits com exceção de letra ser retirada ex eax ax as versões estendidas dos registradores não existem em gerações anteriores primeira geração de processadores bits da arquitetura as versões não estendidas dos quatro primeiros gprs dividem se ainda em dois grupos de bits cada um octeto byte de ordem mais alta acessado trocando por um exemplo ax ah octeto de ordem mais baixa trocando por um ex ax al nota nos processadores da arquitetura amd em os gprs têm bits pode se acessar totalidade dos bits através dos nomes rax rcx rdx etc adicionalmente existem ainda mais oito gprs de bits cada um isto só válido se processador estiver em modo longo registradores de segmento há registradores de segmento cs segmento do código ds segmento de dados es segmento com dados extra fs segmento com mais dados gs segmento com ainda mais dados ss segmento da pilha stack os segmentos são uma idiossincrasia da arquitetura não existindo em praticamente mais nenhuma arquitetura sendo assim os compiladores de linguagens de alto nível geralmente optam por ignorar os segmentos por essa razão os sistemas operativos modernos para incluindo windows linux tipicamente fazem todos os registradores de segmento apontar para mesmo segmento de gb as exceções essa regra são geralmente fs gs que são usados para isolar as seções de dados das diferentes threads de um mesmo processo as outras arquiteturas utilizam registradores especiais chamados registradores de thread para esse efeito os quais não existem no registrador das flags registrador das flags chamado eflags extended flags nas arquiteturas de bits sendo sua versão de bits chamada simplesmente flags tal como com os gprs os processadores anteriores ao não possuem versão de bits nos processadores de bits este registrador também tem bits chama se rflags
ão possuem versão de bits nos processadores de bits este registrador também tem bits chama se rflags no esquema abaixo os bits menos significativos aparecem cinza enquanto que os bits azul apenas existem em processadores da geração do ou posteriores id vip vif ac vm rf nt iopl of df if tf sf zf af pf cf ao carregar um novo valor no eflags os bits que aparecem no esquema como ou devem ser carregados como tal de modo preservar compatibilidade do software com gerações futuras da arquitetura note se que utilizar um método convencional para acessar este registrador produz um erro do montador assembler uma vez que não fornece nenhuma forma de acessar diretamente registrador das flags para modificar ou ler eflags necessário utilizar instrução pushf bits ou pushaf bits apontador de execução apontador de execução ou instruction pointer genericamente conhecido na ciência da computação por program counter do um registrador interno que aponta para próxima instrução ser executada seu nome eip parte que contem os bits menos significativos denomina se ip tal como no caso do registrador das flags não possível utilizar um método convencional para acessar apontador de execução ele tem de ser introduzido no stack por meio de uma instrução call ou semelhante