Co jsou pseudoinstrukce, jak se používají a kde je nalézt?

Dobrý den,

můžete mi někdo, prosím, vysvětlit, co jsou to pseudoinstrukce, jak se používají a kde je lze nalézt?

Jako příklad bych uvedl SKPNZ

Díky!

Vl.

:arrow_right: administrator: přejmenováno z "Pseudoinstrukce"

To se ptáš nás ? Ty jsi přeci učitel. :smiley:

S otázkou ti neporadím, nepoužívám je…

No to jsi teda dobrej!
Já myslel, že bez pseudoinstrukcí, tedy vlastně direktiv, nedokážu ani napsat program v assembleru. Kdysi mi říkali, že pseudoinstrukce jsou instrukce pro překladač. Třeba takový ORG, EQU, INCLUDE, CBLOCK, ENDC atp., to všechno jsou dle mých chabých znalostí pseudoinstrukce - direktivy.
Že vy si děláte jen tak při sobotě z lidí legraci?

To bylo na mě, nebo na Vlastu…

Cau

napr: CBLOCK,ENDC,CONFIG,DE,DEFINE,DT,DW,EQU,ERROR, ENDIF,INCLUDE,LIST, NOLIST,ORG, ,UNDEFINE,BANKSEL,PAGESEL,BANKISEL,MOVFW …

Pseudoinstrukce sou i v Cku a urcite je pouzivas
napr: ERRORLEVEL,MACRO, IFDEF, IFNDEF, ELSE, ENDIF,SET,CONSTANT, IF, LOCAL…

Vidím, že jsem trošku zvedl adrenalin … :slight_smile:

Takže popořádku - nejprve pro Petra:
Znám dva druhy učitelů: jedni se tváří, že všechno znají a umí a pak jim to občas nevyjde a trhnou si u děcek ostudu. Pak jsou ti druzí, kteří se nebojí přiznat, že něco neznají a nebojí se na to zeptat. Já patřím k těm druhým.

Pro ostatní:
Výraz “directivum” samozřejmě znám a ty běžně, jako ORG, END, EQU, #DEFINE apod. samozřejmě používám. Že “directivum” = “pseudoinstrukce” se však dovídám opravdu až nyní.

Nicméně díky za nakopnutí - donutilo mne podívat se do manuálu MPASM.
A možná bych si dovolil trošku oponovat, protože si nemyslím, že “directivum” = “pseudoinstrukce”. Podle zmíněného manuálu jsou “directiva” řádné - tedy podporované instrukce překladače (viz str. 53/kap. 4), kdežto pseudoinstrukce jsou alternativní mnemonika ke standardní instrukční sadě a jak je v manuálu uvedeno, NEJSOU DOPORUČOVÁNY PRO NOVÉ KONSTRUKCE!" (str.250/příloha A5).

Ptal jsem se na ně proto, protože jsem se např. s SKPNZ setkal v matematických rutinách na internetu, které jsem chtěl použít. Ze syntaxe příkazu je vcelku jasné, co dělá, ale přece jen jsem si nebyl jistý, zda se jedná o oficiální instrukce, které jsou třeba jen nedokumentované nebo zda je dobré se jim vyhnout.

Mezi námi - SKPNZ je určitě srozumitelnější tvar než BTFSS, který nahrazuje! Proto jsem si říkal, že možná existuje více podobných srozumitelnějších instrukcí, které by zvýšily srozumitelnost programu.

Tož tak … :slight_smile:.

Vl.

Troufám si tvrdit, že direktivy a pseudoinstrukce byly na světě v době, kdy po Microchipu neštěkl ani pes. Vycházet při výkladu těchto pojmů z manuálu MPASM tě nemusí dovést k obecně uznávaným výkladům. Ale to je tvůj problém. Ty tu někde vidíš adrenalin? Já jen ospalý sobotní podvečer. :smiley:

Jankop: Ano, asi máš pravdu.

Ale od toho jsou tyto fóry, aby se pojmy vyjasnily, že? :slight_smile:

Dík a dobrou noc!

Vl.

Jestli se vše co jsi napsal jmenuje pseudoinstrukce, pak ano.

Když už jsme u toho, tak i já mám dotaz, co je to IOCA, IOCB. Mám to z jednoho zdrojáku pro 12F629.

LIST P=12F675, R=DEC
INCLUDE<P12F675.INC>

__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

#define UART GPIO,0 ; UART pin

org	0x00
GOTO	INIT

;-------------------------------------------------

INIT MOVLW 0x7 ; komparator off
MOVWF CMCON
BSF STATUS,RP0
BSF IOCB,0 ; TATO INSTRUKCE !!!
BCF STATUS,RP0
CLRF UARTROT
BSF INTCON,GPIE
BSF INTCON,GIE
GOTO START

… atd.

IOCA/B jsou registry, budu hadat aniz bych koukal do manualu (konfiguracni asi I/O portu)

BSF - set bit

IOC je konfigurační registr funkce Interrupt On Change (konfiguruje se tím, na kterých vývodech to bude zapnuté), nicméně žádný IOCA/IOCB se u 12F675 podle datasheetu nevyskytuje. Takže je to buď nějaká vlastní definice, nebo to není MPASM ale něco jiného.

Tak jsem ještě vygůglil následující. IOCx,y značí zřejmě opravdu nastavení přerušení na portu nebo je to nějaká sdružená instrukce. “IOCA” = PORTA, IOCB = PORTB, atd. a “y” je nastavení konkrétního bitu. Jen mě zaráží, že překladač to zkousne, ale v nápovědě jsem nic nenašel. Možná jsem se jen blbě díval.

Jenže on uváděl kód pro 12F675 ve kterém to měl, a 12F675 nemá žádné dva porty A a B, ale má jen jeden - GPIO.

