| |||||||||||||||||
|
Videoton TVC |
Assembly A processzor csak a gépi kódú utasításokat tudja végrehajtani. Ha BASIC programot írunk, akkor azt a beépített program értelmezi, és végrehajtja a hozzá tartozó gépi kódú programot. Emiatt a BASIC programok lassabbak, illetve a tárolás miatt több helyet is foglalnak el. Ha ki akarjuk hozni a maximumot a gépből akkor gépi kódban kell programoznunk. A "gépi kód" azt jelenti, hogy a processzor utasításai számok formájában vannak tárolva a memóriában. Ezeket az utasításokat számok formájában is beírhatjuk. Ez a módszer lassabb, mert sokmindent (pl. címeket) nekünk kell kiszámolni, minden utasítás kódját ismerni kell, nehezebb a program módosítása. Az "assembly" lényege, hogy az utasítás kódja helyett a nevét írjuk a programba. Hasonló szöveges fájlt írunk mint BASIC program esetén. Ezután egy fordítóprogram ebből létrehozza a gépi kódú programot. Ez a program már maximális sebességgel fog futni, csak azt fogja végrehajtani amit leírtunk, nem foglal fölöslegesen sok helyet. Könnyű a módosítása, hisz csak a forráskódot kell átírnunk majd újrafordítani. Hogy assembly nyelven írjunk programot, ismernünk kell a processzort és a hardvert. Z80 CPU regiszterei: 8 bites: A, B, C, D, E, H, L. 16 bites: BC, DE, HL, iX, iY. F -8 bites flag regiszter, műveletek eredményéről adnak információkat a megelelŐ bitek. PC -16 bites program számláló, a következő gépi utasítás címét tárolja. SP -16 bites verem mutató. I -megszakításvektor. R -memória frissítő regiszter. A B és C 8bites regisztereket együtt kezelve kapjuk meg a BC 16bites regisztert. Ugyanígy a D és E regiszterek együtt adják a DE regisztert, és a H és L regiszterek a HL regisztert. Az AF,BF,DE,HL regiszterekből van egy "tartalék" készlet a processzorban, és a két készlet tartalma egy utasítással cserélhető. Az F, flag regiszter felépítése, a 8 bit jelentése: 7. - S -előjel bit 6. - Z -nulla 5. - nem használt 4. - H -fálbájtos átvitel 3. - nem használt 2. - P/V -paritás /túlcsordulás 1. - N -negatív 0. - C -átvitel Működésére példa: ha egy matematikai műveletet végzünk mondjuk az A regiszteren, és az eredmény nulla lesz, akkor a 6. bit 1-esre állítódik, egyébként nullára. Ha negatív lesz az eredmény akkor a 7. bit értéke 1 lesz, egyébként nulla. Így egy művelet után rögtön (vagy később) információt kapunk erről. Assembly utasításaok: ADC -összeadás átvitellel ADD -összeadás AND -és BIT -bitvizsgálat CALL -eljárás hívása CCF -C jelzőbit áttállítása CP -összehasonlítás CPD -blokk összehasonlítás cím csökkentéssel CPDR -blokk összehasonlítás cím csökkentéssel, automata ismétléssel CPI -blokk összehasonlítás cím növeléssel CPIR -blokk összehasonlítás cím növeléssel, automata ismétléssel CPL -A regiszter komplemense DAA -regiszter decimális igazítása DEC -csökkentés DI -megszakítások tiltása DJNZ -B csökkentése és ugrik ha nem nulla EI -megszakítások engedélyezése EX,EXX -felcserélés HALT -megállás IM -megszakítás mód IN -bevitel (adat olvasása portról) INC -növelés IND -blokkátvitel cím csökkentéssel INDR -blokkátvitel cím csökkentéssel, automatikus ismétléssel INI -blokkátvitel cím növeléssel INIR -blokkátvitel cím növeléssel, automatikus ismétléssel JP -ugrás JR -relatív ugrás LD -átmozgatás LDD -blokkmozgatás cím csökkentéssel LDDR -blokkmozgatás cím csökkentéssel, automatikus ismétléssel LDI -blokkmozgatás cím növeléssel LDIR -blokkmozgatás cím növeléssel, automatikus ismétléssel NEG -ellentettje NOP -üres utasítás, nem csinál semmit OR -vagy OTDR -blokk átvitel cím csökkentéssel, automatikus ismétléssel OTIR -blokk átvitel cím növeléssel, automatikus ismétléssel OUT -kivitel (adat küldés portra) OUTD -blokk kivitel cím csökkentéssel OUTI -blokk kivitel cím növeléssel POP -veremből elővesz adatot PUSH -verembe elment adatot RES -kikapcsolás RET -viszatérés eljárásból RETI -visszatérés megszakításból RETN -visszatérés nem maszkolható megszakításból RL -balra eltolás C-n át RLA -A regiszter balra eltolása C-n át RLC -balra eltolás RLCA -A regiszter balra eltolása RLD -félbyte-os eltolás balra RR -eltolás jobbra C-n át RRA -A regiszter eltolása jobbra C-n át RRC -eltolás jobbra RRCA -A regiszter eltolása jobbra RRD -félbyte-os eltolás jobbra RST -újraindítás SBC -kivonás átvitellel SCF -C jelzőbit állítása SET -bekapcsolás SLA -aritmetikai eltolás balra SRA -aritmetikai eltolás jobbra SRL -logikai eltolás jobbra SUB -kivonás XOR -kizáró vagy Egyszerű példák: LD A,12 -A regiszterbe tölti a 12-es számot LD A,B -B regiszter tartalmát A regiszterbe másolja INC HL -HL 16bites regiszter tartalmát 1-el növeli ADD A,C -A regiszterbe tölti az A+C eredményét JP START -a "START" cimkével jelölt címre ugrik LD B,32 -B regiszterbe tölti a 32-es számot DEC C -C regiszter tartalmát egyel csökkenti PUSH BC -BC tartalmát a verembe helyezi CALL 0541H -a program a 0541H címen folytatódik tovább, RET hatására visszatér a vezérlés az ezt követő utasításra JR Z,03C0H -ugrás a 03C0H címre, ha a Z jelzőbit értéke 1 |