Nintendo Entertainment System
Nintendo Entertainment System
Nintendo Entertainment System
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: