OLI76.HU - Orosz Olivér weboldala
személyes blog festmények, airbrush online játékok android retro rovat videoton tvc programozás
személyes blog festmények, airbrush online játékok android retro rovat videoton tvc programozás
Videoton TVC

menü:
információ a TVC-ről
TVC emulátor
TVC emulátor mini
emulátor kezelése
a TVC kezelése
játékok kezelése
emulátor letöltése
galéria
screenshot-ok 1
speciális képek 1
speciális képek 2
TVC BASIC

mélyvíz:
hardver
memória térkép
assembly

játékok:
Gyíkkirály
Boszorkány 2
Raiders of Lost Ark
Adventure
Kincskereső
Kardhalak és Kincsek

fórum:
kapcsolódó fórum



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