Pilnas tiešsaistes datorzinātņu datu bāzes un interneta karjeras kursa 4. nodaļas problēmu risinājumi no sākuma

Pilnas Tiessaistes Datorzinatnu Datu Bazes Un Interneta Karjeras Kursa 4 Nodalas Problemu Risinajumi No Sakuma



Problēmas un to risinājumi

1) Uzrakstiet montāžas valodas programmu, kuras cena sākas no 0200 USD par 6502 µP un pievieno neparakstītos skaitļus 2A94 H (pievienot) 2ABF H (augend). Ļaujiet ieejām un izvadēm atrasties atmiņā. Izveidojiet arī salikto programmas dokumentu ar roku.







Risinājums:



CLC
LDA 0213 $
ADC 0215 $
STA 0217 ASV dolāri
LDA 0214 $
ADC 0216 $
STA 0218 ASV dolāri



Saliktā programma:





2) Uzrakstiet montāžas valodas programmu, kuras cena sākas ar 0200 $, 6502 µP, un atņem neparakstītos skaitļus, 1569. H (subtrahenda) no 2ABF H (minuends). Ļaujiet ieejām un izvadēm būt atmiņā. Izveidojiet arī salikto programmas dokumentu ar roku.



Risinājums:

SEC
LDA 0213 $
SBC 0215 $
STA 0217 ASV dolāri
LDA 0214 $
SBC 0216 $
STA 0218 ASV dolāri

Saliktā programma:

3) Uzrakstiet montāžas valodas programmu 6502 µP, kas, izmantojot cilpu, tiek skaitīta no USD 00 līdz USD 09. Programmai jāsākas no USD 0200. Izveidojiet arī salikto programmas dokumentu ar roku.

Risinājums:

LDA # 09 $
STA USD 0220 ; lai salīdzinātu X un 09 USD
LDX # $00
cilpa INX
CPX 0220 $
BNE cilpa

Saliktā programma:

4) Uzrakstiet montāžas valodas programmu, kuras cena ir 0200 USD par 6502 µP. Programmai ir divas apakšprogrammas. Pirmajā apakšprogrammā tiek pievienoti 0203 neparakstītie skaitļi H (augend) un 0102 H (pievienot). Otrā apakšprogramma pievieno summu no pirmās apakšprogrammas, kas ir 0305 H uz 0006 H (augend). Gala rezultāts tiek saglabāts atmiņā. Izsauciet pirmo apakšprogrammu, kas ir FSTSUB, un otro apakšprogrammu, kas ir SECSUB. Ļaujiet ieejām un izvadēm atrasties atmiņā. Tāpat ar roku izveidojiet salikto programmas dokumentu visai programmai.

Risinājums:

SECSUB CLC
LDA 021 A
ADC 0234 $
STA 0236 $
LDA 021 miljards
ADC 0235 $
STA 0237 ASV dolāri
RTS

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

JSR FSTSUB

Saliktā programma:

5) Ņemot vērā, ka an ¯IRQ apdarinātājs pievieno $02 līdz $01 akumulatorā kā pamata apstrādi, kamēr ¯NMI tiek izdots, un pamata apstrādi ¯NMI pievieno $05 līdz $04 pie akumulatora, uzrakstiet montāžas valodu abiem apstrādātājiem, ieskaitot viņu zvanus. Zvans uz ¯IRQ apdarinātājam jāatrodas adresē 0200 USD. The ¯IRQ apdarinātājam jāsākas ar adresi 0300 USD. The ¯NMI apdarinātājam jāsākas ar adresi 0400 USD. Rezultāts ¯IRQ apdarinātājs jāievieto adresē 0500 $, un rezultāts ¯NMI apdarinātājs jānovieto adresē $0501.

Risinājums:

NMISR PHA ; NMI rutīna sākas šeit, 0400 $ adresē
PHX
PHY
;
LDA # 04 $
ADC # 05 $
STA 0501 $
;
PLY
PLX
PLA
RTI

ISR PHA ; šī instrukcija ir adresē $0300
PHX
PHY
;
LDA #$01
ADC #$02
; JMP NMISR: komentēja, jo tas neietilpst rutīnā
STA 0500 USD; dosies uz kaudzi
;
PLY
PLX
PLA
RTI
;
JMP ISR ; šī instrukcija ir 0200 USD adresē

6) Īsi paskaidrojiet, kā BRK instrukcija tiek izmantota, lai radītu programmatūras pārtraukumu 65C02 datorā.

Risinājums:

