Inštrukčný súbor AT89S8252 | Znova platí, že informácie sa dajú získať na webových stránkach. Často je v nich ale veľké množstvo chýb. Znova radšej siahnite po oficialnom dokumente nejakého výrobcu mikroradičov. |
simulačný program pre MCU 8051 | Simulačné programy pre 8051 určite keď pohľadáte tak, nejaký nájdete. Osobne sa mi ale žiadny nezapáčil na toľko, že by som ho používal. Ak je program volný, tak zvyčajne nie je dostatočne pohodlný a názorný A ak je pohodlný a názorný, tak je to demo nejakého komerčného vývojového software pre 8051 s rôznymi obmedzeniami. |
Situáciu komplikujú inštrukcie skoku. Tieto sú navyše dvoch typov, nepodmienené a podmienené. Inštrukcia skoku nás môže pri analýze poslať na úplne inú adresu než by mala nasledovať za inštrukciou. A to sa pri podmienených skokoch deje na základe aktuálnych podmienok vo vnútri mikroradiča. Preto spätný preklad nie je priamočiara činnosť a vyžaduje veľmi dobrú znalosť inštrukcií. Ľudia ktorý to dokážu sú označovaný ako hacker. Vďaka médiam, ktoré verejnosti predstavovali zvyčajne hackerov, ktorý spáchali nejaký trestný čin, vznikol dojem, že sú to počítačový zločinci. V skutočnosti sú to ľudia, ktorý dokonale rozumejú tomu čo sa vo vnútri počítača deje a vedia to využiť, prípadne aj zneužiť vo svoj prospech.
Aká inštrukcia zodpovedá operačnému kódu sa koľko zaberá byte sa dá zo súboru ktorý popisuje inštrukcie 8051. Na strane 2 sa začína tabuľka ktorej riadky a stĺpce sú označené hexadecimálnymi číslicami. Ak operačný kód je napríklad 42H tak z tejto tabuľky zistíme že ide o inštrukciu ADD A,#data a podľa označenia 2B vieme, že zaberá dva byte. Na tretej strane tabuľka pokračuje a tu si môžeme napríklad zistiť že operačný kód 4CH je inštrukcia SWAP A a zaberá jeden byte (ak tam chýba 2B alebo 3B tak je dĺžka 1B).
V tom istom dokumente na strane 7 je tabuľka ktorá poskytuje rovnaké informácie možno ešte v pohodlnejšej forme.
Pochopenie činnosti programu sa deje ľahšie ak máme k spätnému prekladu vhodné programové vybavenie. Pre náš účel postačuje hocijaký simulačný program, ktorý na počítači PC simuluje činnosť 8051. Tento nám automaticky dokáže previesť operačný kód na symbolický zápis inštrukcie. A tiež nám dovolí simulovať činnosť programu krok za krokom tak, že pri tom môžeme sledovať všetko čo sa vo vnútri odohráva. Aj tak prísť na funkciu programu nie je jednoduché a považujem to za veľmi dobrý spôsob stúdia inštrukcií. Je to niečo na spôsob Čo tým chcel básnik (programátor) povedať. Skutočne programovanie sa dá prirovnať napríklad k skladaniu hudby. Skutočne dobrý skladateľ si dokáže v hlave aj bez hudobných nástrojov predstaviť ako to bude znieť. Rovnako dobrý programátor by si mal tiež byť schopný aj bez simulátora predstaviť aspoň malú časť programu. Existujú ale vynimočné talenty ktoré si zapamätajú celú operu. Medzi počítačovými odborníkmi sú to tzv. praví programátori, ktorý poznajú obsah pamäte naspamäť.
Keďže simulátory sa od seba veľmi lýšia nebudem tu popisovať nejaký univerzálny postup práce ale všetko si ukážeme na konkrétnom príklade.
0000 02 00 24 LJMP 0024HV prvom stĺpci budeme písať adresu inštrukcie. Potom napíšem operačný kód a údajové byte ak sú. No a nakoniec symbolický názov inštrukcie a parametre. Ako vypočítať parameter inštrukcie sa treba prozrieť do presného popisu jednotlivej inštrukcie. Ak budete poriadne usilovný a urobíte spätný preklad až po adresu 0040h dostanete niečo takéto.
0000 02 00 24 LJMP 0024H 0003 32 RETI 0004 FF MOV R7,A 0005 FF MOV R7,A 0006 FF MOV R7,A 0007 FF MOV R7,A 0008 FF MOV R7,A 0009 FF MOV R7,A 000A FF MOV R7,A 000B 32 RETI 000C FF MOV R7,A 000D FF MOV R7,A 000E FF MOV R7,A 000F FF MOV R7,A 0010 FF MOV R7,A 0011 FF MOV R7,A 0012 FF MOV R7,A 0013 32 RETI 0014 FF MOV R7,A 0015 FF MOV R7,A 0016 FF MOV R7,A 0017 FF MOV R7,A 0018 FF MOV R7,A 0019 FF MOV R7,A 001A FF MOV R7,A 001B 02 00 95 LJMP 0095H 0023 32 RETI 0024 79 20 MOV R1,#20H 0026 7A 60 MOV R2,#60H 0028 E4 CLR A 0029 F7 MOV @R1,A 002A 09 INC R1 002B DA FC DJNZ R2,0029H 002D 75 89 10 MOV 89H,#10H 0030 D2 8E SETB 8EH 0032 D2 AF SETB AFH 0034 D2 AB SETB ABH 0036 75 81 08 MOV 81H,#08 0039 75 30 07 MOV 30H,#7 003C 12 00 60 CALL 0060H 003F 20 E0 0F JB E0H,0051H 0042 30 E1 F7 JNB E1H,003CH 0045 15 30 DEC 30H 0047 E5 30 MOV A,30H 0049 B4 02 F0 CJNE A,#2,003CH 004C 75 30 14 MOV 30H,#14H 004F 80 EB JMP 003CA máme ten program pekne prepísaný do čitatelnejšej podoby. Ak by ste chceli môžete začať analyzovať jeho činnosť. Treba si len poriadne naštudovať každú inštrukciu a snažiť sa pochopiť jej význam v programe. Pri ručne písaných programoch v jazyku assembler to pri troche cviku ide, pomerne ľahko, pretože programátor každú inštrukciu vloží s nejakým cieľom. Ak by sme takto spätne analyzovali program napísaný vo vyššom programovacom jazyku. Nechápali by sme význam niektorých inštrukcií pokiaľ by sme nepochopili úplne do detailu činosť prekladača toho vyššieho jazyka. Takéto programy sa tažko spätne analyzujú a ten kto to robí má na to zvyčajne nejaký moc dobrý dôvod. Ostatne všetky komerčné programy majú v licenčnej zmluve napísané, že nie je dovolený ich spätný preklad a analýza.
Nebudem tu teraz vysvetľovať činnosť programu. Chcel som len ukázať postup ako treba analyzovať strojový kód. Tento ručný spôsob je už vhodný len k tomu aby ste pochopili pricíp ako to celé funguje. K skutočnej analýze máme teraz k dispozíci vhodné programoveé vybavenie, ktoré nás zbavuje zbytočnej rutinnej práce.
Po spustení simulátora sa otvorí takéto okno.
Prvý stĺpec obsahuje adresu, inštrukcie, druhý stĺpec obsahuje operačný kód, tretí stĺpec ukazuje symbolický zápis inštrukcie aj operandami, tak ako sa zapisujú pri programovaní. Môžete si všimnúť šedé miesta od adresy 0004H až 000AH. Týmto označením sa snaží simulátor ukázať, že na týchto adresách programu sa nenachádzajú inštrukcie a preto zostanú pri programovaní tieto miesta nenaprogramované - teda s hodnotou 0FFH čomu zodpovedajú inštrukcie MOV R7,A. Ak je program dobre nápísaný nebude to vadiť. Pretože na tieto šedé miesta sa nikdy nedostane.
Analýzu činnosti programu nám teraz spríjemní ďalšia užitočná funkcia simulátora - krokovanie programu. Všimnite si a vyskúšajte ikonu označenú na obrázku červeným rámikom. Každým kliknutím sa vykoná jedna inštrukcia programu. V pravom okne sa nachádza modre zýraznený riadok. To je riadok ktorý sa má práve vykonať. Po kliknutí na ikonu krokovania sa presunie na ďalšiu inštrukciu, ktorá bude vykonaná. V ľavom okne sa zase vypisujú SFR registre mikroradiča. Tu sú sústredené všetky dôležité časti a môžete prehľadne sledovať ako sa menia po jednotlivých krokoch. Môžete si tak overiť či ste správne pochopili význam inštrukcie. A či sa naozaj vykonalo presne to čo ste očakávali.
Simulátor je veľmi silná pomocka pri začiatkoch práce s mikroradičmi. Jeho význam ale nekončí keď sa už naučíte čo robia všetky inštrukcie. Programátor simulátor používa každodenne pri vytváraní programov k odhaľovaniu rôznych chýb.