Rešitve za težave 4. poglavja celotne spletne zbirke podatkov o računalništvu in internetnem poklicnem tečaju od začetka

Resitve Za Tezave 4 Poglavja Celotne Spletne Zbirke Podatkov O Racunalnistvu In Internetnem Poklicnem Tecaju Od Zacetka



Težave in njihove rešitve

1) Napišite program v zbirnem jeziku, ki se začne pri 0200 USD za 6502 µP in doda nepredznačene številke 2A94 H (dodaj) k 2ABF H (avgend). Naj bodo vhodi in izhodi v pomnilniku. Prav tako ročno izdelajte sestavljen programski dokument.







rešitev:



CLC
LDA 0213 $
ADC 0215 $
STA $0217
LDA 0214 $
ADC 0216 $
STA $0218



Sestavljen program:





2) Napišite program v zbirnem jeziku, ki se začne pri 0200 $ za 6502 µP in odšteje nepredznačena števila, 1569 H (odbitni) iz 2ABF H (minuend). Naj bodo vhodi in izhodi v pomnilniku. Ročno izdelajte tudi sestavljen programski dokument.



rešitev:

SEC
LDA 0213 $
SBC 0215 $
STA $0217
LDA 0214 $
SBC 0216 $
STA $0218

Sestavljen program:

3) Napišite program v zbirnem jeziku za 6502 µP, ki šteje od $00 do $09 z uporabo zanke. Program naj bi se začel pri 0200 $. Prav tako ročno izdelajte sestavljen programski dokument.

rešitev:

LDA #$09
STA 0220 $ ; za primerjavo X in 09 $
LDX #$00
zanka INX
CPX 0220 USD
BNE zanka

Sestavljen program:

4) Napišite program v zbirnem jeziku, ki se začne pri 0200 USD za 6502 µP. Program ima dva podprograma. Prvi podprogram doda nepredznačene številke 0203 H (avgend) in 0102 H (dodaj). Drugi podprogram doda vsoto iz prvega podprograma, ki je 0305 H do 0006 H (avgend). Končni rezultat se shrani v pomnilnik. Pokličite prvi podprogram, ki je FSTSUB, in drugi podprogram, ki je SECSUB. Naj bodo vhodi in izhodi v pomnilniku. Prav tako ročno izdelajte sestavljen programski dokument za celoten program.

rešitev:

SECSUB CLC
LDA $021A
ADC 0234 $
STA $0236
LDA 021 milijard dolarjev
ADC 0235 $
STA $0237
RTS

FSTSUB CLC
LDA 0216 $
ADC 0218 $
STA $021A
LDA 0217 $
ADC 0219 $
STA 021 milijard USD
RTS

JSR FSTSUB

Sestavljen program:

5) Glede na to, da an ¯IRQ handler doda $02 do $01 v akumulatorju kot jedrno obdelavo, medtem ko ¯NMI se izda, jedro pa ravnanje za ¯NMI doda $05 do $04 na akumulatorju, napiše zbirni jezik za oba upravljalnika, vključno z njunima klicema. Klic na ¯IRQ vodja mora biti na naslovu $0200. The ¯IRQ Handler se mora začeti na naslovu $0300. The ¯NMI Handler se mora začeti na naslovu $0400. Rezultat tega ¯IRQ obdelovalnik je treba postaviti na naslov $0500, rezultat pa ¯NMI upravljalnik naj bo na naslovu $0501.

rešitev:

NMISR PHA ; Rutina NMI se začne tukaj na naslovu $0400
PHX
PHY
;
LDA #$04
ADC #$05
STA $0501
;
PLY
PLX
PLA
RTI

ISR PHA ; to navodilo je na naslovu $0300
PHX
PHY
;
LDA #$01
ADC #$02
; JMP NMISR : komentirano, ker ni del rutine
STA 0500 $ ; bo šlo v sklad
;
PLY
PLX
PLA
RTI
;
JMP ISR ; to navodilo je na naslovu $0200

6) Na kratko razložite, kako se ukaz BRK uporablja za izdelavo programske prekinitve v računalniku 65C02.

rešitev:

