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ı.
Sayfa 62
12. 13: S, Supervisor: İşlemcinin hangi modda çalıştığını gösterir
13. 14: Kullanılmıyor 14. 15: T, Trace: İşlemci trace modunda ise set durumdadır
SR'nin ilk bayt'ına kullanıcı bayt'ı, ikinciye ise sistem baytı adı verilir.
Komutlara Genel Bakış
68000 işlemci komutlarını veri transfer, aritmetik, lojik ve dallanma komutları olarak gruplandırabiliriz. Şimdi bu komutların bir listesini verelim:
Not: Bu liste 68000 komutlarının tam listesi değildir, en sık karşılaşacağımız ve sık kullanılan komutlardır, bunlar dışındaki komutlara pek ihtiyacınız olmayacaktır, yine de yeri geldikçe onlara da değineceğiz.
Listede kullanılacak semboller aşağıdaki gibidir: label: Etiket veya adres reg: Register an: Adres register'ı, A0-A7 dn: Data register'ı, D0-D7 kaynak hedef <ea>: Efektif adres
#n: Değer
Dallanma Komutları
1. BCC label Koşullu dallanma
2. BRA label Koşulsuz dallanma (JMP) 3. BSR label: Alt rutine dallanma (RTS ile dönülür) 4. JMP label Koşulsuz dallanma (BRA) 5. JSR label: Alt rutine dallanma (RTS ile dönülür) 6. RTS: Alt rutinden geri dön (JMP, BSR)
Aritmetik İşlem Komutları
1. ADD kaynak,hedef: hedefe, kaynağı ekler
2. ADDI #n,<ea>: adrese n ekler
3. CLR <ea>: Adres temizlenir
4. CMP kaynak,hedef: Kaynak ve hedef adreslerin bitleri karşılaştırılır. 5. DIVS kaynak,hedef: Hedef (32 bit) Kaynağa (16 bit) bölünür, bölme işleminin sonucu Hedef'in alt-word'ünde, kalan ise üst-word'de tutulur. Bölme işlemi işaret dikkate alınarak yapılır (Signed). 6. DIVU kaynak,hedef: Hedef (32 bit) Kaynağa (16 bit) bölünür, bölme işleminin sonucu alt-word'ünde, kalan ise üst-word'de tutulur. Bölme işlemi işaret dikkate alınmadan yapılır (Unsigned). 7. MULS kaynak,hedef: Hedef (word), kaynak (word) ile çarpılır, sonuç hedef'te tutulur (longword). 8. MULU kaynak,hedef: Hedef (word), kaynak (word) ile çarpılır, sonuç hedef'te tutulur (Unsigned). 9. NEG <ea>: Negatife çevirir (2'lik sistemde komplement). 10. SUB kaynak,hedef: hedef'ten kaynağı çıkarır. 11. SUBI #n,<ea>: adresten n çıkarır. 12. TST <ea>: Adres test edilir, sonuç N ve Z bayraklarını etkiler.
Mantıksal İşlem Komutları
AND kaynak,hedef: hedef, kaynak ile mantıksal VE işleminden geçer.
2. ANDI #n,<ea>: hedef, n ile mantıksal VE işleminden geçer. 3. EOR kaynak,hedef: hedef, kaynak ile mantıksal XOR işleminden geçer. 4. EORI #n,<ea>: hedef, n ile mantıksal XOR işleminden geçer. 5. NOT <ea>: Adresin mantıksal DEĞİL'i alınır. 6. OR kaynak,hedef: hedef, kaynak ile mantıksal VEYA işleminden geçer. 7. ORI #n,<ea>: hedef, n ile mantıksal VEYA işleminden geçer.
Bit İşlem Komutları
BCHG #n,<ea>: Adresin n'inci bitini ters çevirir (toggle).
2. BCLR #n,<ea>: Adresin n'inci bitini temizler (sıfır yapar). 3. BSET #n,<ea>: Adresin n'inci bitini set eder (bir yapar). 4. BTST #n,<ea>: Adresin n'inci bitini test eder, Z bayrağını etkiler. 5. ASL, ASR n, <ea>: Aritmetik sola, sağa kaydırma. 6. LSL, LSR n, <ea>: Mantıksal sola, sağa kaydırma. 7. ROL, ROR n, <ea>: Sola, sağa döndürme.