|
||
|
|
Conheça o Plugfeed | » Início » Desenvolvimento » Desenvolv de Software » Assembly - Os registradores
Conheça o Plugfeed | » Início » Desenvolvimento » Desenvolv de Software » Assembly - Os registradores
--> |
|
Avaliação:
![]() ![]() ![]() ![]() | Publicado em: 17/11/2006Assembly - Os registradores
Adriano Oliveira Funcionário Público Federal. Tem conhecimentos de Borland C++ Builder, VisualBasic, HTML, Assembly.
Atualmente(2009) cursando o segundo semestre de Ciências da Computação na Universidade Cruzeiro do Sul - Campus São Miguel Paulista
Assembly - Os registradores
E aí, futuros programadores Assembly! Neste artigo você conhecerá os Registradores mais usados para se programar em Assembly. Podemos imaginar os registradores como sendo variáveis que armazenam temporariamente nossos dados, desde valores numéricos, passando por trechos de strings até ponteiros para as próximas instruções a serem executadas. Há vários tipos de registradores, todos de 32 bits(em nosso estudo):
Entre os de uso geral, há quatro que podem se usados de três maneiras diferentes. São eles:
, conhecido como Acumulador, pois mantém os resultados das operações matemáticas;
, conhecido como Base, pois ele é usado, geralmente, como ponteiro de uma string;
, conhecido como Contador, pois o principal uso é em controlar loops e,
, conhecido como registrador de Dados, isto é, pode conter um endereço que aponte para uma variável, uma string. Cada um desses registradores tem a seguinte configuração(substitua o "A" do esquema por "B", "C" e "D" para ver a configuração de cada um desses registradores):
Suponha que você tenha uma string de quatro caracteres no registrador EBX, digamos, "ABCD". Ao ler o conteúdo do registrador BX, teremos sempre o conteúdo do word menos significativo que é o da direita, isto é, "CD", o restante é desprezado, isto é, "AB" é deixado inalterado. Ao ler o conteúdo do registrador BH, teremos o byte mais significativo do word contido em BX, isto é, a letra "C". Ao ler BL, teremos a letra "D", que é o byte menos significativo. Vejamos o que vem a ser um número mais ou menos significativo. Suponha um valor qualquer, por exemplo, 3596. Se avaliarmos cada um dos algarismos separadamente, veremos que, indo para esquerda, o valor absoluto dele aumenta, assim, o ‘9’, por representar 9 x 10 ^ 1, é maior que ‘6’, que representa 6 x 10 ^ 0. Dizemos então que 9 é um mais significativo que 6, igualmente, se fizermos o mesmo indo para a direita, veremos que o próximo algarismo pertence a uma ordem menor. Assim, o ‘5’ é menos significativo que o ‘3’ em nosso exemplo. Como exercício, diga qual são o dígitos mais e menos significativos do valor hexadecimal 3A4F. Esse valor pode ser armazenado em qual(is) registradores de uso geral apresentados acima? Agora vejamos mais registradores de uso geral:
, o Índice de Origem(Source Index), é usado geralmente para indicar o local de onde vem uma string, num comando de movimentação de dados.
, o Índice de Destino(Destination Index), é usado geralmente para indicar o local onde uma string deve ser armazenada, num comando de movimentação de dos. Embora sejam de uso geral, se você não tomar os devidos cuidados, como, por exemplo, salvar o seu conteúdo antes de usá-los e depois restaurá-los, pode fazer seu programa travar, ao apontar para endereços inválidos. Há mais dois registradores que podem ser usados para qualquer coisa, mas também podem causar problemas se usados erradamente, por exercerem função muito importante no controle de sub-rotinas, de funções. São eles:
, o Ponteiro de Base(Base Pointer), geralmente usado como um ponteiro numa pilha de dados para armazenar endereços de argumentos(passados por referência), valores de argumentos(passados por valor), endereço de retorno da função. Por isso, não brinque muito com esse registrador.
, o Ponteiro de Pilha(Stack Pointer), outro registrador de pilha, que mantém o endereço atual da pilha – esse valor vai sempre diminuindo até chegar a zero(um caso extremo), quando o Windows ou qualquer outro Sistema Operacional vai reclamar de falta de memória. Não brinque muito com esse registrador, pois pode fazer seu programa travar. Em programação 16 bits, esses quatro registradores são conhecidos como SI, DI, BP e SP, respectivamente, mas recomendo que você não tente usá-los dessa forma em seus programas 32 bits. Portanto, não brinque com EBP e ESP. Há, entre os registradores de uso especial, um muito importante, que usaremos para tomar decisões – o registrador de estado do processador – EFLAGS. Nele não podemos armazenar valores e sua leitura consiste apenas em tomar um ou outro bit, individualmente e decidir alguma o que fazer, dependendo de seu valor(um ou zero). Veremos esse registrador no próximo artigo e será o último com teoria "da pesada". Espero que tenha gostado deste artigo. Até mais. adrapaol@yahoo.com.br Este artigo é a parte 9 de 11 da seguinte série:
desconhecido
Quero daber mais sobre SO, registradores e gerenciadores.
![]() ![]() ![]() ![]() ![]() charlles cuba <charlles.cuba@gmail.com>
Se querem aprender Assembly de verdade, façam curso de Engenharia Elétrica OU Ciencia da Computação.
Assembly é matemática, programação é matemática. Se enganam se pensam que td se resume a loop´s, if´s e while´s. Ao menos leiam algo mais completo www.bpiropo.com.br ![]() ![]() ![]() ![]() ![]() ![]() |
||||||||||||||
![]() |
|
|