18.07.2013 Views

Nintendo Entertainment System

Nintendo Entertainment System

Nintendo Entertainment System

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Subtraksjon (SBC)<br />

3.2. INSTRUKSJONER<br />

Subtraksjon foregår rimelig likt som addisjon. Den eneste forskjellen i bruk er at vi må sette<br />

carry-flagget til 1 i stedet for 0 før vi utfører en SBC (når vi subtraherer fungerer carry-biten som<br />

lånetall i stedet for minnetall):<br />

LDA tall1<br />

SEC ; sett C til 1<br />

SBC tall2<br />

En 16-bits subtraksjon utfører vi på samme måte som addisjonen ovenfor, men da med SEC i<br />

stedet for CLC før første subtraksjon.<br />

Inkrementering og dekrementering (INX, DEX)<br />

Instruksjonene INX, INY og INC inkrementerer (øker med 1) verdien i henholdsvis X, Y og den<br />

oppgitte adressen. Instruksjonene DEX, DEY og DEC dekrementerer (senker med 1) verdien i<br />

henholdsvis X, Y og den oppgitte adressen. Når verdien er $FF og den inkrementeres, vil den<br />

nye verdien bli 0. Når verdien er 0 og den dekrementeres, blir den nye verdien $FF.<br />

Negative tall<br />

I utgangspunktet kan de 8 bitene i registrene lagre verdier mellom 0 og 255, men i noen tilfeller<br />

kan det være greit å ha negative tall. 6502-prosesoren skiller ikke mellom positive og negative tall<br />

når den utfører instruksjoner, så det er opp til koden vår å tolke tall som positive eller negative.<br />

Den beste måten å representere negative tall på er på toerkomplementsform. På denne formen<br />

representerer tallene fra 0 til $7F (127) de positive tallene fra 0 til $7F, mens tallene fra $FF<br />

og ned til $80 representerer tallene fra -1 og ned til -128. Alle tallene fra 0 til $7F har 0 i den<br />

høyste biten, mens tallene fra $80 til $FF har 1 i den høyeste biten. Det gjør det veldig enkelt<br />

å skille mellom positive og negative tall. Det kan virke litt merkelig at de negative tallene går<br />

«motsatt vei», men la oss se litt nærmere på dette: Hvis vi legger sammen 1 og $FF, og ser<br />

bort fra carry-flagget, får vi 0 i de 8 laveste bitene. Det betyr at det gir mening å tenke på tallet<br />

$FF som -1, siden vi får 0 når vi legger det sammen med 1. På samme måte kan vi tenke på<br />

$FE som -2, siden $FE + $02 gir 0, og så videre.<br />

En fordel med toerkomplementsform er at instruksjonene ADC og SBC fungerer slik vi ønsker.<br />

Hvis A inneholder $F0 (-16 på toerkomplementsform) og vi utfører ADC $F1 (-15 på toerkomplementsform)<br />

blir resultatet E1 (med carry). Det er -31 på toerkomplementsform.<br />

6502-prosessoren legger opp til denne måten å representere negative tall på. Hver gang en<br />

instruksjon resulterer i et tall der bit 7 er satt, vil N-flagget settes til 1 for å indikere dette.<br />

Da gir det kanskje mening at dette flagget heter «Negative flag», og at de tilhørende branchinstruksjonene<br />

heter BMI («Branch if Minus») og BPL («Branch if Plus»). Vi kan se et eksempel<br />

hvor N-flagget brukes:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!