Glavni način za programsko prekinitev za 65C02 µP je uporaba implicitnega naslovnega ukaza BRK. Predpostavimo, da se glavni program izvaja in naleti na ukaz BRK. Od te točke mora biti naslov naslednjega ukaza v PC-ju poslan v sklad, ko se trenutni ukaz zaključi. Nato je treba poklicati podprogram za obdelavo navodil programske opreme. Ta prekinitveni podprogram mora potisniti vsebino registrov A, X in Y v sklad. Ko je jedro podprograma izvedeno, je treba vsebino registrov A, X in Y potegniti nazaj iz sklada v njihove registre z zaključnim podprogramom. Zadnja izjava v rutini je RTI. Vsebina osebnega računalnika se prav tako samodejno potegne nazaj iz sklada v osebni računalnik zaradi RTI.

7) Izdelajte tabelo, ki primerja in primerja običajno podprogram s prekinitveno servisno rutino.

rešitev:

8) Na kratko razložite glavne načine naslavljanja 65C02 µP glede na primere navodil v zbirnem jeziku.

rešitev:

Vsako navodilo za 6502 je en bajt, ki mu sledi nič ali več operandov.

Način takojšnjega naslavljanja
Pri načinu takojšnjega naslavljanja je za operandom vrednost in ne pomnilniški naslov. Pred vrednostjo mora biti #. Če je vrednost šestnajstiška, mora »#« slediti »$«. Navodila za neposredno naslavljanje za 65C02 so: ADC, AND, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC. Bralec naj si ogleda dokumentacijo za 65C02 µP, da bo vedel, kako uporabljati navodila, ki so navedena tukaj in niso bila razložena v tem poglavju. Primer navodil je:

LDA #$77

Absolutni način naslavljanja
Pri absolutnem načinu naslavljanja obstaja en operand. Ta operand je naslov vrednosti v pomnilniku (običajno v šestnajstiški obliki ali oznaka). Obstaja 64K10 = 65,53610 pomnilniških naslovov za 6502 µP. Običajno je enobajtna vrednost na enem od teh naslovov. Navodila za absolutno naslavljanje za 65C02 so: ADC, AND, ASL, BIT, CMP, CPX, CPY, DEC, EOR, INC, JMP, JSR, LDA, LDX, LDY, LSR, ORA, ROL, ROR, SBC, STA , STX, STY, STZ, TRB, TSB. Bralec naj si ogleda dokumentacijo za 65C02 µP, da bo vedel, kako uporabljati navodila, ki so navedena tukaj, kot tudi za ostale načine naslavljanja, ki niso bili razloženi v tem poglavju. Primer navodil je:

STA $1234

Implicitni način naslavljanja
Pri implicitnem načinu naslavljanja ni operanda. Kateri koli vključeni register µP je impliciran z navodilom. Implicitna navodila za naslavljanje za 65C02 so: BRK, CLC, CLD, CLI, CLV, DEX, DEY, INX, INY, NOP, PHA, PHP, PHX, PHY, PLA, PLP, PLX, PLY, RTI, RTS, SEC , SED, SEI, TAX, TAY, TSX, TXA, TXS, TYA. Primer navodil je:

DEX: Zmanjšajte register X za eno enoto.

Način relativnega naslavljanja
Način relativnega naslavljanja obravnava samo navodila za razvejanje. Pri načinu relativnega naslavljanja obstaja samo en operand. Je vrednost od -12810 do +12710. Ta vrednost se imenuje odmik. Na podlagi predznaka se ta vrednost prišteje ali odšteje od naslednjega ukaza programskega števca rezultatu v naslovu nameravanega naslednjega ukaza. Navodila za način relativnega naslova so: BCC, BCS, BEQ, BMI, BNE, BPL, BRA, BVC, BVS. Primeri navodil so:

BNE $7F : (veja, če je Z = 0 v statusnem registru, P)

ki doda 127 trenutnemu programskemu števcu (naslovu za izvedbo) in začne izvajati navodilo na tem naslovu. Podobno:

BEQ $F9 : (veja, če je Z = : v statusnem registru, P)

ki trenutnemu števcu programa doda -7 in začne izvajanje na novem naslovu števca programa. Operand je komplement dvojke.

Absolutno indeksno naslavljanje
Pri naslavljanju z absolutnim indeksom se vsebina registra X ali Y doda danemu absolutnemu naslovu (kjer koli od $0000 do $FFFF, tj. od 010 do 6553610), da dobimo pravi naslov. Ta dani absolutni naslov se imenuje osnovni naslov. Če se uporablja register X, je navodilo za sestavljanje približno takole:

LDA C453,X

Če se uporabi register Y, bi bilo nekaj takega:

LDA C453 $, Y

Vrednost za register X ali Y se imenuje vrednost štetja ali indeksa in je lahko kjer koli od $00 (010) do $FF (25010). Ne imenuje se odmik.

Navodila za naslavljanje absolutnega indeksa so: ADC, AND, ASL (samo X), BIT (z akumulatorjem in pomnilnikom, samo z X), CMP, DEC (samo pomnilnik in X), EOR, INC (samo pomnilnik in X), LDA , LDX, LDY, LSR (samo X), ORA, ROL (samo X), ROR (samo X), SBC, STA, STZ (samo X).

Absolutno posredno naslavljanje
To se uporablja samo z navodili za skok. S tem ima dani absolutni naslov naslov kazalca. Naslov kazalca je sestavljen iz dveh bajtov. Dvobajtni kazalec kaže (je naslov) ciljne vrednosti bajta v pomnilniku. Torej, navodila za montažni jezik so naslednja:

JMP (3456 $)

Z oklepaji in $13 v naslovu $3456, medtem ko je $EB v naslovu $3457 (= $3456 + 1), je ciljni naslov $13EB in $13EB je kazalec. V navodilu je v oklepaju absolutno 3456 $.

9) a) Napišite program v strojnem jeziku 6502, da postavite 'Ljubim te!' niz kod ASCII v pomnilniku, začenši z naslovom $0300 z dolžino niza. Program bi se moral začeti na naslovu $0200. Pridobite vsak znak iz akumulatorja, ob predpostavki, da so tja enega za drugim poslani s podprogramom. Prav tako ročno sestavite program. (Če morate poznati kode ASCII za 'Ljubim te!', so tukaj: 'I':4916, presledek: 2016, 'l': 6C16, 'o':6F16, 'v':7616, ' e':65, 'y':7916, 'u':7516 in '!':2116. Opomba: vsaka koda zavzema 1 bajt).

b) Napišite program v strojnem jeziku 6502, da postavite 'Ljubim te!' niz kod ASCII v pomnilniku, ki se začne z naslovom $0300 brez dolžine niza, vendar se konča na 0016. Program se mora začeti na naslovu $0200. Pridobite vsak znak iz akumulatorja, ob predpostavki, da jih tja pošlje enega za drugim s podprogramom. Poleg tega ročno sestavite program.

rešitev:

a) Strategija: Obstaja 12 bajtov za niz: 1 bajt za dolžino niza in 11 bajtov za nizovni literal. Torej mora biti 12 ponovitev (zank), ki se štejejo od 0. To je: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. To je 12 števil.

Celo število 0 je postavljeno v register X in število 1110 = 1210 – 110 = B16 = $0B je postavljeno na mesto naslova v pomnilniku, recimo naslov $0250. Za vsako ponovitev se vrednost v registru X poveča, rezultat pa se primerja z $0B na lokaciji naslova $0250. Takoj ko je vrednost v X enaka vrednosti $0B, se iteracija ustavi. Na tej točki dolžina (število bajtov) niza in dobesednega niza zasedata naslovne lokacije od $0300 do $030B (vključno). Za povečanje pomnilniških naslovov od $0300 se uporablja register Y. Koda je:

LDA #$0B
STA $0250
LDX #$00
LDY #00 $
STA 0300 $ ; dolžino 11 neki podprogram postavi v A in gre na 0300 $
zanka INX
TAM
0250 CPY
BEQ zanka

b) Strategija: Obstaja 12 bajtov za niz: 1 bajt za $00 Null terminator in 11 bajtov za literal niza. Torej mora biti 12 ponovitev (zank), ki se štejejo od 0. To je: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. To je 12 števil.

Celo število 0 je postavljeno v register X in število 1110 = 1210 – 110 = B16 = $0B je postavljeno na mesto naslova v pomnilniku, recimo naslov $0250. Za vsako ponovitev se vrednost v registru X poveča, rezultat pa se primerja z $0B na lokaciji naslova $0250. Takoj ko je vrednost v X enaka vrednosti $0B, se iteracija ustavi. Na tej točki število bajtov dobesednega niza in ničelni znak zasedajo naslovne lokacije od $0300 do $030B (vključno). Za povečanje pomnilniških naslovov od $0300 se uporablja register Y. Koda je:

LDA #$0B
STA $0250
LDX #$00
LDY#00$
STA 0300 $ ; Nek podprogram postavi »I« v A in gre na 0300 $
zanka INX
TAM
0250 CPY
BEQ zanka