| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Логическо деление http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=5537 |
Страница 1 от 1 |
| Автор: | Nikolay_90 [ Пон Мар 03, 2008 5:35 pm ] |
| Заглавие: | Логическо деление |
Здравейте. Тъй като никаде не срещнах инструкция с която се извършва логическо деление при програмиране на PIC микроконтролер, реших да попитам как става. Искам да разделя 8 битово число от даден регистър на 2 и резултата да запиша в W. Моля Ви, помагаите. Благодаря предварително! |
|
| Автор: | Ки4о [ Пон Мар 03, 2008 6:26 pm ] |
| Заглавие: | |
За да разделиш на 2 преместваш един разряд на дясно. Примерно имаш в регистъра 0b00001000 (0x08) Премествайки веднъж на дясно ->0b00000100 (0x04) Премествайки веднъж на дясно ->0b00000010 (0x02) И така ..... А справка в Гугъла направи ли ? |
|
| Автор: | stanleyhacker [ Пон Мар 03, 2008 6:30 pm ] |
| Заглавие: | |
Имаш предвид въртене на дясно през С ли? rrf (reg),w Аритметичното, трябва да нулираш С на всяко врътване. |
|
| Автор: | Nikolay_90 [ Пон Мар 03, 2008 7:03 pm ] |
| Заглавие: | |
Благодаря за помоща, сега вече ми е ясно как става. |
|
| Автор: | Syrius-B [ Пон Мар 03, 2008 9:44 pm ] | |||||||||
| Заглавие: | ||||||||||
Не ти трябва Гугъл, трябва да си спомниш, какво си учил по аритметика (двоична!), или ако не си, да наваксаш бързичко |
||||||||||
| Автор: | Nikolay_90 [ Пон Мар 03, 2008 10:32 pm ] |
| Заглавие: | |
Проблема е, че не съм учил двоична аритметика. Електрониката ми е хоби доста отдавна, от скоро се занимавам и с микроконтролери. П.С. Извинявам се за оффтопика |
|
| Автор: | Syrius-B [ Вто Мар 04, 2008 9:32 pm ] | |||||||||
| Заглавие: | ||||||||||
Никога не е късно да започнеш. http://mcu-bg.com/mcu_site/viewtopic.php?t=1230 |
||||||||||
| Автор: | Nikolay_90 [ Сря Мар 05, 2008 5:31 pm ] | |||||||||
| Заглавие: | ||||||||||
Прав си. Благодаря за линка свързан с двоичната аритметика. |
||||||||||
| Автор: | Yanek [ Сря Мар 05, 2008 8:50 pm ] |
| Заглавие: | |
И аз за протокола... Това не е "логическо" деление. Логически може да разделим на 7 магарета 3 снопа суха люцерна |
|
| Автор: | Nikolay_90 [ Сря Мар 05, 2008 9:11 pm ] |
| Заглавие: | |
В някой книги пише "логическо умножение", "логическо събиране"... и аз помислих, че и делението е логическо |
|
| Автор: | stanleyhacker [ Чет Мар 06, 2008 12:55 pm ] |
| Заглавие: | |
Логическо преместване наляво или надясно е когато битът, който излиза, пак влиза от другата страна, така наречено rotate left / right или logical shift left / right arithmetical shift left / right е когато на свободното място влизат нули, такова въртене arithmetical shift left / right е точно умножение / деление по основата на бройната система - в случая "2". Също както ако преместим 25 веднъж наляво - получаваме 250 или умножение по основата - "10" при десетична бройна система. в някои книги логическото преместване може и се казва логическо умножение, за мене не е много вярно, но не мисля че е голям проблем, важното е да знаеш кое какво е и как да го използваш! |
|
| Автор: | MYXATA [ Чет Мар 06, 2008 2:29 pm ] | |||||||||
| Заглавие: | ||||||||||
много аграрно казано |
||||||||||
| Автор: | Cvetanov [ Чет Мар 06, 2008 3:59 pm ] | |||||||||
| Заглавие: | ||||||||||
Прегледай някой Instruction Set, за да си опресниш понятията. ROL и LSL (ROR и LSR) са различни неща. Не си прав за ASR. Там най-старшия бит остава непроменен, за да се запази знака. Логическото събиране и умножение са понятия от булевата алгебра, по известни като AND и OR. @Nikolay_90 Наистина е добре да прочетеш малко за двоична аритметика и логически операции. И с няколко примера ще ти се изяснят нещата. |
||||||||||
| Автор: | stanleyhacker [ Чет Мар 06, 2008 6:23 pm ] |
| Заглавие: | |
| Автор: | HCL [ Чет Мар 06, 2008 8:38 pm ] |
| Заглавие: | |
@stanleyhacker, Логическо преместване наляво или надясно не е еквивалентно на rotate. При Logical Shift Left и Logical Shift Right имаме запьлване на LSB, сьответно на MSB с 0-и. При Rotate Left, LSB получава предходното MSB. При Rotate Right, MSB получава предходното LSB. Има и друг вариант Rotate Left/Rotate Right trough Carry, кьдето се вьрти през Carry Flag-a. Arithmetical Shift Left е еквивалентно на Logical Shift Left. Arithmetical Shift Right имаме когато MSB bit-а запьлва постепенно всички позиции от ляво на дясно при такт. Това е от гледна точка на дигиталния дизайн. От гледна точка на информатиката нещата са по-сложни. Каква математическа операция бива изпьлнена зависи от начина на предстаняве на числата: one's complement, two's complement, signed magnitude, fixed-point, floating-point и т.н. Не случайно много компилатори тьлкуват ASL по различен начин. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|