Mga Solusyon sa Mga Problema ng Kabanata 4 ng Buong Online Computer Science Database at Internet Career Course mula sa Simula

Mga Solusyon Sa Mga Problema Ng Kabanata 4 Ng Buong Online Computer Science Database At Internet Career Course Mula Sa Simula



Mga Problema at Solusyon Nito

1) Sumulat ng isang programa sa wika ng pagpupulong na nagsisimula sa $0200 para sa 6502 µP at idinagdag ang mga hindi napirmahang numero ng 2A94 H (idagdag) sa 2ABF H (augend). Hayaan ang mga input at output ay nasa memorya. Gayundin, gawin ang naka-assemble na dokumento ng programa sa pamamagitan ng kamay.







Solusyon:



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



Pinagsama-samang Programa:





2) Sumulat ng isang programa sa wikang pagpupulong na nagsisimula sa $0200, para sa 6502 µP, at ibawas ang mga numerong hindi nilagdaan, 1569 H (subtrahend) mula sa 2ABF H (minuend). Hayaang nasa memorya ang mga input at output. Gumawa din ng naka-assemble na dokumento ng programa, sa pamamagitan ng kamay.



Solusyon:

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

Pinagsama-samang Programa:

3) Sumulat ng isang assembly language program para sa 6502 µP na nagbibilang mula $00 hanggang $09 gamit ang loop. Ang programa ay dapat magsimula sa $0200. Gayundin, gawin ang naka-assemble na dokumento ng programa sa pamamagitan ng kamay.

Solusyon:

LDA #$09
STA $0220 ; para sa paghahambing ng X at $09
LDX #$00
loop INX
CPX $0220
BNE loop

Pinagsama-samang Programa:

4) Sumulat ng isang programa sa wikang pagpupulong na magsisimula sa $0200 para sa 6502 µP. Ang programa ay may dalawang subroutine. Ang unang subroutine ay nagdaragdag ng mga hindi napirmahang numero ng 0203 H (augend) at 0102 H (idagdag). Ang pangalawang subroutine ay nagdaragdag ng kabuuan mula sa unang subroutine na 0305 H hanggang 0006 H (augend). Ang huling resulta ay naka-imbak sa memorya. Tawagan ang unang subroutine na FSTSUB at ang pangalawang subroutine na SECSUB. Hayaan ang mga input at output ay nasa memorya. Gayundin, gumawa ng naka-assemble na dokumento ng programa para sa buong programa sa pamamagitan ng kamay.

Solusyon:

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

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

JSR FSTSUB

Pinagsama-samang Programa:

5) Dahil sa isang ¯IRQ Ang handler ay nagdaragdag ng $02 hanggang $01 sa accumulator bilang pangunahing paghawak habang ¯NMI ay inisyu, at ang pangunahing paghawak para sa ¯NMI nagdadagdag ng $05 hanggang $04 sa accumulator, sumulat ng assembly language para sa parehong mga humahawak kasama ang kanilang mga tawag. Ang tawag sa ¯IRQ ang handler ay dapat nasa address na $0200. Ang ¯IRQ dapat magsimula ang handler sa address na $0300. Ang ¯NMI dapat magsimula ang handler sa address na $0400. Ang resulta ng ¯IRQ ang handler ay dapat ilagay sa address na $0500, at ang resulta ng ¯NMI ang handler ay dapat ilagay sa address na $0501.

Solusyon:

NMISR PHA ; Ang gawain ng NMI ay nagsisimula dito sa $0400 na address
PHX
PHY
;
LDA #$04
ADC #$05
STA $0501
;
PLY
PLX
PLA
RTI

ISR PHA ; ang tagubiling ito ay nasa $0300 na address
PHX
PHY
;
LDA #$01
ADC #$02
; JMP NMISR : nagkomento dahil hindi ito bahagi ng routine
STA $0500 ; ay pupunta sa stack
;
PLY
PLX
PLA
RTI
;
JMP ISR ; ang tagubiling ito ay nasa $0200 na address

6) Maikling ipaliwanag kung paano ginagamit ang pagtuturo ng BRK upang makagawa ng interrupt ng software sa isang 65C02 computer.

Solusyon:

Ang pangunahing paraan upang magkaroon ng interrupt na software para sa 65C02 µP ay sa paggamit ng BRK na ipinahiwatig na pagtuturo ng address. Ipagpalagay na ang pangunahing programa ay tumatakbo, at nakatagpo ito ng pagtuturo ng BRK. Mula sa puntong iyon, ang address ng susunod na pagtuturo sa PC ay dapat ipadala sa stack habang nakumpleto ang kasalukuyang pagtuturo. Ang isang subroutine upang pangasiwaan ang pagtuturo ng software ay dapat na susunod na tawagan. Ang interrupt subroutine na ito ay dapat itulak ang A, X, at Y na mga nilalaman ng rehistro sa stack. Matapos maisakatuparan ang core ng subroutine, ang mga nilalaman ng A, X, at Y na mga rehistro ay dapat ibalik mula sa stack patungo sa kanilang mga rehistro sa pamamagitan ng pagkumpleto ng subroutine. Ang huling pahayag sa routine ay RTI. Ang nilalaman ng PC ay hinila pabalik mula sa stack patungo sa PC, awtomatiko, dahil sa RTI.

