Página 1 de 1

Fazer divisão.

MensagemEnviado: 03 Mai 2022 17:43
por Vicente
Olá, estava querendo fazer uma divisão no Atmega328p em assembly e achei a instrução FMUL. O manual diz que faz uma multiplicação fracionada o que dá ideia de inverter um número, virando fração e multiplicando pelo outro, fazendo assim uma divisão.

Na prática: R1:R0 ← (Rd x Rr) << 1

Isso equivale a multiplicar dois números e deslocar um bit à esquerda, o que resulta em uma multiplicação por 2.
Alguém sabe pra que serve isso ou será que dá pra fazer divisão?

Re: Fazer divisão.

MensagemEnviado: 05 Mai 2022 20:22
por andre_luis
Nao conheço esse assembly aí, mas dependendo se apenas o numerador for variavel e o denominador for constante, pode-se fazer a divisão com um truque com multiplicação. No seu caso sao 2 valores variaveis que seriam multiplicados ?

Re: Fazer divisão.

MensagemEnviado: 06 Mai 2022 20:18
por Vicente
Como seria esse truque com multiplicação? No meu caso seriam duas variáveis.
Eu sei um método de ficar subtraindo um do outro e contando quantas subtrações foram feitas mas isso se torna lento, queria buscar algo utilizando lógica...

Re: Fazer divisão.

MensagemEnviado: 07 Mai 2022 00:33
por sync
Vicente
Baixe via libgen.is o livro Hacker's Delight do Henry Warren e dê uma olhada no capítulo 9 - Integer Division, é um livro de algoritmos para esse tipo de coisa.

https://en.wikipedia.org/wiki/Hacker's_Delight
"Hacker's Delight is a software algorithm book by Henry S. Warren, Jr. first published in 2002. It presents fast bit-level and low-level arithmetic algorithms for common tasks such as counting bits or improving speed of division by using multiplication. "

Re: Fazer divisão.

MensagemEnviado: 07 Mai 2022 22:43
por tcpipchip

Re: Fazer divisão.

MensagemEnviado: 13 Mai 2022 11:14
por MOR_AL
Tem um tutorial, que ensina como fazer a divisão em assembler.
Primeiro ele mostra um exemplo geral, bem explicativo, depois ele mostra as instruções.
O detalhe é que foi feito para PIC, mas você pode facilmente converter para o AVR.
Sinceramente, nem precisaria das instruções em assembler para o PIC, pois a explicação é bem clara e fácil.
Segue o link.

https://www.convict.lu/Jeunes/Math/Fast_operations2.htm

MOR_AL