Penyelesaian Masalah Bab 4 Pangkalan Data Sains Komputer Dalam Talian Penuh dan Kursus Kerjaya Internet dari Awal

Penyelesaian Masalah Bab 4 Pangkalan Data Sains Komputer Dalam Talian Penuh Dan Kursus Kerjaya Internet Dari Awal



Masalah dan Penyelesaiannya

1) Tulis program bahasa himpunan yang bermula pada $0200 untuk 6502 µP dan tambahkan nombor yang tidak ditandatangani bagi 2A94 H (tambah) kepada 2ABF H (augend). Biarkan input dan output berada dalam ingatan. Juga, hasilkan dokumen program yang dipasang dengan tangan.







Penyelesaian:



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



Program Berhimpun:





2) Tulis program bahasa himpunan yang bermula pada $0200, untuk 6502 µP, dan tolak nombor tidak bertanda, 1569 H (subtrahend) daripada 2ABF H (minuend). Biarkan input dan output berada dalam ingatan. Juga menghasilkan dokumen program yang dipasang, dengan tangan.



Penyelesaian:

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

Program Berhimpun:

3) Tulis program bahasa himpunan untuk 6502 µP yang dikira dari $00 hingga $09 menggunakan gelung. Program ini harus bermula pada $0200. Juga, hasilkan dokumen program yang dipasang dengan tangan.

Penyelesaian:

LDA #$09
STA $0220 ; untuk membandingkan X dan $09
LDX #$00
gelung INX
CPX $0220
gelung BNE

Program Berhimpun:

4) Tulis program bahasa himpunan yang bermula pada $0200 untuk 6502 µP. Program ini mempunyai dua subrutin. Subrutin pertama menambah nombor yang tidak ditandatangani 0203 H (augend) dan 0102 H (tambah). Subrutin kedua menambah jumlah daripada subrutin pertama iaitu 0305 H kepada 0006 H (augend). Hasil akhir disimpan dalam ingatan. Panggil subrutin pertama iaitu FSTSUB dan subrutin kedua iaitu SECSUB. Biarkan input dan output berada dalam ingatan. Juga, hasilkan dokumen program yang dipasang untuk keseluruhan program dengan tangan.

Penyelesaian:

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

Program Berhimpun:

5) Memandangkan an ¯IRQ pengendali menambah $02 kepada $01 pada penumpuk sebagai pengendalian teras manakala ¯NMI dikeluarkan, dan pengendalian teras untuk ¯NMI menambah $05 kepada $04 pada penumpuk, tulis bahasa himpunan untuk kedua-dua pengendali termasuk panggilan mereka. Panggilan kepada ¯IRQ pengendali hendaklah berada di alamat $0200. The ¯IRQ pengendali hendaklah bermula pada alamat $0300. The ¯NMI pengendali hendaklah bermula pada alamat $0400. Hasil daripada ¯IRQ pengendali hendaklah diletakkan di alamat $0500, dan hasil daripada ¯NMI pengendali hendaklah diletakkan di alamat $0501.

Penyelesaian:

NMISR PHA ; Rutin NMI bermula di sini di alamat $0400
PHX
PHY
;
LDA #$04
ADC #$05
STA $0501
;
PLY
PLX
PLA
RTI

ISR PHA ; arahan ini adalah di alamat $0300
PHX
PHY
;
LDA #$01
ADC #$02
; JMP NMISR : mengulas kerana ia bukan sebahagian daripada rutin
STA $0500 ; akan pergi ke timbunan
;
PLY
PLX
PLA
RTI
;
JMP ISR ; arahan ini adalah di alamat $0200

6) Terangkan secara ringkas bagaimana arahan BRK digunakan untuk menghasilkan gangguan perisian dalam komputer 65C02.

Penyelesaian:

Cara utama untuk mempunyai gangguan perisian untuk 65C02 µP adalah dengan menggunakan arahan alamat tersirat BRK. Anggapkan bahawa program utama sedang berjalan, dan ia menghadapi arahan BRK. Dari titik itu, alamat arahan seterusnya dalam PC harus dihantar ke timbunan apabila arahan semasa selesai. Subrutin untuk mengendalikan arahan perisian hendaklah dipanggil seterusnya. Subrutin sampukan ini harus menolak kandungan daftar A, X dan Y ke tindanan. Selepas teras subrutin dilaksanakan, kandungan daftar A, X, dan Y harus ditarik balik dari timbunan ke daftarnya dengan subrutin yang melengkapkan. Pernyataan terakhir dalam rutin ialah RTI. Kandungan PC juga ditarik balik dari timbunan ke PC, secara automatik, kerana RTI.

