Konekielikurssinen senkun jatkuu. T[ss[ osassa tutustutaan konekielen ver-tailuoperaatioihin ja niiden perusteellateht[viin hyppyihin. Lienee paikallaan k[yd[ suoraan asiaan.
CMP vertailee akun arvoa muistipaikanarvoon. Mik[li arvot ovat yht[ suuret asettuu ns. nolla lippu. Mik[li luvut ovat erisuuret pysyy lippu poissa p[[l- t[. Lipuista pit[[ varmaan selitt[[ hieman enemm[nkin, sill[ perustuvathan ehdolliset hypyt niihin. Liput kuvaavat prosessorin tilaa. Lippuja on kuusi eri-laista ja ne kukin ovat yhden bitin ko- koisia. Lippuihin vaikuttavat p[[asiassalaskuoperaatiot, vertailuoperaatiot, se-k[ suoraan tietyn lipun tilaa muuttavat k[skyt. Ehdolliset hyppyk[skyt taas kat-sovat jonkin lipun tilan (mink[, riippuuk[skyst[) ja toimivat sen mukaan.
Nyt voi varmaan palata taas CMPhen. Sen muotoja l\ytyy seuraavasti:
CMP# luku vertaa lukua ja akkua
CMP luku vertaa akkua ja muistipai-kan (=luku) arvoa
CMP luku,x vertaa akkua ja muistipai-kan (joka saadaan laskemalla yhteen lukuja x-rekisterin arvo) arvoa
CMP luku,y vastaava kuin edellinen, k[ytt[[ vain y-rekisterin arvoa ja luku on oltava suurempi kuin 255.
CPX vertaa muistipaikan arvoa x-re- kisterin arvoon. Vaikutus lippuihin on samanlainen kuin CMPll[. Muodot:
CPX# luku vertaa lukua ja x-rekiste-rin arvoja kesken[[n
CPX luku vertaa muistipaikan (=lu- ku) ja x-rekisterin arvoja.
CPY vertailee muistipaikan arvoa y-rekisterin arvoon. Vaikuttaa lippuihinkuten CPX.
CPY# luku vertaa y-rekisterin arvoa ja lukua toisiinsa
CPY luku vertaa y-rekisterin arvoa ja muistipaikan arvoa toisiinsa.
Vaikka viime osa olikin "pyhitetty" laskutoimituksille, tulee niit[ t[ss[ pari lis[[, koska n[iss[ laskutoimituk- sissa carry lippu vaikuttaa tulokseen.
ADC lis[[ akkuun m[[ritellyn luvun. Mik[li carry lippu on asettunut on akku-un tuleva uusi arvo=akun vanha arvo + m[[ritelty luku + 1 (edellytt[en ettei laskutoimituksen summa ole suurempi kuin255), mik[li lippu ei ole p[[ll[ voi yk-k\sen unohtaa. ADC muotoja ovat:
ADC# luku lis[[ luvun akkuun
ADC luku lis[[ muistipaikan (=luku)arvon akkuun
ADC luku,x lis[[ muistipaikan (luku+ x-rekisterin arvo) arvon akkuun
ADC luku,y vastaava kuin yll[, k[yt- t[[ y-rekisteri[ ja luku>255
SBC v[hent[[ akusta m[[ritellyn lu- vun. Mik[li carry lippu on poissa p[[lt[(ei ole asettunut) on akkuun tuleva uusiarvo=akun vanha arvo - m[[ritelty luku -1 (edellytt[en ettei erotus ole alle nollan), mik[li lippu on asettunut voi ykk\sen unohtaa. Muodoissa l\ytyy:
SBC# luku v[hent[[ luvun akusta
SBC luku v[hent[[ muistipaikan (lu-ku) arvon akusta
SBC luku,x v[hent[[ muistipaikan (lu-ku + x-rekisterin arvo) arvon akusta
SBC luku,y vastaava kuin yll[, k[yt- t[[ vain y-rekisterin arvoa ja luku>255.
Kuten aikaisemmin on todettu katso- vat ehdolliset hyppyk[skyt jonkin lipun tilan ja toimivat sitten sen mukaan (eliohjelman toiminta joko jatkuu seuraavas-ta k[skyst[ tai hypp[[ k[skyn per[ss[ o-levaan muistiosoitteeseen). Esittelen vain nolla lipun mukaan toimivat k[skyt tarkemmin, koska muidenkin lippujen mu- kaan toimivat k[skyt toimivat samalla periaatteella.
BEQ suorittaa haarautumisen silloin, kun nolla lippu on p[[ll[. T[llainen ti-lanne on esim. silloin kun vertailuope- raatiossa on havaittu arvojen olevan yh-t[ suuret. Muoto on aina
BEQ luku luku on se muistiosoite, johon ohjelman suoritus hypp[[.
BNE suorittaa haarautumisen silloin, kun nolla lippu ei ole p[[ll[. T[llainentilanne on esim. silloin kun vertailu- operaatiossa on arvojen havaittu olevan erisuuret. Muoto on
BNE luku luku on se muistiosoite, johon ohjelman suorius hypp[[.
Muiden lippujen mukaan toimivat k[s- kyt ovat:
lippu haarautuminen jos p[[ll[ poissa
carry BCS BCC
negatiivinen BMI BPL
ylitys BVS BVC
Haarautumisk[skyjen osoitteet ovat muistissa todellisuudessa muodossa: sen ja sen verran muistipaikkoja eteen- tai taaksep[in mutta konekielimonitorit k[ytt[v[t yleens[ aikaisemmin mainittua muotoa.
T[ss[ olisi nyt yksi esimerkki oh- jelma, joka toivottavaasti hieman sel- vent[[ n[it[ k[skyj[. Ohjelmassa on parik[sky[, joita ei t[ss[ kurssissa ole se-litetty viel[ mutta niit[ ei kannata ih-metell[. Ohjelma muuttaa kaikkien n[y- t\ll[ olevien merkkien v[ri[ 256 kertaa,eli teksti vilkkuu n[yt\ss[ hetken aikaaja sitten merkit ovat taas alkuper[isen v[risi[.
c000 LDA# d8 akkuun 216
c002 LDY# 00 y-rekisteriin nolla
c004 STA c00e 216 mp:aan 49166
c007 STY c00d 0 mp:aan 49165
Ylla oleva toimi tarpeen, koska oh- jelma on itse[[n muuttava, eik[ si- t[ voisi ajaa useampaan kertaan il- man tuota.
c00a TYA siirt[[ y-rekisterin arvon akkuun
c00b TAX siirt[[ akun arvon x-rekisteriin
c00c INC d800,x kasvattaa yhdell[ mp:aa 55296 + x-rek. c00f INX x-rek.=x-rek. + 1 c010 CPX# 00 onko x-rek. = 0 c012 BNE c00c jos ei, niin hyppy c014 INC c00e mp 49166 kasvaa yh- dell[ (ohjelma muut- taa itse[[n)
c017 INY y-rek. =y-rek. + 1
c018 CPY# 04 onko y-rek. = 4
c01a BNE c00c jos ei, niin hyppy P[tk[ c00c-c01a muuttaa kaikkien n[yt\ss[ olevien merkkien v[rin yh- den kerran. c01c LDY# d8 y-rekisteriin 216
c01e STY c00e 216 mp:aan 49166
c021 LDY# 00 y-rekisteriin nolla c023 CLC cally lippu pois
c024 ADC# 01 akkuun lis[[ yksi
c026 BVC c00c mik[li ylitys lippu pois, niin hyppy c028 RTS ohjelma loppu P[tk[ c01c-c028 sijoittaa ensin v[- rimuutoksen v[rimuistin alkuun ja sitten tutkii onko v[ri[ muutettu jo 256 kertaa. Akku toimii laskuri- na ja mik[li akun arvo kasvaa suu- remmaksi kuin 255, ylitys lippu tu- lee p[[lle ja akku nollautuu.
Seuraavalla kerralla tutustumme muu-tamaan viel[ esittelem[tt\m[[n k[skyyn ja interruptiin (interi, noin niiku ys- t[vien kesken).