logonanoSoft2.gif, 1 kB

Lekcia č.3 Preklad assemblerovského programu.

Úloha:

Čo budeme potrebovať:

Osobný počítač Vyhovuje akýkoľvek PC aj veľmi chabej konfigurácie. Operačný systém akýkoľvek od MSDOSu až po posledný Windows, alebo aj Linux
Asseblerovský prekladač 8051 Doporučujem tento prekladač, pretože sa mi zatiaľ najviac páči zo všetkých free prekladačov. Má veľa možností, ktoré oceníte až pri profesionálnej práci. Má dobrý manuál. Beži pod MSDOS, WINDOWS a LINUX.
simulačný program pre MCU 8051 Simulátor použijeme pre overenie činnosti preloženého programu bez nutnosti práce s hardware. Tu je odkaz na môj vlastný simulátor, ale môže to býť hocijaký.

Teoretická príprava:

Kedže sme zatiaľ iba v tretej lekcii neovládame programovanie mikroradiča 8051. Zistili sme že k hotovému preloženému programu sa dá pomerne ľahko prísť na internetových stránkach venovaných tomuto mikroradiču. Taktiež tu môžeme nájsť aj programy v zdrojovom tvare. Výhodou týchto programov je to že nám ukážu ako to robia iný, ktorý sa programovaním mikroradičov už nejaký ten piatok zaoberajú. V podstate môžeme naraziť na dva programovacie jazyky pre mikroradič 8051.

Jazyk C
Je to vyšší programovací jazyk ktorý sa dá implementovať pre ľubovolný typ procesora, tak prečo by to nešlo aj pre typ 8051. Programovaním mikroradičov v C sa nebudem zaoberať.

Jazyk assembler
Assembler je najnižší programovací jazyk. Jeho nevýhodou je že program je neprenositelný. Program napísaný pre 8051 nepôjde na žiadnom inom mikroradiči, ktorý nie je kompatibilný s 8051. Ďalšou nevýhodou je nutnosť podrobných znalostí o digitálnom spracovaní informácií. Ak máte prestavu že informatika je o tom ako napísať text vo worde, surfovať po internete, vypáliť CD a preinštalovať operačný systém - hodne sa mýlite. Ani programovanie vo Visual BASIC, JAVA, či Visual C++ tu nie je celkom dostatočné k úspešnej práci.
Prirovnal by som to k automobilizmu. Bežný vodič (vodička) dnes nemusí ani poznať činnosť spaľovacieho motora a pritom môže spokojne jazdiť celý život. To sú bežný užívatelia počítačov.
Potom máme automobilových pretekárov, ktorí dokážu auto majstrovky ovládať a riadiť. Lenže auto dostanú pripravené od týmu mechanikov takže v mnohom nerozumejú ako presne pracuje prevodovka, vstrekovanie, pérovanie, nastavovanie prítlaku a .... 1000 ďalších drobností ktoré sú im k dispozícii. To sú programátori vyšších programovacích jazykov. Dostanú hotové komponenty a maximálne ich vedia využiť vo svojich programoch.
Ale existujú aj mechanici, ktorý doporobna poznajú každú skrutku prevodovky, motora, každú súčiastku elektroniky vozidla a ďalších a ďalších systémov. Je logické že taký mechanik nepozná dokonale všetky systémy, ale sa špecializuje na niektorý konkrétny. Ale ak už sa napríklad venuje motorom, tak mu nerobí veľmi problém či je to honda alebo iný. To sú assembleristi. Poznajú každý detail procesorov a dokážu z nich vyždýmať úplné maximum a tiež je im vcelku jedno či je to 8051, AVR, alebo PIC.

Assembler pre 8051 sa dá na internete pohľadať celkom bezproblémovo. V podstate každý výrobca mikroradičov poskytuje assembler volne, svojim potenciálnym zákazníkom. Okrem toho prekladač získate aj od firiem, ktoré predávajú vývojové prostriedky pre vývoj aplikácií s mikroradičmi. Bohužial, niekedy sú to viac alebo menej obmedzené demo programy. No a nakoniec je tu free komunita programátorov, ktorý zverejnujú svoje programy ako freeware alebo dokonca ako open source. Tu býva obvykle jediný problém vybrať si ten správny program ktorý najlepšie funguje.

Program sa skladá z inštrukcií a presudoinštrukcií. Zapisuje sa pomocou textového editora a je uložený v súboroch s príponou asm, alebo a51.

