Микроконтролери и електроника
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 ]
Заглавие: 

thewizard85 написа:
...sthx получи се :) . Имам програмка за умножение на две двубайтови числа. Сега ще потърся и за деление и съм готов. Не се бях сещал за този вариант.

мерси за помоща :)

Пробвай това - генератор на асм-код:
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/