Ir ao conteúdo
  • Cadastre-se

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


Visitante
Ir à solução Resolvido por MOR_AL,

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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.

Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

  • Solução

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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
Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!