Prekladač je program, ktorý vyzerá ako muzeálny exponát. Nemá grafické rozhranie a jeho činnosť sa vyvoláva z príkazového riadka. Ako parameter sa zadáva minimálne meno súboru so zdrojovým programom. Prekladač číta vstupný súbor so zdrojovým textom a analyzuje ho na zaklade syntaxe assembleru 8051. Postupuje riadok za riadkom a prekladá jednotlivé inštrukcie zapísané symbolickými menami na operačné kódy inštrukcií. V prípade že inštrukcia má aj parametre, prekladač dokáže tieto parametre vyhodnotiť a skonrolovať a doplniť ich do výsledného strojového kódu programu. Činnosť assemblera je ďalej riadená preudoinštrukciami. Tieto slúžia len ktomu aby sme ovládali prekladač. Zvyčajne negenerujú žiadny kód pre mikroradič. Nasleduje drobná ukážka ako vyzerá zdrojový program

;		takto vyzera assemblerovsky program

start:					;zaciatok programu, nulujem pamet
		mov	r1,#20h	;odtialto zacnem
		mov	r2,#60h	;tolkoto ich vynulujem
		clr	a		;pripravim si nulu
nuluj:		mov	@r1,a		;ulozim nulu
		inc	r1		;posuniem sa na nasledovne miesto
		djnz	r2,nuluj	;opakujem dany pocet krat
MainLoop:				;zaciatok hlavneho programu



		jmp	MainLoop	;skok na zaciatok slucky
		end			;koniec prekladu

Výstupom práce assemblera sú dva súbory. Jeden má príponu LST a druhý HEX. Súbor s príponou LST je tzv. listing programu, alebo doklad o preklade programu. Tu je ukážka ako vyzerá kúsok takého súboru.

 Line I Addr Code         Source

    1:				;		takto vyzera assemblerovsky program
    2:
    3:	  0000			start:					;zaciatok programu, nulujem pamet
    4:	  0000	79 20				mov	r1,#20h	;odtialto zacnem
    5:	  0002	7A 60				mov	r2,#60h	;tolkoto ich vynulujem
    6:	  0004	E4				clr	a		;pripravim si nulu
    7:	  0005	F7		nuluj:		mov	@r1,a		;ulozim nulu
    8:	  0006	09				inc	r1		;posuniem sa na nasledovne miesto
    9:	  0007	DA 00				djnz	r2,nuloj	;opakujem dany pocet krat
							   ^
			  @@@@@ symbol not defined @@@@@

   10:	  0009			MainLoop:				;zaciatok hlavneho programu
   11:
   12:
   13:
   14:	  0009	80 FE				jmp	MainLoop	;skok na zaciatok slucky
   15:						end			;koniec prekladu
Sem prekladač umiestni v čitatelnej podobe všetky dôležité informácie o tom ako prebiehal preklad. Je to vlastne zdrojový súbor do ktorého sa pridajú informácie ako je adresa a kód inštrukcie. Ak prekladač niektorému zapisu nerozumie, označí riadok chybovým hlásením (v príklade červene zvýraznené).

Druhým produktom prekladača je súbor s príponou HEX. To už vieme že je súbor ktorý obsahuje iba strojový kód určený k naprogramovaniu mikroradiča. Znova je to textový súbor a jeho obsah vyzerá takto:

:0700000079207A60E4F709A2
:0200090080FE77
:00000001FF
Obsah súboru netreba študovať. Formát súboru sa volá Intel HEX. Tomuto formátu rozumenú programy ako je simulátor a programátor 8051. Programovanie zo súboru Intel HEX som ukázal v prvej lekcii. Simuláciu programu som ukázal v druhej lekcii.

poznamka.gif, 0 kB Súbor Intel HEX samozrejme nebude obsahovať platný strojový kód pokiaľ prekladač nepreloží program bez chyby.

Na záver odkazy na súbory uvádzané ako príklady
Zdrojový program
Listing programu
Preložený program vo formáte Intel HEX

Preklad assemblerovského programu:

Vprvom rade treba mať nainštalovaný prekladač assembleru 8051. Ten získate z internetových stránok. Moje doporučenie je používať free prekladač od W.W. Heinza ktorý sa dá získať zo stránky http://plit.de/asem-51/. Inštalácia spočíva iba v rozbalení komprimovaného súboru v nejakom adresári. Samotným prekladačom je súbor ASEM.EXE alebo ASEMW.EXE. Pokiaľ používate OS Windows treba používať ako prekladač ASMW.EXE. Táto verzia je určená pre windows a podporuje dlhé mená a cesty súborového systému windows. ASEM.EXE je DOSovská verzia prekladača.

