Ir ao conteúdo

Como um sistema de 8bits faz operações maiores?


Ir à solução Resolvido por MOR_AL,

Posts recomendados

Postado

Qual técnica é usada para uma calculadora 8bits ultrapassar o overflow e fazer operações aritméticas maiores?  

como uma soma por exemplo que resulte em um numero 16 bits.

Postado

A linguagem C faz uma adaptação de dados, endereços e instruções básicos de 8 bits para blocos de dados de 16 bits e 32 bits. Operações em ponto-flutuante também entram nisso, explicando por que números fracionários podem ser manipulados mesmo sem haver uma unidade de hardware específica para ponto-flutuante.

 

 

 

Tudo funciona conforme os princípios da Aritmética Digital. Até nos processadores x86 de 32 bits havia técnicas com vetores em C para calcular com 64 bits F5Rua4D.gif.

 

 

 

Espero ter ajudado GbhmuXl.gif.

  • Curtir 2
  • Obrigado 1
Postado

Creio que você fale de um processador só com 8 bits( que aceita só variáveis do tipo byte). você tem que usar 2 variáveis e fazer as operações utilizando ambas as variáveis. Para funções específicas, você precisa especificar linguagem e aparelho para que possamos lhe ajudar.

  • Curtir 2
  • Obrigado 1
  • Membro VIP
Postado

Em assembly, cada mc tem sua técnica. Já em c (ou outra linguagem acima), na prática é desnecessária a preocupação e entendimento bastando definir a variável como int, float, double, word e afins.

Mas de fato há compilador e compilador. Os não gratuitos tendem a otimizar mais o resultado de

float a,b,c; //incabível num attiny10 p.ex.

c=a*b;

P.ex. arduino e cia considera que há abundância de recurso no mc e numa tá nem aí pra eficiência do código gerado. Portanto se estiver programando nesta plataforma, é uma boa prática habituar-se a não fazer contas complexas e com fracionários... dica pessoal, claro.

  • Curtir 1
  • Obrigado 1
  • Membro VIP
Postado
1 hora atrás, if. disse:

se estiver programando nesta plataforma [Arduino etc.], é uma boa prática habituar-se a não fazer contas complexas e com fracionários...

 

A porta escancarada para o C++.

 

Alguém sabe dizer se existe algum validador das "boas práticas" para Arduino em tempo de compilação ou de codificação?

 

Se não, e principalmente, também seriam interessantes materiais abordando os "impactos" das práticas ruins.

Postado
10 horas atrás, Thiago Miotto disse:

Creio que você fale de um processador só com 8 bits( que aceita só variáveis do tipo byte). você tem que usar 2 variáveis e fazer as operações utilizando ambas as variáveis. Para funções específicas, você precisa especificar linguagem e aparelho para que possamos lhe ajudar.

Não é um problema, gostaria de entender mais profundamente sobre isso! obrigado.

 

agora, alexandre.mbm disse:

 

A porta escancarada para o C++.

 

Alguém sabe dizer se existe algum validador das "boas práticas" para Arduino em tempo de compilação ou de codificação?

 

Se não, e principalmente, também seriam interessantes materiais abordando os "impactos" das práticas ruins.

Praticas ruins como atribuir valores menores do que os necessários aos tamanhos das variáveis? ou fala de outra coisa?

  • Membro VIP
Postado
2 minutos atrás, felipe honorio disse:

Praticas ruins como atribuir valores menores do que os necessários aos tamanhos das variáveis? ou fala de outra coisa?

 

Qualquer uma, seja erro ou ineficiência.

  • Solução
Postado

Bom!

Entendi que você quer saber como numa operação com variáveis de 8 bits (bytes) consegue-se fazer cálculos que forneçam valores maiores que esses 8 bits.

Fiz um fluxograma, já tem tempo, de uma soma de duas variáveis de 16 bits cada. Cada variável de 16 bits ocupa dois bytes.

Segue o fluxograma em pseudo-código. É um primeiro passo para se entender como as operações de 8 bits funcionam.

A qualidade da imagem aparece baixa. Clique na imagem que vai melhorar, apesar de eu ter criado a imagem com melhor qualidade.

MOR_AL

 

Soma_ASM.jpg

  • Curtir 2
  • Obrigado 1
  • Amei 1
  • Membro VIP
Postado
36 minutos atrás, alexandre.mbm disse:

algum validador das "boas práticas"

O MISRA C lhe é um norte teórico

https://pt.wikipedia.org/wiki/MISRA_C

que deve ser complementado com prática e experimentações empíricas.

P.ex.:
 

float a,b,pi;

void main()
{
a=355.0;
b=113.0;

    pi=a/b;
    printf("%f",pi);
}

Sequer cabe na memória de um pic com 1K.

Já isso...

int a,b,pi;

void main()
{
a=35500;
b=113;

    pi=a/b;
    printf("%d%s%d",pi/100,".",pi%100);
}

...com resultado que pode atender uma expectativa minimalista inerente ao projeto,  pode caber

  • Curtir 1
  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...