Отговори на тема  [ 9 мнения ] 
Умножение на двубайтово число с 0,707 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Май 24, 2007 5:48 pm
Мнения: 16
Местоположение: Бургас / Варна
Мнение Умножение на двубайтово число с 0,707
Здравейте,
правя си дипломната работа с PIC16F876 и стигнах до место където трябва да умножа двубайтово число (B0-младши и B1-старши) с десетичното число 0,707. Пиша програмата на асемблер и ще съм благодарен ако някой ми помогне.


Съб Юни 28, 2008 4:55 pm
Профил
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
напиши си го на Ц и си импортни кода на асм след компилацията


Съб Юни 28, 2008 6:25 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
Правиш умножение на две двубайтови числа. Едното е променливата ,а другото 724. След това делиш резултата на 1024 с ротация надясно. Фактически най-младшия байт от резултата на умножението го елиминираш (/256) и имаш само две ротации надясно (/4).
Още по-бръз вариант - правиш умножението със 181 (724/4) и резултата ти се получава директно в старшите два байта.

_________________
Две плюс две е приблизително равно на четири. Факт!


Съб Юни 28, 2008 8:25 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Май 24, 2007 5:48 pm
Мнения: 16
Местоположение: Бургас / Варна
Мнение 
VSU нямам компилатор, а и до сега никога не съм пробвал да компилирам от C към асемблер. Нямам в момента време защото ще трябва да предавам тази седмица дипломната, иначе бих пробвал със C.

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

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


Съб Юни 28, 2008 9:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
Прочети внимателно какво съм ти написал. Написал съм 3 варианта за решение. В последния вариант имаш умножение на двубайтово число с еднобайтово (181) и никакво деление. Резултата се получава директно в двата старши байта след умножението.

_________________
Две плюс две е приблизително равно на четири. Факт!


Съб Юни 28, 2008 10:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 10, 2007 2:22 pm
Мнения: 6492
Местоположение: София
Мнение 
N*(0.707*2^16)!>16

Инак казано, 16 битовото число (N) по 46334 -> 32 бита резултат, от който взимаш
горните 16 бита. Ако искаш да закръглиш, към 32-битовия резултат прибави
$8000 преди да вземеш само горните 16 бита.

Как се умножава 16 бита по 16 бита ако имаш само 8-бита умножение е
отделен урок - вероятно го знаеш вече (ако не, същото е както с двуцифрени
десетични числа, само дето са 8-цифрени двоични).

Edit: sthx, стори ми се, че тоя вариант е по-очевиден за обучение от твоя,който
разбира се е по-икономичен, и явно в момента съм в приказливо настроение.... :)

_________________
-------------------
www.tgi-sci.com
-------------------
http://www.flickr.com/photos/didi_tgi/


Нед Юни 29, 2008 12:38 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
На мене ми се струва, че @thewizard85 пропуска факта, че ако се анаправи ротация наляво на едно двоично число, то това е еквивалентно на умножение на 2 и обратнота - с ротация надясно числото се дели на 2. Ако се направят 8 ротации надясно, делението е на 256; с 10 ротации се постога деление на 1024. В последния ми вариант вместо да правя 8 ротации надясно, просто пренебрегвам младшия байт.

_________________
Две плюс две е приблизително равно на четири. Факт!


Нед Юни 29, 2008 8:43 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
На мене ми се струва, че @thewizard85 пропуска факта, че ако се анаправи ротация наляво на едно двоично число, то това е еквивалентно на умножение на 2 и обратнота - с ротация надясно числото се дели на 2. Ако се направят 8 ротации надясно, делението е на 256; с 10 ротации се постога деление на 1024. В последния ми вариант вместо да правя 8 ротации надясно, просто пренебрегвам младшия байт.

_________________
Две плюс две е приблизително равно на четири. Факт!


Нед Юни 29, 2008 8:45 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
thewizard85 написа:
...sthx получи се :) . Имам програмка за умножение на две двубайтови числа. Сега ще потърся и за деление и съм готов. Не се бях сещал за този вариант.

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

Пробвай това - генератор на асм-код:
http://piclist.com/techref/piclist/code ... divmul.htm


Чет Юли 03, 2008 9:59 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 9 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни