Микроконтролери и електроника
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 написа:
Благодаря за помоща, сега вече ми е ясно как става. :) Ами гледах в Гугъл, но нищо не намерих по въпроса.

Не ти трябва Гугъл, трябва да си спомниш, какво си учил по аритметика (двоична!), или ако не си, да наваксаш бързичко :(

Автор:  Nikolay_90 [ Пон Мар 03, 2008 10:32 pm ]
Заглавие: 

Проблема е, че не съм учил двоична аритметика. Електрониката ми е хоби доста отдавна, от скоро се занимавам и с микроконтролери. :)
П.С. Извинявам се за оффтопика

Автор:  Syrius-B [ Вто Мар 04, 2008 9:32 pm ]
Заглавие: 

Nikolay_90 написа:
Проблема е, че не съм учил двоична аритметика. Електрониката ми е хоби доста отдавна, от скоро се занимавам и с микроконтролери. :)
П.С. Извинявам се за оффтопика

Никога не е късно да започнеш.
http://mcu-bg.com/mcu_site/viewtopic.php?t=1230

Автор:  Nikolay_90 [ Сря Мар 05, 2008 5:31 pm ]
Заглавие: 

Syrius-B написа:
Никога не е късно да започнеш.

Прав си. :) След 8-ми клас не можах да вляза в електротехникума със специалността която исках, но въпреки това не спирам да се занимавам с електроника защото това ми е мечтата. С микроконтролери се занимавам едва от 4-5 месеца. Сега съм почти на 18 години и след като завърша училище ще се постарая да вляза в Техническия университет със специалност която се занимава с нещо такова. :)
Благодаря за линка свързан с двоичната аритметика.

Автор:  Yanek [ Сря Мар 05, 2008 8:50 pm ]
Заглавие: 

И аз за протокола... Това не е "логическо" деление. Логически може да разделим на 7 магарета 3 снопа суха люцерна :idea: . Това си е чисто целочислено деление на дадена степен на 2 :wink:

Автор:  Nikolay_90 [ Сря Мар 05, 2008 9:11 pm ]
Заглавие: 

В някой книги пише "логическо умножение", "логическо събиране"... и аз помислих, че и делението е логическо :oops:

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

Yanek написа:
И аз за протокола... Това не е "логическо" деление. Логически може да разделим на 7 магарета 3 снопа суха люцерна :idea: . Това си е чисто целочислено деление на дадена степен на 2 :wink:

много аграрно казано ;) но точно :)

Автор:  Cvetanov [ Чет Мар 06, 2008 3:59 pm ]
Заглавие: 

stanleyhacker написа:
Логическо преместване наляво или надясно е когато битът, който излиза, пак влиза от другата страна, така наречено rotate left / right или logical shift left / right

arithmetical shift left / right е когато на свободното място влизат нули, такова въртене arithmetical shift left / right е точно умножение / деление по основата на бройната система - в случая "2". Също както ако преместим 25 веднъж наляво - получаваме 250 или умножение по основата - "10" при десетична бройна система.

в някои книги логическото преместване може и се казва логическо умножение, за мене не е много вярно, но не мисля че е голям проблем, важното е да знаеш кое какво е и как да го използваш!


Прегледай някой Instruction Set, за да си опресниш понятията.
ROL и LSL (ROR и LSR) са различни неща.
Не си прав за ASR. Там най-старшия бит остава непроменен, за да се запази знака.

Логическото събиране и умножение са понятия от булевата алгебра, по известни като AND и OR.

@Nikolay_90
Наистина е добре да прочетеш малко за двоична аритметика и логически операции. И с няколко примера ще ти се изяснят нещата.

Автор:  stanleyhacker [ Чет Мар 06, 2008 6:23 pm ]
Заглавие: 

:oops: Да, май малко съм ги забравил тия неща. ASL беше като LSL, обаче не се сещам защо? (старшия бит не трябва пак да остане същия или се бъркам нещо?)

Автор:  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/