Fazer divisão.

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Fazer divisão.

Mensagempor Vicente » 03 Mai 2022 17:43

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?
Vicente
Bit
 
Mensagens: 34
Registrado em: 24 Fev 2017 20:39

Re: Fazer divisão.

Mensagempor andre_luis » 05 Mai 2022 20:22

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 ?
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Fazer divisão.

Mensagempor Vicente » 06 Mai 2022 20:18

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...
Vicente
Bit
 
Mensagens: 34
Registrado em: 24 Fev 2017 20:39

Re: Fazer divisão.

Mensagempor sync » 07 Mai 2022 00:33

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. "
sync
Byte
 
Mensagens: 195
Registrado em: 04 Mai 2020 16:11

Re: Fazer divisão.

Mensagempor tcpipchip » 07 Mai 2022 22:43

------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Fazer divisão.

Mensagempor MOR_AL » 13 Mai 2022 11:14

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
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ


Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x