Plazma sayı 4, sayfa 63

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 63

Veri Transfer Komutları

EXG rn,rn: İki register'ın içerikleri değiştirilir.

2. LEA <ea>,an: an adres register'ına verilen efektif adres yüklenir. 3. MOVE kaynak,hedef: Kaynak'tan okunan değer hedef'e yazılır. 4. SWAP dn: dn data register'ının alt-word'ü ile üst-word'ünü yer değiştirir.

Genel olarak 68000 komutları bunlardır, bu komutların pek çoğunda .b, .w ve .l gibi işlemin kaç bit üzerinden yapılacağını belirleyebiliriz.

Bu sayıda veri transfer komutlarına biraz daha detaylı bakalım, bu diğer komutları da anlamanıza yardımcı olacaktır. Sonraki yazılarımızda diğer komutları da detaylıca inceleyeceğiz.

Veri Transfer Komutları

Move komutları veri transfer işlemini gerçekleştirirler. İleride detaylı olarak değineceğimiz pek çok adresleme yöntemini kullanabilirler.

Genel kullanımı "MOVE kaynak,hedef" şeklindedir; aşağıdaki örnekleri inceleyiniz;

move.l #12,d0 ;DO registerine

712 değeri koy (32bit)

move.w #$1234,d7 ;D7'ye $1234

;değeri koy (word)

Bir register'a word olarak değer girdiğinizde 32 bitlik register'ın alt 16 biti değişir ve üst 16 bit aynı kalır. Örneğin;

move.l #$11223344,d0 move.w #$5566,d0 move.b #$77,dO0

;DO >> $11223344 $11225566 ;DO >> $11225577

NOT: Komutlarda sonek kullanmadığınızda .w olarak kabul edilir. Ancak bazı komutlar sadece 8 bit veya sadece 16 bit destekliyorsa derleyici uygun şekilde derleme yapacaktır.

MOVE komutunda kaynak ve hedef birer register olabileceği gibi bir hafıza adresi de (ya da etiket) olabilir. Aşağıdaki örnekleri inceleyin;

move.l src1,d0 ;DO $00000001 move.l srcl,dst ;dst(0) >> $00000001 move.w src2,d ;D5 $XXXXOOAA move.l src2,6 ;D6 >> $OOAA0055 rts de.w $ŞAA, 555 dst: de.l $00,$00,$00,$00

Örneklerde verilen src1, src2 ve dst'nin hafızada nasıl durduklarına bakmak anlamamıza yardımcı olacaktır:

srcl: $00000001,$00000002,$00000003,$00000004

src2: $00AA,$0055 gibi düşünebiliriz.

dst: $00000000, $00000000,$00000000, $00000000

Move komutunun başka bazı kullanım şekilleri de vardır, bunlara ileride tekrar bakacağız. Diğer veri transfer işlemi yapan komutlar aşağıdadır;

lea <adres>,a0 ;<adres> değerini register'ına koy

Burada dikkat edilmesi gereken nokta, LEA (Load Effective Address) komutu <adres>'in gösterdiği yerdeki değeri değil adresin kendisini register'a yazacaktır. Eğer adresin gösterdiği (point ettiği) değeri okumak istiyorsanız MOVE <adres>,<register> kullanmalısınız.

lea $11223344,a0 ;A0 -> $11223344

ŞAL $1CF6723F (farkli olabili ; "plazma" yazisinin baslangic şadresi

lea src,al

ŞAL $1CF6723F (farkli olabili ; "plazma" yazisinin baslangic

lea src(PCc),al

dc.b 'plazma',0

Son örnekte src'nin adresi Program Sayacı (PC)'ye göre relatif olarak okunur ve A6'ya yazılır. Bunun bir öncekinden farkı hafızada longword olarak değil word olarak tutulmasıdır. Yani "bulunduğum yerden XXXX ilerisi" anlamına gelir.

Tahmin edebileceğiniz gibi aşağıdaki 2 kullanım aynı sonucu verecektir:

#src,a6b src,a6b

move.l lea

Veri transfer komutlarına aşağıdaki 2 komutu da ekleyebiliriz;

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