Movimetação de bits e registradores [RESOLVIDO]

1. Movimetação de bits e registradores [RESOLVIDO]

Ovídio José Francisco
ovidiojf

(usa Ubuntu)

Enviado em 29/09/2011 - 16:50h

Meu professor de Arquitetura de computadores falou em uma aula que o processador movimenta sempre a quantidade de total de bits. Sitou até uma operação de MOV onde todos os 32 bits de um processador de 32 bits são sempre movidos.

Maaaaas, os processadores (ao menos o padrão Intel) possuem tb registradores de 16 e 8 bits, que são 1/2 e 1/4 de um mesmo reg. de 32 bits.

Pergunto:

1) - Então como se dá uma movimentação entre registradores de 8 bits, já que serão sempre 32 bits movidos? Indo mais além, uma movimentação entre bits no mesmo registrador, como: MOV AL, AH ? Como os bits mais significativos não são zerados? Uma possível solução q eu vejo, seria usar ANDs, uma máscara, um registrador extra e/ou a pilha:

2) - Com certeza o processador terá trabalho extra com dados menores, OK? Isso justifica algumas dicas de otimização que dizem para usar variáveis de tamanho maior para cálculos que precisam ser muito rápidos, como: int ao invés de short e double ao invés de float ??


  


2. Re: Movimetação de bits e registradores [RESOLVIDO]

vinicius
hessel

(usa Ubuntu)

Enviado em 30/09/2011 - 01:13h

Olá Ovídio,

No processador, os dados são movimentados nos barramentos e, por isso, pode-se dizer que sempre há a movimentação da quantidade máxima de bits da arquitetura. Mas isso não quer dizer que sempre haverá a gravação de todos os bits do barramento nos registradores.
Os registradores que precisam ser lidos ou gravados são escolhidos através de um sistema de seleção de registradores e, mesmo que todo o barramento tenha dados (sempre tem zeros ou uns...), apenas a parte corresta do barramento terá algum efeito.

Por exemplo, com a instrução mov al, ah.
Haverá um ciclo de leitura onde a parte alta do registrador ax estará em contato com o barramento
Num momento posterior, haverá a gravação da parte baixa do registrador ax e a parte alta não estará em contato com o barramento (alta impedância).

Quanto à otimização, acredito que o motivo esteja mais relacionado ao alinhamento de dados. Quando você trabalha com dados, na memória principal, de tamanho múltiplo da quantidade de bits da arquitetura, os dados (espera-se) podem estar alinhados de forma que a leitura dos mesmos podem ser executadas em menos ciclos (o barramento é completamente utilizado). Se você começa a utilizar dados com tamanho fracionário, eventualmente fará leituras onde somente parte do barramento será efetivamente utilizada para a transmissão de dados (dados desalinhados).

Abraços


3. Valeu

Ovídio José Francisco
ovidiojf

(usa Ubuntu)

Enviado em 30/09/2011 - 15:24h


Amigo,

muito satisfatória a a resposta, que a confirmar a qualidade deste forum.

Valeu !


4. Re: Movimetação de bits e registradores [RESOLVIDO]

Daniel Marchi
DMS_

(usa elementary OS)

Enviado em 23/10/2011 - 23:17h

Quanto mais eu aprendo, mais eu percebo que não sei de nada!
Incrivel.
Assembly é show.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts