| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Asembler za PIC http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=888 |
Страница 1 от 2 |
| Автор: | SurchO [ Нед Юли 24, 2005 3:29 pm ] |
| Заглавие: | Asembler za PIC |
Здравейте. Имам малък проблем с асемблера и немога да разбера защо се получава така.. Ето едно фрагментче VARIABLE i=4 constant limit=5 . . re nop if i < limit i+=1 goto re else nop endif nop и като резултат цикъла се "зацикля" до безубразие, тоест не извършва операцията i+=1 ?!?!? някои може ли да ми обясни защо и как трябва да се напише синтаксиса за да го смята това i+=1 с уважение ..... SurchO |
|
| Автор: | bateAz [ Нед Юли 24, 2005 4:01 pm ] |
| Заглавие: | |
Нормално Точно така се очаква да се държи. If (tintiri-mintiri) { bla-bla1; bla-bla2; } else ..... |
|
| Автор: | Wise [ Пон Юли 25, 2005 4:10 pm ] |
| Заглавие: | |
Хм - много странен асемблер бе хора. Да не си говорите за С някакво?? Или съм много изостанал |
|
| Автор: | ToHu [ Сря Юли 27, 2005 6:26 pm ] |
| Заглавие: | |
И на мен това ми е чудно, новия мплаб да не разбира от if и > |
|
| Автор: | Dimitar [ Сря Юли 27, 2005 6:42 pm ] |
| Заглавие: | |
Това май е някакъв вид макро-асемблер, и във старите MPLab-и го имаше ама никога несъм го ползвал. |
|
| Автор: | SurchO [ Сря Юли 27, 2005 11:48 pm ] |
| Заглавие: | |
Ами условието си го изпълнява коректно но след това не мога да накарам променливата да си промени стойността. В самият хелп на МПЛАБ я има описана като диеректива а и в доста готови програми сам я виждал да я ползват |
|
| Автор: | ДедоБоре [ Сря Юли 27, 2005 11:57 pm ] |
| Заглавие: | |
е, ако е макро асемблер, тогава if-а трябва да е за условно асемблиране, а не за асемблиране на условия и ако се иска удобство при писане (ако някой ви каже, че на асемблер се пише удобно, го ударете с ръководството за асемблерния език) защо не се ползва С? първото крайъгълно правило в програмирането е написания код да е разбираем от друг програмист. това винаги помага кода да се разбира дори и от написалия го. |
|
| Автор: | SurchO [ Чет Юли 28, 2005 12:14 am ] |
| Заглавие: | |
е хубаво че C e по-удобен от асемблер и го разбират повече хора. До въпроса с i+=1 или i++ на мен ми е все едно кое ще ползвам като и двете не работят в случая. И в края някой ще даде ли отговор как се прави това а не да ме пита защо ми е и защо не го направя на друг програмен език. |
|
| Автор: | Predator_MF [ Чет Юли 28, 2005 1:01 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Аве братчед, нали това ти обяснява bateAz™...
При тоя горния код е нормално да се изпълни само do something при условие expression = True. Останалото в кода се изпълнява винаги. За да затвориш повече от една инструкция която да се изпълнява при условие expression = True трябва да изполваш къдрави скоби (поне така е правилото за писане на C):
Това не ми прилича на условно компилиране, синтаксиса в MPASM е #IF... Затова когато се опитаме да ти помогнем, те питаме какво точно искаш да постигнеш и искаме да видим код. Няма да ти го откраднем нито да злоупотребяваме с него. А съветите за C на ДедоБоре© са съвсем уместни - Какъв по дяволите е тоя мелез между C и ASM. Първо - никъде не споменаваш за кой асемблер става въпрос...какво IDE и какъв компилатор ползваш |
|||||||||||||||||||
| Автор: | HCL [ Чет Юли 28, 2005 1:40 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Както си го написал кода, променливата си променя стойноста до 5 (едно завъртане на цикъла) и после програмата ти изглежда така
И както се сещаш това те вкарва в безкраен цикъл. Условието след if вече не е изпълнено и променливата не се променя повече |
|||||||||||||||||||
| Автор: | SurchO [ Пет Юли 29, 2005 4:06 pm ] |
| Заглавие: | |
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Точно така се очаква да се държи. Трябва да е написано така : If (tintiri-mintiri) { bla-bla1; bla-bla2; } else ..... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, If (i<limit) { i++ nop } else Error[108] F:\ASM.ASM 20 : Illegal character ({) |
|
| Автор: | Predator_MF [ Пет Юли 29, 2005 4:20 pm ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Автор: | SurchO [ Нед Юли 31, 2005 8:01 pm ] |
| Заглавие: | |
Егати ужаса............. i=0 while i< 4 nop nop i += 1 endw написано така цикъла се повтаря 4 пъти а написано така... i=0 while i< 4 nop i += 1 endw не се повтаря нито веднъж |
|
| Автор: | Predator_MF [ Нед Юли 31, 2005 8:13 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Ти обаче или не четеш кво ти пиша или не разбираш.... Предишния ми пост пише:
Преведено на наш мил език значи
Ако това нищо не ти говори, ще ти го и обясня. При това асемблиране ако КОМПИЛАТОРА срещне условие "1" (т.е. ако i>=4) ще се асемблира всичко в тялото на фунцкията IF, в твоя случай първата инструкция след IF - nop!!!! Само че ти си дефинирал че и е равно на 4, тоест това условие никога няма да е вярно, i не е по-малко от 4. Тоест това което следва след IF-а никога няма да се компилира, все едно че не си го написал. |
|||||||||||||||||||
| Автор: | SurchO [ Нед Юли 31, 2005 8:28 pm ] |
| Заглавие: | |
това с IF го схванах но не ми побира плиткиа акъл защо например в цикъла с While ако условието е вярно и има 2 или повече инструкции в него той работи коректно ако е само една не се изпълнява ? |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|