7) Gumawa ng isang talahanayan na naghahambing at nagkukumpara sa isang normal na subroutine sa isang naka-interrupt na routine ng serbisyo.

Solusyon:

8) Maikling ipaliwanag ang mga pangunahing mode ng pag-address ng 65C02 µP na ibinigay sa mga halimbawa ng pagtuturo ng assembly language.

Solusyon:

Ang bawat tagubilin para sa 6502 ay isang byte, na sinusundan ng zero o higit pang mga operand.

Mode ng Agarang Pag-address
Gamit ang agarang addressing mode, pagkatapos ng operand, ay ang halaga at hindi isang memory address. Ang halaga ay kailangang unahan ng #. Kung ang halaga ay nasa hexadecimal, ang '#' ay kailangang sundan ng '$'. Ang mga agarang tagubilin sa pagtugon para sa 65C02 ay: ADC, AND, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC. Ang mambabasa ay dapat sumangguni sa dokumentasyon para sa 65C02 µP upang malaman kung paano gamitin ang mga tagubilin na nakalista dito na hindi naipaliwanag sa kabanatang ito. Ang isang halimbawa ng pagtuturo ay:

LDA #$77

Absolute Addressing Mode
Sa absolute addressing mode, mayroong isang operand. Ang operand na ito ay ang address ng halaga sa memorya (karaniwan ay nasa hexadecimal o isang label). Mayroong 64K10 = 65,53610 memory address para sa 6502 µP. Karaniwan, ang isang-byte na halaga ay nasa isa sa mga address na ito. Ang ganap na mga tagubilin sa pagtugon para sa 65C02 ay: ADC, AT, ASL, BIT, CMP, CPX, CPY, DEC, EOR, INC, JMP, JSR, LDA, LDX, LDY, LSR, ORA, ROL, ROR, SBC, STA , STX, STY, STZ, TRB, TSB. Ang mambabasa ay dapat sumangguni sa dokumentasyon para sa 65C02 µP upang malaman kung paano gamitin ang mga tagubiling nakalista dito pati na rin para sa iba pang mga mode ng pagtugon na hindi naipaliwanag sa kabanatang ito. Ang isang halimbawa ng pagtuturo ay:

SILA AY $1234

Implied Addressing Mode
Sa ipinahiwatig na mode ng pagtugon, walang operand. Ang anumang rehistro ng µP na kasangkot ay ipinahiwatig ng pagtuturo. Ang ipinahiwatig na mga tagubilin sa pagtugon para sa 65C02 ay: 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. Ang isang halimbawa ng pagtuturo ay:

DEX: Bawasan ang X register ng isang unit.

Relative Addressing Mode
Ang relative addressing mode ay tumatalakay lamang sa mga tagubilin ng sangay. Sa relative addressing mode, mayroon lamang isang operand. Ito ay isang halaga mula -12810 hanggang +12710. Ang halagang ito ay tinatawag na isang offset. Batay sa tanda, ang halagang ito ay idinaragdag o ibinabawas mula sa susunod na pagtuturo ng Program Counter sa resulta sa address ng nilalayong susunod na pagtuturo. Ang mga tagubilin sa relative address mode ay: BCC, BCS, BEQ, BMI, BNE, BPL, BRA, BVC, BVS. Ang mga halimbawa ng pagtuturo ay:

BNE $7F : (sangay kung Z = 0 sa status register, P)

na nagdaragdag ng 127 sa kasalukuyang program counter (address na isasagawa) at simulan ang pagpapatupad ng pagtuturo sa address na iyon. Katulad nito:

BEQ $F9 : (branch kung Z = : sa status register, P)

na nagdaragdag ng -7 sa kasalukuyang counter ng programa at simulan ang pagpapatupad sa bagong address ng counter ng programa. Ang operand ay isang complement number ng dalawa.

Absolute Index Addressing
Gamit ang absolute index addressing, ang nilalaman ng X o Y register ay idinaragdag sa ibinigay na absolute address (kahit saan mula $0000 hanggang $FFFF, ibig sabihin, mula 010 hanggang 6553610) upang magkaroon ng totoong address. Ang ibinigay na ganap na address na ito ay tinatawag na base address. Kung ginamit ang X register, ang pagtuturo ng pagpupulong ay ganito:

LDA $C453,X

Kung gagamitin ang rehistro ng Y, magiging ganito ito:

LDA $C453,Y

Ang value para sa X o Y register ay tinatawag na count o index value at maaari itong maging kahit saan mula $00 (010) hanggang $FF (25010). Hindi ito tinatawag na offset.