Galvenais programmatūras pārtraukuma veids 65C02 µP ir BRK netiešās adreses instrukcijas izmantošana. Pieņemsim, ka darbojas galvenā programma un tā saskaras ar BRK instrukciju. No šī brīža nākamās instrukcijas adrese datorā ir jānosūta uz steku, kad tiek pabeigta pašreizējā instrukcija. Tālāk ir jāizsauc apakšprogramma programmatūras instrukciju apstrādei. Šai pārtraukuma apakšprogrammai A, X un Y reģistra saturs ir jānospiež uz steku. Pēc apakšprogrammas kodola izpildes pabeigšanas apakšprogrammas A, X un Y reģistru saturs ir jāatvelk no steka uz to reģistriem. Pēdējais paziņojums rutīnā ir RTI. Datora saturs arī tiek automātiski izņemts no steka uz datoru RTI dēļ.

7) Izveidojiet tabulu, kas salīdzina un kontrastē parasto apakšprogrammu ar pārtraukuma pakalpojuma rutīnu.

Risinājums:

8) Īsi izskaidrojiet 65C02 µP galvenos adresācijas režīmus, ņemot vērā montāžas valodas instrukciju piemērus.

Risinājums:

Katra instrukcija 6502 ir viens baits, kam seko nulle vai vairāki operandi.

Tūlītējās adresācijas režīms
Tūlītējās adresācijas režīmā pēc operanda ir vērtība, nevis atmiņas adrese. Pirms vērtības ir jābūt simbolam #. Ja vērtība ir heksadecimālā, tad “#” ir jāseko ar “$”. Tūlītējie adresācijas norādījumi 65C02 ir: ADC, AND, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC. Lasītājam vajadzētu iepazīties ar 65C02 µP dokumentāciju, lai uzzinātu, kā izmantot šeit norādītās instrukcijas, kas šajā nodaļā nav izskaidrotas. Instrukcijas piemērs ir:

LDA # 77 $

Absolūtais adresācijas režīms
Absolūtajā adresācijas režīmā ir viens operands. Šis operands ir vērtības adrese atmiņā (parasti heksadecimālā vai etiķete). 6502 µP ir 64K10 = 65 53610 atmiņas adreses. Parasti viena baita vērtība ir vienā no šīm adresēm. Absolūtās adresēšanas instrukcijas 65C02 ir: 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. Lasītājam vajadzētu iepazīties ar 65C02 µP dokumentāciju, lai uzzinātu, kā izmantot šeit norādītās instrukcijas, kā arī par pārējiem adresācijas režīmiem, kas nav izskaidroti šajā nodaļā. Instrukcijas piemērs ir:

TIE ir 1234 USD

Netiešās adresācijas režīms
Izmantojot netiešo adresācijas režīmu, operanda nav. Jebkurš iesaistītais µP reģistrs ir norādīts instrukcijā. Netiešās adresēšanas instrukcijas 65C02 ir šādas: 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. Instrukcijas piemērs ir:

DEX: samaziniet X reģistru par vienu vienību.

Relatīvās adresācijas režīms
Relatīvais adresācijas režīms attiecas tikai uz filiāles instrukcijām. Izmantojot relatīvo adresācijas režīmu, ir tikai viens operands. Tā ir vērtība no -12810 līdz +12710. Šo vērtību sauc par nobīdi. Pamatojoties uz zīmi, šī vērtība tiek pievienota vai atņemta no programmas skaitītāja nākamās instrukcijas rezultātam paredzētās nākamās instrukcijas adresē. Relatīvās adreses režīma instrukcijas ir: BCC, BCS, BEQ, ĶMI, BNE, BPL, BRA, BVC, BVS. Instrukciju piemēri ir:

BNE $7F : (filiāle, ja statusa reģistrā Z = 0, P)

kas pievieno 127 pašreizējās programmas skaitītājam (izpildāmajai adresei) un sāk izpildīt instrukciju šajā adresē. Līdzīgi:

BEQ $F9 : (filiāle, ja Z = : statusa reģistrā, P)

kas pievieno -7 pašreizējās programmas skaitītājam un sāk izpildi no jaunās programmas skaitītāja adreses. Operands ir divu komplementa skaitlis.

Absolūtā indeksa adresācija
Izmantojot absolūto indeksu adresēšanu, X vai Y reģistra saturs tiek pievienots norādītajai absolūtajai adresei (jebkurā vietā no $ 0000 līdz $ FFFF, t.i., no 010 līdz 6553610), lai iegūtu reālo adresi. Šo doto absolūto adresi sauc par bāzes adresi. Ja tiek izmantots X reģistrs, montāžas instrukcija ir aptuveni šāda:

LDA USD C453,X

Ja tiek izmantots Y reģistrs, tas būtu apmēram šāds:

LDA $ C453,Y

X vai Y reģistra vērtību sauc par skaitīšanas vai indeksa vērtību, un tā var būt no $ 00 (010) līdz $ FF (25010). To nesauc par nobīdi.

