Baştan Baştan Tam Çevrimiçi Bilgisayar Bilimi Veritabanı ve İnternet Kariyer Kursu 4. Bölümdeki Sorunların Çözümleri

Bastan Bastan Tam Cevrimici Bilgisayar Bilimi Veritabani Ve Internet Kariyer Kursu 4 Bolumdeki Sorunlarin Cozumleri



Sorunlar ve Çözümleri

1) 6502 µP için $0200'dan başlayan ve işaretsiz 2A94 sayılarını toplayan bir montaj dili programı yazın. H (ekleyin) 2ABF'ye H (artı). Giriş ve çıkışların hafızada olmasına izin verin. Ayrıca, birleştirilmiş program belgesini elle oluşturun.







Çözüm:



CLC
LDA 0213 ABD Doları
ADC 0215$
STA $0217
LDA 0214 ABD doları
ADC 0216$
STA $0218



Birleştirilmiş Program:





2) 6502 µP için $0200'dan başlayan ve işaretsiz sayılar olan 1569'u çıkaran bir montaj dili programı yazın. H (çıkarılan) 2ABF'den H (eksi). Giriş ve çıkışların hafızada olmasına izin verin. Ayrıca birleştirilmiş program belgesini elle üretin.



Çözüm:

SEC
LDA 0213 ABD Doları
SBC 0215$
STA $0217
LDA 0214 ABD doları
SBC$0216
STA $0218

Birleştirilmiş Program:

3) 6502 µP için bir döngü kullanarak $00'dan $09'a kadar sayan bir montaj dili programı yazın. Program 0200 dolardan başlamalıdır. Ayrıca, birleştirilmiş program belgesini elle oluşturun.

Çözüm:

LDA#09$
STA $0220; X ile 09$'ı karşılaştırdığınız için
LDX#00$
döngü INX
CPX $0220
BNE döngüsü

Birleştirilmiş Program:

4) 6502 µP için $0200'dan başlayan bir montaj dili programı yazın. Programın iki alt programı bulunmaktadır. İlk alt program 0203'ün işaretsiz sayılarını toplar H (büyüt) ve 0102 H (ekleyin). İkinci alt program, birinci alt programdaki 0305 değerini toplar. H 0006'ya H (artı). Nihai sonuç hafızada saklanır. İlk altprogram olan FSTSUB'u ve ikinci altprogram olan SECSUB'u çağırın. Giriş ve çıkışlar hafızada olsun. Ayrıca tüm programın birleştirilmiş program belgesini elle oluşturun.

Çözüm:

SECSUB CLC
LDA 021 ABD doları
ADC 0234$
STA $0236
LDA 021 Milyar Dolar
ADC 0235$
STA $0237
GZS

FSTSUB CLC
LDA 0216 ABD doları
ADC 0218 ABD doları
STA $021A
LDA 0217 ABD doları
ADC 0219$
STA $021 milyar
GZS

JSR FSTSUB

Birleştirilmiş Program:

5) Verilen bir ¯IRQ işleyici, çekirdek işleme olarak akümülatöre 02 ila 01 ABD Doları eklerken ¯NMI verilir ve temel işlemler ¯NMI akümülatöre 05 ila 04 ABD Doları eklerseniz, her iki işleyici için çağrıları da dahil olmak üzere bir montaj dili yazın. Çağrı ¯IRQ işleyicinin 0200$ adresinde olması gerekir. ¯IRQ işleyicinin 0300$ adresinden başlaması gerekir. ¯NMI işleyicinin 0400$ adresinden başlaması gerekir. Sonuç ¯IRQ işleyicinin 0500$ adresine yerleştirilmesi gerekir ve sonuç ¯NMI işleyicinin $0501 adresine yerleştirilmesi gerekir.

Çözüm:

NMISR PHA; NMI rutini burada 0400$ adresinde başlıyor
PHX
FİZ
;
LDA#04$
ADC#05$
STA $0501
;
KAT
PLX
PLA
RTI

ISR PHA'sı; bu talimat 0300 $ adresindedir
PHX
FİZ
;
LDA#01$
ADC#02$
; JMP NMISR: rutinin bir parçası olmadığı için yorum yapıldı
STA$0500; yığına gidecek
;
KAT
PLX
PLA
RTI
;
JMP ISR'si; bu talimat 0200$ adresindedir

6) 65C02 bilgisayarında yazılım kesmesini oluşturmak için BRK komutunun nasıl kullanıldığını kısaca açıklayın.

Çözüm:

