Plazma sayı 6, sayfa 50

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 50

Amiga Assembly kursumuzun 3. bölümünde artık yavaş yavaş görsel sonuçları olan konulara gireceğiz. Geçen sayımızda dallanma komutları ve donanım yazmaçlarını (hardware registerları) görmüştük. Amiga'nın görüntü ile ilgili konularına girmeden önce öğrenmemiz gereken son bir konu daha var:

Adresleme Modları

Önceki sayılarımızda 68000 komutları hakkında bilgi edinmiştik, bu komutların çoğu için 12 farklı adresleme modu vardır, 68020 ve üst modellerinde 6 mod daha vardır. 68000'de kod yazmanın kolaylığı bu adresleme modlarının çokluğundan gelir.

68000 Adresleme Modları (Addressing Modes)

1. Data Register Direct, Dn

2. Address Register Direct, An 3. Address Register Indirect, (An) 4. Address Register Indirect with Post-Increment, (An)+ 5. Address Register Indirect with Pre-Decrement, -(An) 6. Address Register Indirect with Displacement, d(An) 7. Address Register Indirect with Index, d(An,Rx) 8. Absolute Short, w 9. Absolute Long, l 10. Program Counter with Displacement, d(PC) 11. Program Counter with Index, d(PC,Rx)

12. #x

Burada kullanılan sembollerin anlamları aşağıdaki gibidir:

1. Dn: Data Register (n=0-7)

2. An Address Register (n - 0-7) 3. b 08-bit sabit 4. w 16-bit sabit

5. l: 32-bit sabit

6. x: 8-, 16-, 32-bit sabit

7. Rx: Index Register (Dn veya An)

Şimdi bu adresleme modlarının her birini örneklerle inceleyelim:

Data Register Direct:

CLR.W D3 SUB.L D2,D1

Address Register Direct:

Bu mod Data Register Direct ile aynı yazım şekline sahiptir, ancak adres yazmacı kullanıldığında .B (byte) eki kullanılamaz.

MOVE.L CLR.W

A0,DO A5

Address Register Indirect:

Bu mod ile bir adres yazmacının gösterdiği (point ettiği) adresteki değeri okunur.

MOVE.L

Burada dikkat edilmesi gereken en önemli nokta, .L veya .W ile yalnızca bir çift adresten okuma yapabilirsiniz. Örneğin aşağıdaki kodu çalıştırdığınızda, eğer <label> bir çift adres değilse bilgisayarınız kilitlenecektir.

LEA LABEL, A0 MOVE.B RTS LABEL:

DC.B $01,$02,$03

Bu durumu önlemek için EVEN veya ALIGN assembler direktiflerini kullanmak gerekir.

LEA LABEL, A0 MOVE.B RTS EVEN ;Gerekirse 1 byte atlayarak ;sonraki adresi cift yapar LABEL:

DC.B $01,$02,$03

Address Register Indirect with Post-Increment/Pre-Decrement:

Bu mod bir önceki ile aynıdır, ancak adresi okuma işlemini yaptıktan sonra kullanılan adres yazmacının değerini işlem boyutu kadar (.B, .W, .L için sırasıyla 1, 2, 4) arttırır/azaltır.

Klavyeyle gezinmek için ← ve → tuşları.