| Автор |
Съобщение |
|
jony++
Ранг: Минаващ
Регистриран на: Пон Сеп 19, 2005 12:49 am Мнения: 61
|
 Как би изглеждал този С код на асемблер за PIC16 примерно
Как биха изглеждал този С код на асемблер за PIC16 примерно
int T = 23;
int temp1, temp2;
temp1 = T%10;
temp2 = T/10;
Сигурно ще е нещо просто, но ....... май математика ми куца
Благодаря ви.
|
| Вто Сеп 20, 2005 11:39 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Намираш си процедурата на асм:
"Divide 16 bit int by 8 bit int to 8 bit int and remainder"
и виждаш как изглежда
temp2 ти е резултата, а temp1 остатъка.
|
| Вто Сеп 20, 2005 2:34 pm |
|
 |
|
jony++
Ранг: Минаващ
Регистриран на: Пон Сеп 19, 2005 12:49 am Мнения: 61
|
Май е по-добре да кажа за какво ми е това деление защото може да се окаже че имало и по-лесен начин.....
Ами работата е там че искам да извеждам двуцифрени числа на динамичен 2 разряден 7 сегмендет LED и чрез това деление исках да разделя десеттиците от единиците.
|
| Вто Сеп 20, 2005 4:46 pm |
|
 |
|
arcopal
Ранг: Минаващ
Регистриран на: Чет Сеп 08, 2005 9:19 pm Мнения: 17
|
методи - БОЛ! Но всичко по реда си!
1.не знам какъв формат данни ти трябва за ЛСД-то ама най-лесно според мен е да си зеделиш 200 байта (2 байта за число в интервала 0-99) и да си направиш едно масивче директно с исходните стойности... тъпо, обемно, но бързо! макар че за обема може да се поспори - не знам колко място заемат инструкциите реализиращи двете деления...
но пък простотата на този метод е неоспорима - свежда се до едно четене от масив!
2.ако все пак си останеш на деленетото... ВНИМАНИЕ - едното деление може да го замениш със ВАДЕНЕ!!!
3. самото делене можеш да направиш като си напишеш класическата функция за бързо делене: 4.става и като работиш с BCD-числа! разликата от "стандартните" двоично-дестични е, че след всяко "двоично" събиране/вадене "подравняваш" - тоест добавяш 0x6/0x60 на тетрадата в коята има пренос(проверяваш битове C, DC). когато ти потрябват отделните цифри - "распакетираш"(тоест вземаш поотделно всяка от тях като маскираш другата с AND 0) тетрадите по една в байт и си готов! 5.ЦЕНЕН ПИК-СЪВЕТ: погледни в сайта на Мicrochip, там има примери за разни алгоритми преобразования, деления(и за какло ли не) и описания/доунлоад на всевъзможни библиотеки![/code]
|
| Вто Сеп 20, 2005 10:11 pm |
|
 |
|
jony++
Ранг: Минаващ
Регистриран на: Пон Сеп 19, 2005 12:49 am Мнения: 61
|
Благодаря за прделожените варианти, но този код с деленено нещо неработи...
[/code]
|
| Чет Сеп 22, 2005 11:01 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: Как би изглеждал този С код на асемблер за PIC16 примерн
...
Последна промяна ¶ на Пон Яну 30, 2012 5:03 am, променена общо 1 път
|
| Чет Сеп 22, 2005 11:51 am |
|
 |
|
jony++
Ранг: Минаващ
Регистриран на: Пон Сеп 19, 2005 12:49 am Мнения: 61
|
 Re: Как би изглеждал този С код на асемблер за PIC16 примерн
pirev, не ми се карай  , малко съм неориентиран, но ще влезна в час. А това, че е лесно да разделиш две 8 битови числа е така, но като занеш алголитъма. На времето като са ми го преподавали това чудо, кой зане къде съм блеел като съм си мислел за какво ще са ми тия неща. Но ето че сега се наложи.
|
| Чет Сеп 22, 2005 1:38 pm |
|
 |
|
arcopal
Ранг: Минаващ
Регистриран на: Чет Сеп 08, 2005 9:19 pm Мнения: 17
|
ПЪРВО СЕ ИЗВИНЯВАМ за тотално грешния и дори безмислен алгоритъм за "делене" който съм написал... ама така става когато човек бърза - да ми е за урок да знам да не се излагам! Значи за умножение и деление има два подхода:
1.последователно събиране/вадене към/от делимото на делителя и при всеки цикъл инкрементираш с единица променливата-резултат
2.същото като по-горе, но когато делимото е четно го умножаваш/делиш на две, като съответно променливата-резултат също се удвоява! тука има един момент ако почнеш да умножаваш от самото начало резултата и си го занулил предварително  ... класическа ситуация...
няма да поставам повече алгоритми за да не напиша пак някоя глупост, само ще дам ей този готин линк: http://www.convict.lu/Jeunes/Math/Fast_operations2.htm
темата наистина е за академията
|
| Съб Сеп 24, 2005 4:38 pm |
|
 |
|
jony++
Ранг: Минаващ
Регистриран на: Пон Сеп 19, 2005 12:49 am Мнения: 61
|
Благодаря много. Извинявам се че съм сложил темата тук, тя наистина е за академията.
|
| Нед Сеп 25, 2005 1:02 am |
|
|