| Автор |
Съобщение |
|
traqn_savov
Ранг: Новодошъл
Регистриран на: Чет Окт 01, 2009 8:50 am Мнения: 125 Местоположение: Varna
|
 PIC как да сравня по голямо число с асемблер
Който разбира от програмиране на C ще му стане ясно.
Искам да направя това но с асемблер
пробвах една магия  от си да го обърна на асемблер и после да го дизасемблирам (моля не питайте защо) Дизасемблатора създаде следната уникална комбинация if(a < b);
_________________http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..
Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.
|
| Съб Окт 30, 2010 9:52 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Хе, хе. RTFM
Вадиш от число А число В и проверяваш флаговете в STATUS - C,DC,Z
Carry
Digit Carry
Zero
Нещо такова :
MOVLW 'число А'
MOVWF 'адрес'
MOVLW 'число В'
SUBWF 'адрес'
и след това си проверяваш съответния бит в STATUS регистъра според това което те интересува.
Тия неща ги пише навсякъде.
Ако искаш да сравняваш по-големи числа става с малко повече инструкции, но принципа е същия.
Едит : както виждаш въобще не е уникална - ти ако беше компютър какво щеше да им правиш на числата - на кантар ли ще ги слагаш 
|
| Съб Окт 30, 2010 10:24 pm |
|
 |
|
traqn_savov
Ранг: Новодошъл
Регистриран на: Чет Окт 01, 2009 8:50 am Мнения: 125 Местоположение: Varna
|
Всъщност само осем битово е числото..
Трябва ми за едно меню, един бутон ще върти менюто така променливата ID_menu ще се увеличава с 1 тоест при всяко натискане ще става ID_menu = ID_menu + 1 но ми трябва ID_menu да не минава стойността 4
И вече според съдържанието на ID_menu ще си направя програмната логика..
Абе забавления общо взето... 
_________________http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..
Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.
|
| Съб Окт 30, 2010 10:43 pm |
|
 |
|
sigkill
Ранг: Популярен
Регистриран на: Чет Ное 29, 2007 2:22 pm Мнения: 309 Местоположение: Vratsa
|
Проверяваш си го 4 пъти бутончето и избираш следващото меню , като подминеш четвъртотото се врщаш в началото . А може и да си проверяваш бутончето вътре в меню-тата и да викаш следващото а от последното извикваш първото ...
Aко все пак искаш да си затриеш един байт просто при всяко натискане на бутончето го инкрементираш , проверяваш б.0 и б.1 и си извикваш съответното меню , старшите битчета не те бъркат ама хич 
|
| Съб Окт 30, 2010 11:01 pm |
|
 |
|
traqn_savov
Ранг: Новодошъл
Регистриран на: Чет Окт 01, 2009 8:50 am Мнения: 125 Местоположение: Varna
|
другият начин е да го инициализирам в началото на стойност 4 и при всяко натискане да го декрементирам с едно докато не стане 0, а като стане 0 се отпраща пак на реда който го установява с стойност 4
но и твоето е идея също...
Ще я разгледам утре..
_________________http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..
Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.
|
| Съб Окт 30, 2010 11:24 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
за по-простите неща има едно просто решение. HI-Tech C. Създаваш си проект с него и правиш:
После избираш View->Disassembly Listing.
|
| Нед Окт 31, 2010 1:52 am |
|
 |
|
traqn_savov
Ранг: Новодошъл
Регистриран на: Чет Окт 01, 2009 8:50 am Мнения: 125 Местоположение: Varna
|
За сега това написах, не съм го пробвал..
Едит даже открих грешка трябва да променя етикетите иначе ще се препокрият
_________________http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..
Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.
|
| Нед Окт 31, 2010 10:31 am |
|
 |
|
Gosho75
Ранг: Минаващ
Регистриран на: Чет Ное 16, 2006 1:45 pm Мнения: 18 Местоположение: Sofia
|
Ето ти една полезна програмка, дето прави тези сравнения на асм. Пишеш примерно IF A > B goto ET1 и тя ти генерира кода за сравнение в клипборда. После пасте в МПЛАБ.
|
| Сря Ное 03, 2010 10:57 am |
|
 |
|
Tisho
Ранг: Форумен бог
Регистриран на: Пон Ное 22, 2004 11:24 pm Мнения: 1923 Местоположение: Габрово
|
М'че пиковете нямат ли си команда асемблерска с която сравняват две числа? Върти ми се в главата, че май имаше нещо такова. Сравни това с онова и ако са еднакви презкочи един ред, ако се не лъжа.
|
| Пет Ное 05, 2010 6:57 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Бе като гледам добрия му стил на коментиране май най-важното за него е да схване
принципа на сравненията, оттам ще се оправи и сам.
Та принципът е елементарен: ако трябва >, = и < да се знаят, едното число се вади от другото.
Ако числата са без знак преносът в резултата казва кое е по-голямото; ако са със
знак знакът на резултата го казва. Не знам пиковете какви флагове имат ама тия
трябва да ги има някак. Това правят cmp инструкциите по разните процесори, само
дето не пишат резултата по регистри (което пък ги ограничава по размер, ако човек
иска да сравни 128 бита примерно ще трябва да направи 16 байта изваждане, с cmp
не става).
Ако сравнението е само за равенство, и EOR (aka XOR) стига.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Ное 05, 2010 7:22 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Ако е за равенство с XOR става. Имат флагове, малко по-горе ги писах. Ама простото сравняване става ако е един байт. За повече битове вадиш "до безкрай"
|
| Пет Ное 05, 2010 9:28 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Е то и за равенство при по-дълга от процесорната дума трябва да влачиш резултата от останалите
EOR-ове, примерно трупаш ги с OR в отделен регистър и на края проверяваш нула ли е.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Съб Ное 06, 2010 12:54 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Да де, то няма как да е различно, особенно при RISC архитектури ...
|
| Съб Ное 06, 2010 9:35 am |
|
 |
|
traqn_savov
Ранг: Новодошъл
Регистриран на: Чет Окт 01, 2009 8:50 am Мнения: 125 Местоположение: Varna
|
Пиковете нямат инструкция която да сравнява за по голямо или по малко...
Това е много голям минус
Още се мъча де с това, доста е трудно за представяне...
Иначе ако се чудите какво правя..  мъча се нещо такова да направя. http://www.obd2-bg.com/komutator/
половината софтуер е написан и е тестван работи..
до тук добре, ама графичният интерфейс е греда, прегледах тези в нета правените повечето са за забавление да изписват числа..  ама не ми вършат работа...
Ама аз съм тъп и упорит де продължавам да се мъча... 
_________________http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..
Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.
|
| Сря Ное 10, 2010 6:13 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Що да е лошо? Както казах, това все пак е RISC процесор. За смекта на това 4 инструкции се изпълняват за 4 клока (99%  )
И затова повечето хора си ползват асемблера само за времево критични задачи или когато компилатора бълва глупости при разни омагьосани задачки. Всичко останало на C, Паскал, Бейсик и кой на квот му е удобно.
Като искаш да има инструкции за всичко вземай някой Pentium и джари.
|
| Сря Ное 10, 2010 7:01 pm |
|
|