Teraz stačí len získať nejaký zdrojový súbor a môžeme prekladať. Ako príklad môžete skúsiť preložiť program pre vianočný blikač z krajského zenitu v elektrotechnike z roku 2002. Program si uložte do nejakého adresára, napríklad C:\ASM51\BLIKAC.

Teraz si spustíte príkazový riadok. V XP je to pomocou Štart -> Spustiť ... -> cmd vo windows 95 98 je to podobné Štart -> Spustiť ... -> command. On by tento príkaz fungoval aj na XP, ale príkazový riadok vytvorený pomocou cmd je pohodlnejší. Lebo umožňuje editáciu celého riadka a má aj históriu príkazov a dopĺnanie mien súborov.

Teraz sa treba dostať do adresára kde je nainštalovaný prekladač. U mňa je to na disku E: a v adresaári \ASM8051\ASM51. Použil som na to príkazu MS DOSu. Preklad sputíme zadaním mena prekladača a za meno oddelené medzerou napíšeme kompletnú cestu k zdrojovému súboru. Všetko je vidieť na nasledovnom obrázku

prikazovyRiadok.png, 9 kB
Ak je všetko správne prekladač sa spustí. Vypíše hlavičku so svojím menom a pochvíli ohlási že v preloženom programe nebola žiadna chyba. Týmto je preklad hotový a keď sa pozriete do adresára v ktorom je zdrojový súbor objavíte tam ďalšie dva súbory. Jeden má príponu .LST a druhý .HEX. Oba súbory si môžete pozrieť pomocou nejakého textového editora. Stačí obyčajný Poznámkový blok (Notepad) z príslušenstva Windows.

poznamka.gif, 0 kB Ak sa v príkazovom riadku pomýlite a potrebujete zadať príkaz znova použite šipku nahor na klávesnici. Môžete aj viackrát vyberá zadané príkazy z histórie príkazov. Chybné znaky sa dajú opravovať bezným spôsobom. Kurzor sa posúva šipkami vpravo vľavo, znaky sa mažú klávesou delete, alebo backspace.

poznamka.gif, 0 kB Ak sa vám nechce písať kompletná cesta môžete použiť tabelátor. Cesta sa doplní. Ak sa nepodarí na prvý krát, tabelátor možno stisnúť aj viackrát. Kto pozná UNIXovský shell tak túto fičúru určite pozná.

poznamka.gif, 0 kB Skúste pozmeniť zdrojový súbor a sledujte či prekladač označí pozmenený riadok ako chybný.

Simulácia a programovanie:

Kedže sme si pomocou prekladača vyrobili Intelovský HEX súbor postupujeme pri simulácii podľa lekcie č.2 a pri programovaní podľa lekcie č.1.

Záver:

Na koniec zhrnutie čo by ste mali vedieť po tejto lekcii.
  1. Zhruba mať predstavu ako sa zapisuje assemblerovský program
  2. Vedieť program preložiť pomocou prekladača a príkazového riadka.
  3. Vedieť sa orientovať v súbore .LST. Vedieť nájsť riadky ktoré sú označené ako chybné.
  4. Vedieť načítať HEX súbor do simulátora a krokovať program.
  5. Vedieť naprogramovať program do pamäte mikroradiča.

test.gif, 0 kB Na záver niekoľko úloh na overenie správnosti porozumenia problematike
  1. Assembler je
    vyšší programovací jazyk
    programovací jazyk najnižšej úrovne
    objektový programovací jazyk
    príkazový interpreter
  2. Aby sme preložili zdrojový assemblerovský program do strojového kódu potrebujeme:
    programátorský textový editor
    programovací softvér, napríklad PonyProg
    simulačný program
    prekladač assembleru
  3. Koľko buniek pamäte zaberá strojový kód programu priklad.asm Údaj zadajte ako desiatkové číslo.
  4. Zo súboru priklad.lst zistite na akej adrese je inštrukcia clr a ?
  5. Zo súboru priklad.lst zistite ako je preložená inštrukcia DJNZ R2,NULUJ ?
    zadajte ako 8bitové hexačísla oddelené mezderami.
Hlavná stránka
© Peter Plesník All rights reserved