7) Hasilkan jadual yang membandingkan dan membezakan subrutin biasa dengan rutin perkhidmatan gangguan.

Penyelesaian:

8) Terangkan secara ringkas mod pengalamatan utama 65C02 µP diberikan contoh arahan bahasa himpunan.

Penyelesaian:

Setiap arahan untuk 6502 ialah satu bait, diikuti dengan sifar atau lebih operan.

Mod Pengalamatan Segera
Dengan mod pengalamatan segera, selepas operan, ialah nilai dan bukan alamat memori. Nilai perlu didahului dengan #. Jika nilainya dalam perenambelasan, maka “#” perlu diikuti dengan “$”. Arahan pengalamatan segera untuk 65C02 ialah: ADC, DAN, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC. Pembaca harus merujuk dokumentasi untuk 65C02 µP untuk mengetahui cara menggunakan arahan yang disenaraikan di sini yang belum dijelaskan dalam bab ini. Contoh arahan ialah:

LDA #$77

Mod Pengalamatan Mutlak
Dengan mod pengalamatan mutlak, terdapat satu operan. Operan ini ialah alamat nilai dalam ingatan (biasanya dalam perenambelasan atau label). Terdapat 64K10 = 65,53610 alamat memori untuk 6502 µP. Biasanya, nilai satu bait berada pada salah satu alamat ini. Arahan pengalamatan mutlak untuk 65C02 ialah: 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. Pembaca harus merujuk dokumentasi untuk 65C02 µP untuk mengetahui cara menggunakan arahan yang disenaraikan di sini serta untuk mod pengalamatan yang lain yang belum dijelaskan dalam bab ini. Contoh arahan ialah:

IALAH $1234

Mod Pengalamatan Tersirat
Dengan mod pengalamatan tersirat, tiada operan. Sebarang daftar µP yang terlibat adalah tersirat oleh arahan tersebut. Arahan pengalamatan tersirat untuk 65C02 ialah: BRK, CLC, CLD, CLI, CLV, DEX, DEY, INX, INY, NOP, PHA, PHP, PHX, PHY, PLA, PLP, PLX, PLY, RTI, RTS, SEC , SED, SEI, CUKAI, TAY, TSX, TXA, TXS, TYA. Contoh arahan ialah:

DEX: Kurangkan daftar X dengan satu unit.

Mod Pengalamatan Relatif
Mod pengalamatan relatif hanya berurusan dengan arahan cawangan. Dengan mod pengalamatan relatif, hanya terdapat satu operan. Ia adalah nilai dari -12810 hingga +12710. Nilai ini dipanggil offset. Berdasarkan tanda, nilai ini ditambah atau ditolak daripada arahan seterusnya bagi Kaunter Program kepada keputusan dalam alamat arahan seterusnya yang dimaksudkan. Arahan mod alamat relatif ialah: BCC, BCS, BEQ, BMI, BNE, BPL, BRA, BVC, BVS. Contoh arahan adalah:

BNE $7F : (cawangan jika Z = 0 dalam daftar status, P)

yang menambah 127 pada kaunter program semasa (alamat untuk dilaksanakan) dan mula melaksanakan arahan di alamat tersebut. Begitu juga:

BEQ $F9 : (cawangan jika Z = : dalam daftar status, P)

yang menambah -7 pada kaunter program semasa dan mulakan pelaksanaan di alamat kaunter program baharu. Operan ialah nombor pelengkap dua.

Alamat Indeks Mutlak
Dengan pengalamatan indeks mutlak, kandungan daftar X atau Y ditambahkan pada alamat mutlak yang diberikan (di mana-mana dari $0000 hingga $FFFF, iaitu dari 010 hingga 6553610) untuk mendapatkan alamat sebenar. Alamat mutlak yang diberikan ini dipanggil alamat asas. Jika daftar X digunakan, arahan pemasangan adalah seperti ini:

LDA $C453,X

Jika daftar Y digunakan, ia akan menjadi seperti ini:

LDA $C453,Y

Nilai untuk daftar X atau Y dipanggil kiraan atau nilai indeks dan ia boleh berada di mana-mana dari $00 (010) hingga $FF (25010). Ia tidak dipanggil offset.

Arahan alamat indeks mutlak ialah: ADC, AND, ASL (X sahaja), BIT (dengan penumpuk dan memori, dengan X sahaja), CMP, DEC (memori dan X sahaja), EOR, INC (memori dan X sahaja), LDA , LDX, LDY, LSR (X sahaja), ORA, ROL (X sahaja), ROR (X sahaja), SBC, STA, STZ (X sahaja).