65C02 µP için bir yazılım kesintisine sahip olmanın ana yolu, BRK'nın ima ettiği adres komutunun kullanılmasıdır. Ana programın çalıştığını ve BRK talimatıyla karşılaştığını varsayalım. Bu noktadan itibaren, PC'deki bir sonraki talimatın adresi, mevcut talimat tamamlanırken yığına gönderilmelidir. Daha sonra yazılım talimatını yönetecek bir alt program çağrılmalıdır. Bu kesme altyordamı A, X ve Y kayıt içeriğini yığına itmelidir. Altprogramın çekirdeği yürütüldükten sonra, A, X ve Y yazmaçlarının içerikleri, tamamlama altyordamı tarafından yığından kendi yazmaçlarına geri çekilmelidir. Rutinteki son ifade RTI'dır. PC içeriği de RTI nedeniyle yığından PC'ye otomatik olarak geri çekilir.

7) Normal bir alt rutini bir kesme servis rutini ile karşılaştıran ve karşılaştıran bir tablo oluşturun.

Çözüm:

8) 65C02 µP'nin ana adresleme modlarını, montaj dili komut örnekleri vererek kısaca açıklayınız.

Çözüm:

6502'nin her talimatı bir bayttır ve ardından sıfır veya daha fazla işlenen gelir.

Anında Adresleme Modu
Anında adresleme modunda işlenenden sonra bellek adresi değil değer gelir. Değerin önünde # işareti bulunmalıdır. Değer onaltılık sayı ise “#” ardından “$” gelmelidir. 65C02 için acil adresleme talimatları şunlardır: ADC, AND, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC. Okuyucu, bu bölümde açıklanmayan, burada listelenen talimatların nasıl kullanılacağını öğrenmek için 65C02 µP belgelerine başvurmalıdır. Örnek bir talimat şöyledir:

LDA#77$

Mutlak Adresleme Modu
Mutlak adresleme modunda bir işlenen vardır. Bu işlenen, bellekteki değerin adresidir (genellikle onaltılık veya etiket halinde). 6502 µP için 64K10 = 65,53610 hafıza adresi bulunmaktadır. Tipik olarak, bir baytlık değer bu adreslerden birindedir. 65C02 için mutlak adresleme talimatları şunlardır: 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. Okuyucu, burada listelenen talimatların yanı sıra bu bölümde açıklanmayan diğer adresleme modları için nasıl kullanılacağını öğrenmek için 65C02 µP belgelerine başvurmalıdır. Örnek bir talimat şöyledir:

1234$

Örtülü Adresleme Modu
Örtük adresleme modunda işlenen yoktur. İlgili herhangi bir µP kaydı talimat tarafından ima edilir. 65C02 için zımni adresleme talimatları şunlardır: BRK, CLC, CLD, CLI, CLV, DEX, DEY, INX, INY, NOP, PHA, PHP, PHX, PHY, PLA, PLP, PLX, PLY, RTI, RTS, SEC , SED, SEI, VERGİ, TAY, TSX, TXA, TXS, TYA. Örnek bir talimat şöyledir:

DEX: X kaydını bir birim azaltın.

Göreceli Adresleme Modu
Göreceli adresleme modu yalnızca dallanma talimatlarıyla ilgilenir. Göreceli adresleme modunda yalnızca bir işlenen vardır. -12810 ile +12710 arasında bir değerdir. Bu değere ofset adı verilir. İşarete bağlı olarak bu değer, Program Sayacı'nın bir sonraki talimatından amaçlanan bir sonraki talimatın adresindeki sonuca eklenir veya çıkarılır. Göreli adres modu talimatları şunlardır: BCC, BCS, BEQ, BMI, BNE, BPL, BRA, BVC, BVS. Talimat örnekleri şunlardır:

BNE $7F : (durum kaydında Z = 0 ise dallanma, P)

mevcut program sayacına (yürütülecek adres) 127 ekler ve talimatı bu adreste yürütmeye başlar. Benzer şekilde:

BEQ $F9 : (Z = : durum kaydında ise dal, P)

mevcut program sayacına -7 ekler ve yürütmeyi yeni program sayacı adresinde başlatır. İşlenen ikinin tamamlayıcı sayısıdır.

Mutlak Dizin Adresleme
Mutlak indeks adresleme ile, X veya Y kaydının içeriği, gerçek adresi elde etmek için verilen mutlak adrese (0000 $'dan $FFFF'ye, yani 010'dan 6553610'a kadar herhangi bir yerde) eklenir. Verilen bu mutlak adrese temel adres denir. X kaydı kullanılıyorsa montaj talimatı şuna benzer:

LDA $C453,X

Y kaydı kullanılırsa, şöyle olur:

LDA $C453,Y

X veya Y kaydının değerine sayım veya indeks değeri adı verilir ve 00 $ (010) ila $FF (25010) arasında herhangi bir yerde olabilir. Buna ofset denmez.