Tak jsem ještě pro zajímavost nahlédl do INC souboru, a tím se to celé vysvětlilo: Jsou tam zdvojené definice pro IOC a IOCB (žádný IOCA se tam nevyskytuje) které jsou shodné, tzn IOC a IOCB je jedno a to samé. Zřejmě definice kvůli kompatibilitě se starším kódem, asi se registr IOC dřív jmenoval IOCB.

Prosim co je na tom SKPNZ srozumitelnější (protoze neco neni nula??), podle me je : BTFSS => Bit-Test-iF-Set=Skip uplne stejne ale nejak me to asi unika … asi nemam vlohy na mpasm…

Promin nejak jsem neodpovedel … Ano existuje mnoho jinych a srozumitelnejsich nez je ASM … treba C … mozna “if” ??

BTFSS, MOVWF a podobné tvary instrukcí PIC assembleru byly jedním z důvodů, proč jsem s PICama nikdy nezačal a pustil jsem se do AVR. U assembleru PICů jsem si málem vykloubil oko. Pro přechod z 8051-ky (obzvlášť, když jsem předtím programoval v asm pro Z80) byl assembler pro AVRko mnohem srozumitelnější a přehlednější. Programovat jednočipy v C je sice jednodušší (a taky ho ovládám), ale připadá mi to jako jít s kanónem na vrabce. Navíc v assembleru mám HW plně pod kontrolou…

P.S.: Příspěvek jsem upravil, protože nechci rozdmýchávat nesmyslné debaty o tom, který procesor je lepší nebo horší. Jak psal Mahoney (o příspěvek níže), každému vyhovuje něco jiného. Díky tomu, jak vypadal assembler u Z80, 8080, 8086, 8051 atd. mi PIC syntaxe nevyhovuje, to je vše. Tímto se omlouvám všem, kterých jsem se dotknul nevhodným výběrem slov …

Ach jo, takže další z nekonečných flames? Věřím že ne. Jasně, pokud jsi předtím dělal s intelovskou syntaxí, tak se celkem dá chápat, že se ti ASM pro PICy moc nezamlouvá - nicméně buď trochu ohleduplný a nenazývej to zvrhlostí. Jsou lidi (a je jich dost), kterým se s tím dělá dobře, protože např. nejsou zatíženi minulostí, nebo je to bližší jejich stylu myšlení, nebo to byl jejich první procesor a jazyk a nic jiného neznají, nebo tisíc dalších důvodů… a tihle lidé ti přesto neříkají třeba “co na těch nekonečných LD/ST máš, vždyť je daleko lepší to dělat přímo nad registrem…” atd. Jsi v sekci Microchip, tak trochu taktu prosím. Každý procesor má své přednosti i své mouchy - ovšem přesto “k vám” do AVR sekce nelozíme ukazovat na chyby těch vašich, prostě to není důvod :bulb:

Musím trochu podpořit "šťouru Mahoneyho :smiley: " za jeho příspěvek, který větičkou o nezatíženosti minulostí vypíchl vše podstatné a jako poznámka to sedí.
Já bych poznamenal spíše něco jiného. Nechci teď propagovat literaturu v češtině, na které jsem pracoval, ale určitě by nebylo od věci nejprve si něco takového přečíst i třeba v originále. Na netu toho je dost i v češtině. Tím jsem však nechtěl nabudit chytlavky typu - “s takovými dotazy sem nelez”, protože od toho tu prostě tohle fórum je a lidem je třeba pomáhat, pokud problém pálí díru do mozku.
Vrátím se však tomu hlavnímu. Tím je poznámka od Balůa - proč s C na jednočipy. Inu já to chápu tak, že pokud pracuješ s céčkem, nemusíš znát do detailu konstrukci mikrokontroléru. Opakuji kvůli chytlavkám - do detailu. Spoustu věcí totiž řeší céčko samo a napsat program pro rozblikání diody je opravdu dílem pár minut. Já céčko nepovažuji za kanón na vrabce, i když chápu danou nadsázku. Ono totiž s přechodem na vyšší řady ani jiná cesta není. Určitě je zde mnoho lidí, kteří pracují s čipy PIC32MX a jak nedávno právě Mahoney připomně, je tu řada PIC32MZ a vím, že se pracuje na dalších novinkách. Neúprosný zákon trhu říká, že někam vrazím korunu a zpátky musím mít tři, jinak nemá úsilí cenu (amerikanofilové prominou, přenesl jsem výraz o dolaru). Ono totiž spějeme tomu, že vývoj pokročil tak daleko, že ceny nových obvodů jsou srovnatelné s cenami nižších řad. Mikrokontrolér s 1-2 MB flashky a až 0,5 MB RAM s výkonem 330 DMIPS se budou nabízet v ceně už mezi 6 - 7 USD. Pokud porovnáme s nižšími řadami, tak je to neskutečné, protože PIC32MZ je neskutečně nabitá technologiemi.
Ale chci uzavřít poznámkou - kdo by se s tím programoval v assembleru? Nejtenší příručka, kterou jsem držel v ruce, měla 240 stran a to byl pouze úvodní manuál.
Takže osobně razím zásadu, proč do plošáku nevrazit PIC24 nebo rovnou PIC32, když jsou cenově rozumné, optimalizované pro céčko a nabušené moduly, o kterých se může PIC16F84A jenom zdát?
Myslím si, že díky pohybu vpřed se začnou stírat i rozdíly mezi mikrokontroléry, jako takovými. A bude to právě vliv céčka.
A odpověď na pseudoinstrukce? Jsou to v podstatě makra, kterými jsem si schopen trochu usnadnit práci. Osobně s nimi však nepracuji. Nevidím v nich nějaký extrémní přínos.