pettter´s noob faq...
Moderátor: Moderátoři
pettter´s noob faq...
Otázka: direktíva EQU napr.
Pettter EQU 0x00
znamená, že slovo Pettter nesie hodnotu nula (čo celkom vystihuje realitu), alebo že je za slovom Pettter obsah v bunke pameti s adresou 00h?
Alebo:
Jožo EQU 0xFF (sorry Jožo)
znamená že slovo Jožo reprezentuje číslo s hodnotou 255, alebo je to adresa, za ktorou je bunka v pameti a hodnota tej bunky je daná inicializáciou premenných...
Teda je direktíva konštanta s hodnotou, alebo odkaz na adresu? Som s toho akýsi vynulovaný...
Ď za pomoc.
Sa PICnem...[/u]
Nevim jaky MCU programujes, ale napr u x51 znamena
mov a,pettter nahrajes do akumulatoru obsah bunky s adresou pettter
mov a,#pettter nahrajes do akumulatoru hodnotu pettter
snad jsem to napsal srozumitelne.
Instrukcí EQU (nebo DB pro ASM80) jsem na příslušnou adresu vložil konkrétní počáteční hodnotu, kterou ale v průběhu programu můžu změnit tím, že příkazem MOV (nebo LD pro Z80 Assembler) do ní z registru procesoru přepíšu jeho momentální obsah. Obdobně z této adresy můžu poslední uloženou hodnotu přepsat do některého z registrů procesoru.
Kdyz napises treba:
slepice equ 0x80h
pocet equ 20
instrukci
mov slepice,#pocet
nahrajes do bunky 80h cislo 20
muzes tak pojmenovat prakticky cokoliv, treba
vystup equ p1.21
pojmenujes pin p1.21 a muzes pak v programu pouzivat prehlednejsi nazev vystup misto cisla portu apod. Vyhodu to ma taky v tom, ze pokud chces zmenit port za jiny, prepises to jen v radku s equ a nemusis vyhledavat vsechny vyskyty cisla portu (cehokoliv jineho) v programu.
Instrukcí EQU (nebo DB pro ASM80) jsem na příslušnou adresu vložil konkrétní počáteční hodnotu...
V těch nemnoha assemblerech co si pamatuji, bylo vždy EQU definice konstanty (jako v C #define, v pascalu const, ...) ale nikdy to nebylo vyhrazení paměti (na rozdíl od DB, DW, ...)
Protože musela mít jméno, zkompilovaný program pak pracoval s touto konkrétní adresou (nebo jejich párem).
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
mov a,Petter
nebo
mov a,#Petter
a podobně (nakonec tento případ byl už několikrát zmíněn)
Pak dělá školácké chyby a všechno to svádí na mě a na překladač. A nejraději se topí v tom, že si v přerušení přepisuje registry, acc, C atd. Ale opět za to můžu já.
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
lesana87 píše:Pleteš se Hille, EQU nikdy není vyhrazení místa v paměti, je to zkratka equals, česky rovná se, v některých asemblerech se místo EQU dá použít =. Je to definice symbolické konstanty.
Díky, žes to upřesnila, fakt už to neumím popsat líp, však už jsem z programování v ASM80 za těch 25 let hodně zapomněl. Hlavně názvosloví, tehdy jsem se o tom neměl ani s kým bavit.
Samozřejmě s tebou souhlasím.
Ovšem nikdy jsem netvrdil, že se definicí DB vyhrazuje místo v pamětí. Jen tolik, že překladač během překladu uloží na první volnou adresu takto definované číslo a jeho adresu uloží do tabulky symbolických adres, s nimiž pracuje, takže ve zkompilovaném programu nic nebrání modifikaci obsahu této adresy.
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Je to dobrý třeba na texty, předdefinované konstanty atd. Jen to obecně nelze přepsat...
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]