Mutlak indeks adresleme talimatları şunlardır: ADC, AND, ASL (yalnızca X), BIT (akümülatör ve bellekle, yalnızca X ile), CMP, DEC (yalnızca bellek ve X), EOR, INC (yalnızca bellek ve X), LDA , LDX, LDY, LSR (yalnızca X), ORA, ROL (yalnızca X), ROR (yalnızca X), SBC, STA, STZ (yalnızca X).

Mutlak Dolaylı Adresleme
Bu yalnızca atlama komutuyla birlikte kullanılır. Bununla verilen mutlak adresin bir işaretçi adresi vardır. İşaretçi adresi iki bayttan oluşur. İki baytlık işaretçi, bellekteki hedef bayt değerini işaret eder (adresidir). Yani, montaj dili talimatı aşağıdaki gibidir:

JMP (3456$)

Parantez ve $13 ile $3456 adresi, $EB ise $3457 (= $3456 + 1) adresiyle, hedef adres $13EB ve $13EB işaretçidir. Mutlak $3456, talimatta parantez içindedir.

9) a) “Seni seviyorum!” ifadesini koyacak bir 6502 makine dili programı yazın. 0300 $ adresinden başlayarak dizenin uzunluğuyla birlikte bellekteki ASCII kodları dizesi. Program 0200$ adresinden başlamalıdır. Her karakteri akümülatörden alın, bunların oraya birer birer alt program tarafından gönderildiklerini varsayalım. Ayrıca programı elle birleştirin. (“Seni seviyorum!” için ASCII kodlarını bilmeniz gerekiyorsa işte bunlar: 'I':4916, space : 2016, 'l': 6C16, 'o':6F16, 'v':7616, ' e':65, 'y':7916, 'u':7516 ve '!':2116. Not: her kod 1 bayt yer kaplar).

b) “Seni seviyorum!” ifadesini içeren bir 6502 makine dili programı yazın. bellekteki ASCII kodları dizisi, dizenin uzunluğu olmadan 0300 $ adresinden başlayıp 0016 ile bitiyor. Program 0200 $ adresinden başlamalıdır. Her karakteri akümülatörden alın, bunların oraya birer alt program tarafından gönderildiğini varsayarak. Ayrıca programı elle birleştirin.

Çözüm:

a) Strateji: Dize için 12 bayt vardır: dize uzunluğu için 1 bayt ve dize değişmez değeri için 11 bayt. Yani 0'dan itibaren 12 tekrar (döngü) olması gerekiyor. Yani: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Bunlar 12 sayıdır.

0 tamsayı X kaydına konur ve 1110 = 1210 – 110 = B16 = $0B sayısı hafızadaki bir adres konumuna, örneğin $0250 adresine konur. Her yineleme için, X kaydındaki değer artırılır ve sonuç, 0250 $ adres konumundaki $0B ile karşılaştırılır. X'teki değer 0B $ değerine eşitlendikten hemen sonra yineleme durur. Bu noktada, dizenin uzunluğu (bayt sayısı) ve dize değişmezi 0300 ila 030 Milyar ABD Doları (dahil) adres konumlarını kaplar. Bellek adreslerini 0300$'dan artırmak için Y kaydı kullanılır. Kod:

LDA #0 Milyar Dolar
0250$
LDX#00$
LDY#00$
STA $0300; 11'in uzunluğu bir alt program tarafından A'ya konur ve 0300 $'a gider
döngü INX
ORADA
CPY 0250$
BEQ döngüsü

b) Strateji: Dize için 12 bayt vardır: $00 Boş sonlandırıcı için 1 bayt ve dize değişmez değeri için 11 bayt. Yani 0'dan itibaren 12 tekrar (döngü) olması gerekiyor. Yani: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Bunlar 12 sayıdır.

0 tamsayı X kaydına konur ve 1110 = 1210 – 110 = B16 = $0B sayısı hafızadaki bir adres konumuna, örneğin $0250 adresine konur. Her yineleme için, X kaydındaki değer artırılır ve sonuç, 0250 $ adres konumundaki $0B ile karşılaştırılır. X'teki değer 0B $ değerine eşitlendikten hemen sonra yineleme durur. Bu noktada, dize değişmez değeri artı Null karakterinin bayt sayısı, 0300 ila 030 Milyar ABD Doları (dahil) adres konumlarını kaplar. Bellek adreslerini 0300$'dan artırmak için Y kaydı kullanılır. Kod:

LDA #0 Milyar Dolar
0250$
LDX#00$
LDY#00$
STA $0300; 'I' bir alt program tarafından A'ya konur ve 0300$'a gider
döngü INX
ORADA
CPY 0250$
BEQ döngüsü