Plazma sayı 6, sayfa 51

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 51

;A0'daki değeri oku ve A0'ı 4 arttır

MOVE.L ;Aldaki degeri oku ve Ali 2 azalt MOVE.W -(A1),DO

Address Register Indirect with Displacement:

Verilen adres yazmacına istenen değer eklenir ve yeni adresteki değer okunur. Yeni adres compile-time'da hesaplanır, yani adres yazmacının değeri değişmez.

degerine 4 ekle ;adresteki degeri D0a al MOVE.L 4(A1),DO

Burada eklenen değer 16 bit işaretli bir sayıdır, yani $7FFF'den büyük olması durumunda çıkarma işlemi yapılacaktır. MOVE.W -30(A5),D0 şeklinde de kullanabilirsiniz.

Address Register Indirect with Index:

Yukarıdaki mod ile aynıdır, ancak okunacak adresi hesaplarken başka bir adres yazmacının değeri de eklenir.

MOVE.L 4(AO,A1L.L),DO

D0'ın değeri (A1,A2.L) adresinden okunan longword değer olacaktır.

Burada ilk verilen değer 8 bitlik işaretli bir sayıdır, sondaki yazmaç ise (data veya adres yazmacı olabilir) 16 veya 32 bitliktir. Aşağıdaki örnekleri inceleyin.

MOVE.L 4(A0,D1.W),DO MOVE.L — 20(A0,D2.L),D7 MOVE.W 4(AO,AL.W), A0 MOVE.B — -50(A0,A2.L),DO 8(A3,D4.L)

Absolute Short / Long:

Mutlak adres modunda verilen adresteki değer okunur. Absolute Short'ta verilen adres 16 bitlik (işaretli/signed) bir adrestir. Normalde 68000'de adresler için 32 bit kullanırız, örneğin $00752000 gibi. Ancak eğer kullanacağımız adres 16 bit ile ifade edilebiliyorsa biraz yer biraz da hız sağlamak amacıyla $00004560 yerine $4560.W kullanabiliriz.

;Short mod (hepsi aynıdır)

MOVE.L 4.W,A6 MOVE.L $4.W, A6 MOVE.L $0004.W, A6 MOVE.L $00000004.W,A6

;Long mod (hepsi aynidir) MOVE.L $4.L,A6

MOVE.L MOVE.L

$00000004.L,A6 $4,A6

Short modda kullanılan değerler signed olduklarından hafızanın ilk 32KB'lık bölümünü adreslemek için kullanılabilirler ($7FFF'e kadar), bu nedenle bu modu pek fazla kullanmayız.

Program Counter with Displacement:

Bu modda o an bulunulan adrese bir değer (16 bit signed) eklenerek elde edilen adresteki değer okunur.

MOVE.L 8(PC), DO

Aşağıdaki örnekte ilk satır <label> adresindeki değeri D0'a yükler, derlendiğinde komut 2 byte, adres 4 byte yer kaplar. Ancak ikinci satırda MOVE komutu kendi bulunduğu yerden relatif olarak label kadar ilerideki adresin değerini okur. Derlendiğinde MOVE komutu yine 2 byte ancak komut parametresi bu defa 4 yerine 2 byte olur.

MOVE.L label,DO MOVE.L label(PC),DO RTS label

DC.W $AA55,$7788

Bu mod yine biraz hız ve yer sağladığı gibi aslında daha önemli bir kullanım amacı vardır. Bu mod sayesinde Relocatable kod yazabilirsiniz. Yani hafızanın neresine konursa konsun aynı şekilde çalışabilecek, yüklendikten sonra da yeri değiştirilebilecek kodlar. Normalde AmigaDOS programlarınızı yüklerken zaten bir relocate işlemi yapar ve programınız hafızanın boş herhangi bir yerine yüklenir. Ancak yüklendikten sonra yerini değiştiremezsiniz. Eğer tüm lokal label işlemlerinizde PC relatif mod kullandıysanız programınızın yerini yüklendikten sonra da değiştirebilirsiniz. (Örneğin bir virüs yazıyorsanız bu çok kullanışlı bir özelliktir.)

NOT: Bu mod read-only'dir, yani PC relatif bir yazma işlemi yapamazsınız. Örneğin MOVE.L #0,4(PC) veya CLR.W 8(PC) gibi bir komutu derleyemezsiniz.

Program Counter with Index:

Bu mod da öncekinin aynısıdır, ek olarak bir register'ın değeri de (.W veya .L olarak) işleme katılır. Ayrıca burada verilen pozisyon öncekinden farklı olarak 16 bit değil 8 bittir.

;DOa PCtA14*$10 adresindeki MOVE.L — $10(PC,A1.L),DO

Her ne kadar tavsiye etmesem de buradaki pozisyon değerini kod içinden değiştirerek (self-modifying) bir tablo üzerinde okuma gibi işlemleri de yapabilirsiniz.

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