pettter´s noob faq...

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 00:00

pettter´s noob faq...

#1 Příspěvek od pettter »

Sorry že otravujem, ale fakt sa na assembler nemám koho spýtať. Všetci (teda žiaľ iba jeden) okolo mňa čo poznám a programujú tak sa vŕtajú v C...
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]
Naposledy upravil(a) pettter dne 30 bře 2018, 17:43, celkem upraveno 2 x.
termit256
Příspěvky: 10029
Registrován: 06 pro 2007, 00:00

#2 Příspěvek od termit256 »

Reprezentuje jen to cislo. Pokud chces adresu, musis to pettter pouzit v instrukci tak jako adresu.
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.
Uživatelský avatar
fero_b
Příspěvky: 581
Registrován: 17 kvě 2004, 00:00
Bydliště: Kosice

#3 Příspěvek od fero_b »

EQU je to iste ako v C #define, preprocesor prejde kodom a nahradi v prvom prechode vsetky Petter cislom 0x00 a Jozo cislom 0xFF, a dalej ako mas popisane vyssie, zavisi ako sa toto cislo interpretuje v danom kontexte zavisi od daneho asembleru (moze to predstavovat konstatnu, adresu, offset..)
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#4 Příspěvek od FHonza »

u AVR je to takhle:

definuje konstantu s hodnotou nula
.EQU Petter = 0

vyhradí jeden byte v RAM
Petter: .BYTE 1
pak třeba přesun do registru
LDI R28, LOW(Petter)

uloží konstantu do FLASH nebo EEPROM (nutno použít správný segment)
.DB Petter = 0
Uživatelský avatar
Hill
Administrátor
Příspěvky: 21232
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#5 Příspěvek od Hill »

Assembler je přece jazyk symbolických adres. Jména Pettter i Jožo takové adresy symbolizují, nepotřebuji je tedy pro další sestavování programu znát, překladač si je podle jmen přiřadí sám. Ostatně ty konkrétně přiřazené adresy najdeš po skončení překladu na závěr ve výpisu tabulky adres.
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.
Těm, kdo si nevybírají odpovědi na soukromé zprávy, už příště neodpovím. Tak.
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#6 Příspěvek od FHonza »

Bylo by dobré napsat, který konkrétní assembler řešíš. Evidentně je to pro různé µC jiné.
termit256
Příspěvky: 10029
Registrován: 06 pro 2007, 00:00

#7 Příspěvek od termit256 »

Ja myslim ze to funguje vsude stejne.
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.
Naposledy upravil(a) termit256 dne 27 úno 2018, 11:33, celkem upraveno 1 x.
Uživatelský avatar
rnbw
Příspěvky: 37414
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#8 Příspěvek od rnbw »

EQU nie je instrukcia procesora ale definicia konstanty v jazyku. Najlepsie to napisal fero_b - vyskyt danej konstanty v programe sa nahradi jej hodnotou.

DB tiez nie je instrukcia, ale definicia bajtu v pamati.
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#9 Příspěvek od FHonza »

S tím souhlasím, ale reagoval jsem na Hillovo
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, ...)
Uživatelský avatar
Hill
Administrátor
Příspěvky: 21232
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#10 Příspěvek od Hill »

Ale v podstatě bylo, jen už si nepamatuju, jak to kdo tehdy pojmenovával: funkce DB nebo DW překladači prostě řekla "na tu adresu, která právě při překladu vyšla první volná, zapiš konstantu uvedenou jako argument a posuň čítač asres o jednu resp. o dvě nahoru". Adresa se zde neuváděla, ta při překladu vyšla automaticky jako první volná, když na DB nebo DW kompilátor narazil.
Protože musela mít jméno, zkompilovaný program pak pracoval s touto konkrétní adresou (nebo jejich párem).
Těm, kdo si nevybírají odpovědi na soukromé zprávy, už příště neodpovím. Tak.
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#11 Příspěvek od lesana87 »

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.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#12 Příspěvek od ZdenekHQ »

To mně připomíná krvavé bitky s mým zákazníkem, co se na starý kolena snaží programovat v JSA a nedokáže pochopit, že překladači v základním nastavení je srdečně jedno, jestli je to equ, data, dokonce i bit, pořád je to jen číslo. Konkrétní použití z toho dělá až instrukce, t.j. jestli je tam :

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á.
Pro moje oslovení klidně použijte jméno Zdeněk
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[?
]
Uživatelský avatar
Rako
Příspěvky: 40
Registrován: 29 bře 2014, 00:00

#13 Příspěvek od Rako »

Tiež sa rehocem, čo za bludy tu inžineri vygrcli. Mládenci dnes vám to natrela ženská. (1:0) pre Lesanu, Lesana :prst:
Uživatelský avatar
Hill
Administrátor
Příspěvky: 21232
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#14 Příspěvek od Hill »

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.
Těm, kdo si nevybírají odpovědi na soukromé zprávy, už příště neodpovím. Tak.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#15 Příspěvek od ZdenekHQ »

DB zapíše data do programové paměti (nikoliv do RAM), ale pokud před ně nedáš label, nikdy se k těm datům nedostaneš (i když i tady existuje výjimka).

Je to dobrý třeba na texty, předdefinované konstanty atd. Jen to obecně nelze přepsat...
Pro moje oslovení klidně použijte jméno Zdeněk
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[?
]
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“