Ang absolute index addressing instructions ay: ADC, AND, ASL (X lang), BIT (may accumulator at memory, na may X lang), CMP, DEC (memory at X lang), EOR, INC (memory at X lang), LDA , LDX, LDY, LSR (X lang), ORA, ROL (X lang), ROR (X lang), SBC, STA, STZ (X lang).

Absolute Indirect Addressing
Ito ay ginagamit lamang sa pagtuturo ng pagtalon. Sa pamamagitan nito, ang ibinigay na ganap na address ay may pointer address. Ang pointer address ay binubuo ng dalawang byte. Ang dalawang-bytes na pointer ay tumuturo sa (ay ang address ng) ang patutunguhang halaga ng byte sa memorya. Kaya, ang pagtuturo ng wika sa pagpupulong ay ang mga sumusunod:

JMP ($3456)

Gamit ang mga panaklong at $13 sa $3456 na address habang ang $EB ay nasa $3457 (= $3456 + 1) na address, ang patutunguhang address ay $13EB at $13EB ang pointer. Ang ganap na $3456 ay nasa panaklong sa pagtuturo.

9) a) Sumulat ng 6502 machine language program para ilagay ang 'Mahal kita!' string ng mga ASCII code sa memorya, simula sa $0300 na address na may haba ng string. Dapat magsimula ang programa sa $0200 na address. Kunin ang bawat karakter mula sa accu-mulator, sa pag-aakalang ipinapadala sila doon nang paisa-isa ng ilang subroutine. Gayundin, bilang-semble ang programa sa pamamagitan ng kamay. (Kung kailangan mong malaman ang mga ASCII code para sa “I love you!”, narito ang mga ito: 'I':4916, space : 2016, 'l': 6C16, 'o':6F16, 'v':7616, ' e':65, 'y':7916, 'u':7516, at '!':2116. Tandaan: ang bawat code ay sumasakop ng 1 byte).

b) Sumulat ng 6502 machine language program para ilagay ang 'Mahal kita!' string ng mga ASCII code sa memorya, simula sa $0300 na address na walang haba ng string ngunit nagtatapos sa 0016. Dapat magsimula ang program sa $0200 na address. Kunin ang bawat character mula sa accumulator, sa pag-aakalang ipinapadala sila doon nang paisa-isa ng ilang subroutine. Gayundin, tipunin ang programa sa pamamagitan ng kamay.

Solusyon:

a) Diskarte: Mayroong 12 byte para sa string: 1 byte para sa haba ng string at 11 byte para sa literal na string. Kaya, kailangang mayroong 12 iterations (loopings) na nagbibilang mula sa 0. Iyon ay: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Ito ay 12 na numero.

Ang 0 integer ay inilalagay sa X register at ang numerong 1110 = 1210 – 110 = B16 = $0B ay inilalagay sa isang lokasyon ng address sa memorya, sabihin ang address na $0250. Para sa bawat pag-ulit, ang halaga sa X register ay dinadagdagan, at ang resulta ay inihambing sa $0B sa $0250 na lokasyon ng address. Pagkatapos lamang na ang halaga sa X ay katumbas ng halaga ng $0B, hihinto ang pag-ulit. Sa puntong ito, ang haba (bilang ng mga byte) ng string at literal na string ay sumasakop sa $0300 hanggang $030B (kasama) na mga lokasyon ng address. Upang madagdagan ang mga address ng memorya mula $0300, ginagamit ang Y register. Ang code ay:

LDA #$0B
SILA AY $0250
LDX #$00
LDY#$00
STA $0300 ; ang haba ng 11 ay inilalagay sa A ng ilang subroutine at napupunta sa $0300
loop INX
DOON
CPY $0250
BEQ loop

b) Diskarte: Mayroong 12 byte para sa string: 1 byte para sa $00 Null terminator at 11 byte para sa literal na string. Kaya, kailangang mayroong 12 iterations (loopings) na nagbibilang mula sa 0. Iyon ay: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Ito ay 12 na numero.

Ang 0 integer ay inilalagay sa X register at ang numerong 1110 = 1210 – 110 = B16 = $0B ay inilalagay sa isang lokasyon ng address sa memorya, sabihin ang address na $0250. Para sa bawat pag-ulit, ang halaga sa X register ay dinadagdagan, at ang resulta ay inihambing sa $0B sa $0250 na lokasyon ng address. Pagkatapos lamang na ang halaga sa X ay katumbas ng halaga ng $0B, hihinto ang pag-ulit. Sa puntong ito, ang bilang ng mga byte ng string literal kasama ang Null na character ay sumasakop sa $0300 hanggang $030B (kasama) na mga lokasyon ng address. Upang madagdagan ang mga address ng memorya mula $0300, ginagamit ang Y register. Ang code ay:

LDA #$0B
SILA AY $0250
LDX #$00
LDY#$00
STA $0300 ; Ang 'I' ay inilalagay sa A ng ilang subroutine at napupunta sa $0300
loop INX
DOON
CPY $0250
BEQ loop