| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Умножение на двубайтово число с 0,707 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=5895 |
Страница 1 от 1 |
| Автор: | thewizard85 [ Съб Юни 28, 2008 4:55 pm ] |
| Заглавие: | Умножение на двубайтово число с 0,707 |
Здравейте, правя си дипломната работа с PIC16F876 и стигнах до место където трябва да умножа двубайтово число (B0-младши и B1-старши) с десетичното число 0,707. Пиша програмата на асемблер и ще съм благодарен ако някой ми помогне. |
|
| Автор: | VSU [ Съб Юни 28, 2008 6:25 pm ] |
| Заглавие: | |
напиши си го на Ц и си импортни кода на асм след компилацията |
|
| Автор: | sthx [ Съб Юни 28, 2008 8:25 pm ] |
| Заглавие: | |
Правиш умножение на две двубайтови числа. Едното е променливата ,а другото 724. След това делиш резултата на 1024 с ротация надясно. Фактически най-младшия байт от резултата на умножението го елиминираш (/256) и имаш само две ротации надясно (/4). Още по-бръз вариант - правиш умножението със 181 (724/4) и резултата ти се получава директно в старшите два байта. |
|
| Автор: | thewizard85 [ Съб Юни 28, 2008 9:11 pm ] |
| Заглавие: | |
VSU нямам компилатор, а и до сега никога не съм пробвал да компилирам от C към асемблер. Нямам в момента време защото ще трябва да предавам тази седмица дипломната, иначе бих пробвал със C. sthx получи се мерси за помоща |
|
| Автор: | sthx [ Съб Юни 28, 2008 10:42 pm ] |
| Заглавие: | |
Прочети внимателно какво съм ти написал. Написал съм 3 варианта за решение. В последния вариант имаш умножение на двубайтово число с еднобайтово (181) и никакво деление. Резултата се получава директно в двата старши байта след умножението. |
|
| Автор: | tgi [ Нед Юни 29, 2008 12:38 am ] |
| Заглавие: | |
N*(0.707*2^16)!>16 Инак казано, 16 битовото число (N) по 46334 -> 32 бита резултат, от който взимаш горните 16 бита. Ако искаш да закръглиш, към 32-битовия резултат прибави $8000 преди да вземеш само горните 16 бита. Как се умножава 16 бита по 16 бита ако имаш само 8-бита умножение е отделен урок - вероятно го знаеш вече (ако не, същото е както с двуцифрени десетични числа, само дето са 8-цифрени двоични). Edit: sthx, стори ми се, че тоя вариант е по-очевиден за обучение от твоя,който разбира се е по-икономичен, и явно в момента съм в приказливо настроение.... |
|
| Автор: | sthx [ Нед Юни 29, 2008 8:43 am ] |
| Заглавие: | |
На мене ми се струва, че @thewizard85 пропуска факта, че ако се анаправи ротация наляво на едно двоично число, то това е еквивалентно на умножение на 2 и обратнота - с ротация надясно числото се дели на 2. Ако се направят 8 ротации надясно, делението е на 256; с 10 ротации се постога деление на 1024. В последния ми вариант вместо да правя 8 ротации надясно, просто пренебрегвам младшия байт. |
|
| Автор: | sthx [ Нед Юни 29, 2008 8:45 am ] |
| Заглавие: | |
На мене ми се струва, че @thewizard85 пропуска факта, че ако се анаправи ротация наляво на едно двоично число, то това е еквивалентно на умножение на 2 и обратнота - с ротация надясно числото се дели на 2. Ако се направят 8 ротации надясно, делението е на 256; с 10 ротации се постога деление на 1024. В последния ми вариант вместо да правя 8 ротации надясно, просто пренебрегвам младшия байт. |
|
| Автор: | ji4ka [ Чет Юли 03, 2008 9:59 pm ] | |||||||||
| Заглавие: | ||||||||||
Пробвай това - генератор на асм-код: http://piclist.com/techref/piclist/code ... divmul.htm |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|