Absolūtā indeksa adresēšanas instrukcijas ir šādas: ADC, AND, ASL (tikai X), BIT (ar akumulatoru un atmiņu, tikai ar X), CMP, DEC (tikai atmiņai un X), EOR, INC (tikai atmiņai un X), LDA. , LDX, LDY, LSR (tikai X), ORA, ROL (tikai X), ROR (tikai X), SBC, STA, STZ (tikai X).

Absolūtā netiešā adresācija
To lieto tikai ar lēciena instrukciju. Tādējādi norādītajai absolūtajai adresei ir rādītāja adrese. Rādītāja adrese sastāv no diviem baitiem. Divu baitu rādītājs norāda uz galamērķa baitu vērtību atmiņā (ir tās adrese). Tātad montāžas valodas instrukcija ir šāda:

JMP (3456 $)

Ar iekavām un $13 adresē $3456, kamēr $EB ir $3457 (= $3456 + 1) adresē, galamērķa adrese ir $13EB un $13EB ir rādītājs. Instrukcijā iekavās ir norādīti absolūtie 3456 $.

9) a) Uzrakstiet 6502 mašīnvalodas programmu, lai pievienotu 'Es tevi mīlu!' ASCII kodu virkne atmiņā, sākot no $0300 adreses ar virknes garumu. Programmai jāsākas ar 0200 USD adresi. Iegūstiet katru rakstzīmi no akumulatora, pieņemot, ka tos tur pa vienam nosūta kāda apakšprogramma. Tāpat salieciet programmu ar rokām. (Ja jums jāzina “Es tevi mīlu!” ASCII kodi, tie ir: 'I':4916, atstarpe : 2016, 'l': 6C16, 'o':6F16, 'v':7616,' e':65, 'y':7916, 'u':7516 un '!':2116. Piezīme: katrs kods aizņem 1 baitu).

b) Uzrakstiet 6502 mašīnvalodas programmu, lai pievienotu 'Es tevi mīlu!' ASCII kodu virkne atmiņā, sākot no $0300 adreses bez virknes garuma, bet beidzot ar 0016. Programmai jāsākas ar $0200 adresi. Iegūstiet katru rakstzīmi no akumulatora, pieņemot, ka tos tur pa vienam nosūta kāda apakšprogramma. Arī salieciet programmu ar rokām.

Risinājums:

a) Stratēģija: virknei ir 12 baiti: 1 baits virknes garumam un 11 baiti virknes literālam. Tātad, ir jābūt 12 iterācijām (cilpas), skaitot no 0. Tas ir: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Tie ir 12 skaitļi.

Vesels skaitlis 0 tiek ievietots X reģistrā un skaitlis 1110 = 1210 – 110 = B16 = $0B tiek ievietots adreses vietā atmiņā, piemēram, adrese $0250. Katrai iterācijai vērtība X reģistrā tiek palielināta, un rezultāts tiek salīdzināts ar $0B adreses atrašanās vietā $0250. Tūlīt pēc tam, kad vērtība X ir vienāda ar vērtību $ 0B, iterācija tiek pārtraukta. Šajā brīdī virknes garums (baitu skaits) un virknes burts aizņem 0300–030 miljardus USD (ieskaitot) adreses atrašanās vietas. Lai palielinātu atmiņas adreses no 0300 USD, tiek izmantots Y reģistrs. Kods ir:

LDA #$0B
TIE ir 0250 USD
LDX # $00
LDY#00 $
STA $ 0300 ; garums 11 tiek ievietots A ar kādu apakšprogrammu un sasniedz $ 0300
cilpa INX
TUR
CPY 0250 ASV dolāri
BEQ cilpa

b) Stratēģija: virknei ir 12 baiti: 1 baits $00 Null terminatoram un 11 baiti virknes literālam. Tātad, ir jābūt 12 iterācijām (cilpas), skaitot no 0. Tas ir: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Tie ir 12 skaitļi.

Vesels skaitlis 0 tiek ievietots X reģistrā un skaitlis 1110 = 1210 – 110 = B16 = $0B tiek ievietots adreses vietā atmiņā, piemēram, adrese $0250. Katrai iterācijai vērtība X reģistrā tiek palielināta, un rezultāts tiek salīdzināts ar $0B adreses atrašanās vietā $0250. Tūlīt pēc tam, kad vērtība X ir vienāda ar vērtību $ 0B, iterācija tiek pārtraukta. Šajā brīdī virknes literāļa baitu skaits plus rakstzīme Null aizņem 0300–030 miljardus USD (ieskaitot) adreses. Lai palielinātu atmiņas adreses no $ 0300, tiek izmantots Y reģistrs. Kods ir:

LDA #$0B
TIE ir 0250 USD
LDX # $00
LDY#00 $
STA $ 0300 ; Ar kādu apakšprogrammu “I” tiek ievadīts A, un tas maksā 0300 $
cilpa INX
TUR
CPY 0250 ASV dolāri
BEQ cilpa