| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| C { if ( !(COUNT % 8) ) } = ASM { ? } http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=1286 |
Страница 1 от 1 |
| Автор: | the_real_maniac [ Пет Ное 18, 2005 7:56 pm ] |
| Заглавие: | C { if ( !(COUNT % 8) ) } = ASM { ? } |
_space_ _space_ _space_ if ( !( COUNT % 8 ) ) - ако COUNT е кратно на 8 как - на асемблер , аз в момента мисля по въпроса,но реших ,че въпроса е интересен и затова да питам и Вас edit: всъщност идеята е на всеки прочетени 8 бита да се записват в REGNUMBER++, та хрумна ми по-лесно от това горе (но си мисля , че това горе пък е чистата логика , която се търси). regs: 8bitscount allbitscount logic: пълним първия count reg с 8 на всеки 8 и го следим ; стигне ли 0 (запис рег номер) ; след това вадим 8 от allbitscount и така докато станат 0 едит2: разбрах , че на С това са 30 реда на асм (PIC C) , но пък сигурно там функцията е унифицирана , т.е при каквито и да е y % x да работи ок -- оказа се , че всъщност това кратно не ми трябва, защото се сетих , че на мене винаги ще ми е кратно на 8 , така че просто трябва да си броя. Но все пак темата е интересна относно % на асм как ще изглежда |
|
| Автор: | Nikola Kirov [ Пет Ное 18, 2005 8:22 pm ] |
| Заглавие: | |
Ами сигурно е по кратко да си вкараш един 2 ри брояч дето да го качваш заедно с COUNT и да проверяваш него. за 16 битов COUNT и нагоре със сигурност е по бързо. |
|
| Автор: | TheHungry [ Пет Ное 18, 2005 11:05 pm ] |
| Заглавие: | |
.DEF count = R30 ANDI count, 0x07 BRNE NOEQUAL { Изпълнено условие JMP END } NOEQUAL: { Неизпълнено условие } END: Това е ако Count e BYTE и % е кратно на 2 // 2 , 4 , 8, 16, 32 ...... |
|
| Автор: | Реконструктор [ Пон Ное 21, 2005 12:59 am ] |
| Заглавие: | |
С други думи, интересуват ни младшите 3 бита - ако са равни на 0, то цялото число нататък е кратно на 8. |
|
| Автор: | Nikola Kirov [ Пон Ное 21, 2005 1:17 am ] |
| Заглавие: | |
Интересно как не го видях това решение. Стана ми интересно по какъв математически метод може да се провери за възможност за подобна оптимизация при конкретно зададено число за делител. Някои има ли идея? |
|
| Автор: | Реконструктор [ Пон Ное 21, 2005 1:22 am ] |
| Заглавие: | |
Ако не е степен на 2-ката, тая оптимизация не важи. |
|
| Автор: | bateAz [ Пон Ное 21, 2005 1:29 am ] |
| Заглавие: | |
Ами в някои случаи минава и ако не е точна степен на 2. Но иска едно-две команди в повече. Задачка - закачка. |
|
| Автор: | Nikola Kirov [ Пон Ное 21, 2005 1:29 am ] |
| Заглавие: | |
Да това че става с всички степени на двоиката го разбрах а дали все пак и за някои други делители няма подобни трикове? Като нищо ако се бях сблъскал с проблема и имах int16 щях да вкарам 2 ри брояч. |
|
| Автор: | Nikola Kirov [ Пон Ное 21, 2005 1:38 am ] |
| Заглавие: | |
За 3 почнах да разсъждавам но ми се вижда че бърз метод няма. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|