Alamat Tidak Langsung Mutlak
Ini hanya digunakan dengan arahan lompat. Dengan ini, alamat mutlak yang diberikan mempunyai alamat penunjuk. Alamat penuding terdiri daripada dua bait. Penunjuk dua bait menghala ke (adalah alamat) nilai bait destinasi dalam ingatan. Jadi, arahan bahasa himpunan adalah seperti berikut:

JMP ($3456)

Dengan kurungan dan $13 dalam $3456 alamat manakala $EB dalam $3457 (= $3456 + 1), alamat destinasi ialah $13EB dan $13EB ialah penunjuk. $3456 mutlak ada dalam kurungan dalam arahan.

9) a) Tulis program bahasa mesin 6502 untuk meletakkan 'Saya sayang awak!' rentetan kod ASCII dalam ingatan, bermula dari alamat $0300 dengan panjang rentetan. Program ini harus bermula di alamat $0200. Dapatkan setiap aksara daripada akumulator, dengan mengandaikan bahawa ia dihantar ke sana satu demi satu oleh beberapa subrutin. Juga, susun atur cara dengan tangan. (Jika anda perlu mengetahui kod ASCII untuk “I love you!”, berikut ialah: 'I':4916, space : 2016, 'l': 6C16, 'o':6F16, 'v':7616, ' e':65, 'y':7916, 'u':7516, dan '!':2116. Nota: setiap kod menduduki 1 bait).

b) Tulis program bahasa mesin 6502 untuk meletakkan 'Saya sayang kamu!' rentetan kod ASCII dalam ingatan, bermula dari alamat $0300 tanpa panjang rentetan tetapi berakhir pada 0016. Program harus bermula pada alamat $0200. Dapatkan setiap aksara daripada penumpuk, dengan mengandaikan bahawa ia dihantar ke sana satu demi satu oleh beberapa subrutin. Juga, kumpulkan program dengan tangan.

Penyelesaian:

a) Strategi: Terdapat 12 bait untuk rentetan: 1 bait untuk panjang rentetan dan 11 bait untuk rentetan literal. Jadi, perlu ada 12 lelaran (gelung) mengira daripada 0. Iaitu: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Ini ialah 12 nombor.

Integer 0 dimasukkan ke dalam daftar X dan nombor 1110 = 1210 – 110 = B16 = $0B dimasukkan ke dalam lokasi alamat dalam ingatan, katakan alamat $0250. Untuk setiap lelaran, nilai dalam daftar X ditambah dan hasilnya dibandingkan dengan $0B di lokasi alamat $0250. Hanya selepas nilai dalam X bersamaan dengan nilai $0B, lelaran berhenti. Pada ketika ini, panjang (bilangan bait) rentetan dan rentetan literal menduduki lokasi alamat $0300 hingga $030B (termasuk). Untuk menambah alamat memori daripada $0300, daftar Y digunakan. Kodnya ialah:

LDA #$0B
IALAH $0250
LDX #$00
LDY#$00
STA $0300 ; panjang 11 dimasukkan ke dalam A oleh beberapa subrutin dan menjadi $0300
gelung INX
ADA
CPY $0250
gelung BEQ

b) Strategi: Terdapat 12 bait untuk rentetan: 1 bait untuk $00 Null terminator dan 11 bait untuk rentetan literal. Jadi, perlu ada 12 lelaran (gelung) mengira daripada 0. Iaitu: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Ini ialah 12 nombor.

Integer 0 dimasukkan ke dalam daftar X dan nombor 1110 = 1210 – 110 = B16 = $0B dimasukkan ke dalam lokasi alamat dalam ingatan, katakan alamat $0250. Untuk setiap lelaran, nilai dalam daftar X ditambah dan hasilnya dibandingkan dengan $0B di lokasi alamat $0250. Hanya selepas nilai dalam X bersamaan dengan nilai $0B, lelaran berhenti. Pada ketika ini, bilangan bait rentetan literal ditambah aksara Null menduduki lokasi alamat $0300 hingga $030B (termasuk). Untuk menambah alamat memori daripada $0300, daftar Y digunakan. Kodnya ialah:

LDA #$0B
IALAH $0250
LDX #$00
LDY#$00
STA $0300 ; 'Saya' dimasukkan ke dalam A oleh beberapa subrutin dan pergi ke $0300
gelung INX
ADA
CPY $0250
gelung BEQ