|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 10:48 am
| Автор |
Съобщение |
|
SurchO
Ранг: Минаващ
Регистриран на: Вто Апр 05, 2005 9:34 am Мнения: 88
|
 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
|
| Нед Юли 24, 2005 3:29 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Нормално
Точно така се очаква да се държи.  Трябва да е написано така :
If (tintiri-mintiri) {
bla-bla1;
bla-bla2;
} else .....
|
| Нед Юли 24, 2005 4:01 pm |
|
 |
|
Wise
Ранг: Форумен бог
Регистриран на: Нед Дек 19, 2004 6:26 pm Мнения: 1628 Местоположение: Сливен
|
Хм - много странен асемблер бе хора.
Да не си говорите за С някакво?? Или съм много изостанал 
|
| Пон Юли 25, 2005 4:10 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
И на мен това ми е чудно, новия мплаб да не разбира от if и > 
|
| Сря Юли 27, 2005 6:26 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Това май е някакъв вид макро-асемблер, и във старите MPLab-и го имаше ама никога несъм го ползвал.
|
| Сря Юли 27, 2005 6:42 pm |
|
 |
|
SurchO
Ранг: Минаващ
Регистриран на: Вто Апр 05, 2005 9:34 am Мнения: 88
|
Ами условието си го изпълнява коректно но след това не мога да накарам променливата да си промени стойността. В самият хелп на МПЛАБ я има описана като диеректива а и в доста готови програми сам я виждал да я ползват 
|
| Сря Юли 27, 2005 11:48 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
е, ако е макро асемблер, тогава if-а трябва да е за условно асемблиране, а не за асемблиране на условия  много тъпо е да пишеш макрос, който да се казва if  пък и да се пише макрос >, <, =. но и конструкцията i+=1 е доста подозрителна. SurchO, интересно ми е, правиш ли разлика между инкрементиране, пред- и пос-инкрементиране? каква е разликата с i++ ?
и ако се иска удобство при писане (ако някой ви каже, че на асемблер се пише удобно, го ударете с ръководството за асемблерния език) защо не се ползва С?
първото крайъгълно правило в програмирането е написания код да е разбираем от друг програмист. това винаги помага кода да се разбира дори и от написалия го.
|
| Сря Юли 27, 2005 11:57 pm |
|
 |
|
SurchO
Ранг: Минаващ
Регистриран на: Вто Апр 05, 2005 9:34 am Мнения: 88
|
е хубаво че C e по-удобен от асемблер и го разбират повече хора. До въпроса с i+=1 или i++ на мен ми е все едно кое ще ползвам като и двете не работят в случая. И в края някой ще даде ли отговор как се прави това а не да ме пита защо ми е и защо не го направя на друг програмен език. 
|
| Чет Юли 28, 2005 12:14 am |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Аве братчед, нали това ти обяснява bateAz™...
При тоя горния код е нормално да се изпълни само do something при условие expression = True. Останалото в кода се изпълнява винаги. За да затвориш повече от една инструкция която да се изпълнява при условие expression = True трябва да изполваш къдрави скоби (поне така е правилото за писане на C):
Това не ми прилича на условно компилиране, синтаксиса в MPASM е #IF... Затова когато се опитаме да ти помогнем, те питаме какво точно искаш да постигнеш и искаме да видим код. Няма да ти го откраднем нито да злоупотребяваме с него. А съветите за C на ДедоБоре© са съвсем уместни - Какъв по дяволите е тоя мелез между C и ASM. Първо - никъде не споменаваш за кой асемблер става въпрос...какво IDE и какъв компилатор ползваш  Съвсем нормално е да получиш неясен отговор при некоректен въпрос.
Последна промяна Predator_MF на Пет Юли 29, 2005 4:22 pm, променена общо 1 път
|
| Чет Юли 28, 2005 1:01 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Както си го написал кода, променливата си променя стойноста до 5 (едно завъртане на цикъла) и после програмата ти изглежда така И както се сещаш това те вкарва в безкраен цикъл. Условието след if вече не е изпълнено и променливата не се променя повече  , но това няма значение защото както писаха останалите goto-то се намира извън онсега на if-а. T.е за да вървят нещата слагай скобите.
|
| Чет Юли 28, 2005 1:40 am |
|
 |
|
SurchO
Ранг: Минаващ
Регистриран на: Вто Апр 05, 2005 9:34 am Мнения: 88
|
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Точно така се очаква да се държи. Трябва да е написано така :
If (tintiri-mintiri) {
bla-bla1;
bla-bla2;
} else .....
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
If (i<limit) {
i++
nop
} else
Error[108] F:\ASM.ASM 20 : Illegal character ({)
|
| Пет Юли 29, 2005 4:06 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
|
| Пет Юли 29, 2005 4:20 pm |
|
 |
|
SurchO
Ранг: Минаващ
Регистриран на: Вто Апр 05, 2005 9:34 am Мнения: 88
|
Егати ужаса.............
i=0
while i< 4
nop
nop
i += 1
endw
написано така цикъла се повтаря 4 пъти а написано така...
i=0
while i< 4
nop
i += 1
endw
не се повтаря нито веднъж 
|
| Нед Юли 31, 2005 8:01 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Ти обаче или не четеш кво ти пиша или не разбираш.... Предишния ми пост пише:
Преведено на наш мил език значи .
Ако това нищо не ти говори, ще ти го и обясня. При това асемблиране ако КОМПИЛАТОРА срещне условие "1" (т.е. ако i>=4) ще се асемблира всичко в тялото на фунцкията IF, в твоя случай първата инструкция след IF - nop!!!! Само че ти си дефинирал че и е равно на 4, тоест това условие никога няма да е вярно, i не е по-малко от 4. Тоест това което следва след IF-а никога няма да се компилира, все едно че не си го написал.
|
| Нед Юли 31, 2005 8:13 pm |
|
 |
|
SurchO
Ранг: Минаващ
Регистриран на: Вто Апр 05, 2005 9:34 am Мнения: 88
|
това с IF го схванах но не ми побира плиткиа акъл защо например в цикъла с While ако условието е вярно и има 2 или повече инструкции в него той работи коректно ако е само една не се изпълнява ?
|
| Нед Юли 31, 2005 8:28 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 6 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|