620 likes | 985 Views
Veri Transfer Komutları. I) Adres Yükleme Komutları. Bu komutlar, bir saklayıcıya veya bir saklayıcı ile bir segment saklayıcısına bir adres yüklemede kullanılmaktadır. LEA (Load Effective Adress). LEA komutu, bir saklayıcıya operand ile belirtilen adresi yükler. Örn:.
E N D
Veri Transfer Komutları Mikroişlemciler ve Mikrobilgisayarlar
I) Adres Yükleme Komutları Bu komutlar, bir saklayıcıya veya bir saklayıcı ile bir segment saklayıcısına bir adres yüklemede kullanılmaktadır. LEA (Load Effective Adress) LEA komutu, bir saklayıcıya operand ile belirtilen adresi yükler. Örn: LEA AX, SUBADR ; AX saklayıcısı SUBADR içeriği ile değil SUBADR adresiyle yüklenmektedir. Mikroişlemciler ve Mikrobilgisayarlar
ÖRNEK MOV komutunun LEA komutu yerine kullanılması bazı durumlarda söz konusu olabilir. BUFFER DB “Bilgisayar Mühendisliği”,0Ah,0Dh,24h MOV DX, OFFSET BUFFER İfadesinin eşdeğeri; BUFFER DB “Bilgisayar Mühendisliği”,0Ah,0Dh,24h LEA DX, BUFFER Mikroişlemciler ve Mikrobilgisayarlar
LDS ve LES LDS ve LES komutları bir 16 bit saklayıcıya bir ofset adres ve DS(LDS ile) veya ES(LES ile) segment saklayıcısına yeni bir segment adresi yükler. LDS DI, LIST ; DI ve DS LIST adres ile yüklenir. LES BX, VEC1 ; BX ve ES VEC1’deki adres ile yüklenir. Bu komutlardan her birinde hafızadan mikroişlemciye iki tane 16 bit kelime yani toplam 4 byte veri transferi sağlar. Mikroişlemciler ve Mikrobilgisayarlar
Örnek: LDS BX, [SI] komutunu yürütülmesi DS1000h AX 34 34 20 12000 BX 20 12001 SP 00 12002 BP 20 00 12003 SI 30 DI CS 00 30 DS Mikroişlemciler ve Mikrobilgisayarlar
ÖRNEK MOV [BX], 8 komutu neyi ifade etmektedir? Hafızaya byte boyutunda 5 değerini taşır. (08) Hafızaya word boyutunda 5 değerini taşır. (0008) Mikroişlemciler ve Mikrobilgisayarlar
Burada hafızaya taşınacak bilginin boyutu net olarak verilmelidir. MOV byte ptr [BX], 8 gibi bir kullanım 1 byte’lık değer aktarır. MOV word ptr [BX], 8 gibi bir kullanım 2 byte’lık değer aktarır. MOV dword ptr [BX], 8 gibi bir kullanım 4 byte’lık değer aktarır. Mikroişlemciler ve Mikrobilgisayarlar
II) Dizi (String) Komutları Üç çeşit dizi veri transfer komutu vardır. Bunlar LODS, STOS ve MOVS’tur. Bu komutlar, mikroişlemci ile hafıza arasında, bir blok veya tek bir byte veya kelime transferinde kullanılır. Bu komutların çalışmasına etki eden 3 tane yapı vardır: D (Direction) Bayrağı DI (Destination Index) SI (Source Index) kaydedicileridir. Mikroişlemciler ve Mikrobilgisayarlar
D (Direction) Bayrağı Yön bayrağı, dizi işlemleri sırasında, DI ve SI saklayıcıları için otomatik arttırma (D=0) veya otomatik azaltma (D=1) çalışma modunu belirler. CLD( Clear Direction) ve SED(Set Direction) komutlarıyla 0’lanır veya 1’lenir. DI (Destination Index) ve SI (Source Index) Bir dizi komutunda DI, SI veya her ikisi de kullanılabilir. Normalde SI, DS için ve DI ise ES için ofset adres olmaktadır. SI’in ilişkili olduğu segment DS olmasına rağmen değiştirilmesi mümkündür. Fakat aynı durum DI için mümkün değildir. Mikroişlemciler ve Mikrobilgisayarlar
LODS (Load String) LODS komutu SI ile işaretli hafıza hücresinden AL’yi 1 byte veya AX’e 2 byte aktarabilmektedir. Mikroişlemciler ve Mikrobilgisayarlar
STOS (Store String) STOS komutu, AL veya AX’i, DI ile işaretli hafıza hücresine saklamaktadır. REP Komutu Repeat (REP) öneki herhangi bir dizi komutunun önüne getirilebilir. Bu, dizi işleminin, CX sayma değeri 0 oluncaya kadar devam etmesine neden olur. Mikroişlemciler ve Mikrobilgisayarlar
Örnek Assembly Kodu Açıklama LES DI, BUFFER ; BUFFER adresini yükle MOV CX, 10 ; Sayacı yükle CLD ; Otomatik arttırma aktif (D=0 ) MOV AL, 0 ; AL saklayıcısına 0h aktarılmakta REP STOSB ; BUFFER bölgesi 0’lanarak temizlenmektedir. Bu program, BUFFER adresli yerden başlayan 10 byte, sıfır ile temizlenmektedir. Mikroişlemciler ve Mikrobilgisayarlar
Örnek Hafıza bloğunu daha hızlı bir şekilde temizleyecek olan assembly programı ise aşağıdadır. Assembly Kodu Açıklama LES DI, BUFFER ; BUFFER adresini yükle MOV CX, 5 ; Sayacı yükle CLD ; Otomatik arttırma aktif (D=0 ) MOV AX, 0 ; AX saklayıcısına 0h aktarılmakta REP STOSW ; BUFFER bölgesi 0’lanarak temizlenmektedir. Mikroişlemciler ve Mikrobilgisayarlar
MOVS (Move String) Hafızanın bir alanından diğer bir alanına bir byte veya bir kelime aktarımı yapılır. Diğer bir deyişle, bu komut hafızadan hafızaya ver transferi yapar (LODS ve STOS ise CPU kaydedicileri ile hafıza arasında veri transferi yapmakta idi). Data segmentte bulunan ve SI saklayıcısı ile adreslenen hafıza hücresini, ES’de bulunan ve DI ile adreslenen hafıza alanına aktarır. Mikroişlemciler ve Mikrobilgisayarlar
Örnek Assembly Kodu Açıklama LES DI, BUFFER1 ; BUFFER1 adresini yükle LDS SI, BUFFER2 ; BUFFER2 adresini yükle CLD ; Otomatik arttırma aktif (D=0 ) MOV CX, 100 ; CX saklayıcısına 100 değeri aktarılmakta REP MOVSB ; BUFFER2’den BUFFER1’e aktarım. Bu programda BUFFER2 alanından 100 byte BUFFER1 alanına aktarılmaktadır. MOVS komutu kullanılmadan önce LES ve LDS komutları ile hafıza işretçileri DI ve SI yüklenerek, BUFFER1 ve BUFFER2 alanlarına işaret etmeleri sağlanmaktadır. Mikroişlemciler ve Mikrobilgisayarlar
III) Diğer Veri Transfer Komutları Bu grupta yer alan komutlar IN,OUT, XCHG, XLAT, LAHF ve SAHF’dır. IN ve OUT Komutu 8085A mikroişlemcisi açılanırken bu komutlar üzerinde durmuştuk. Bu komutlar ile mikroişlemci giriş/çıkış cihazları ile haberleşir. Hatırlanacağı gibi bu komutlar 2 byte uzunluktadırlar (1 byte op-code, 1 byte operand) Mikroişlemciler ve Mikrobilgisayarlar
XCHG Komutu Bu komut, herhangi bir saklayıcının içeriğini diğer bir saklayıcı veya bir hafıza hücresi ile değiştirmektedir. XCHG komutu , segment saklayıcılarının içeriğini veya hafızadan hafızaya veri içeriğini değiştirmekte kullanılmaz. Mikroişlemciler ve Mikrobilgisayarlar
XLAT Komutu Genellikle tablo olarak tasarlanan dizilere erişmek için kullanılır. AL kaydedicisine tablonun elemanlarından birini yükler. Örn: Assembly Kodu TABLO DB 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F MOV AL, 0Bh MOV BX, TABLO XLAT Tablodaki 12. elemanın ASCII karşılığını (hex olarak) AL’ye yükler. Mikroişlemciler ve Mikrobilgisayarlar
LAHF ve SHAF Komutları Bu komutlar bayrakları AH kaydedicisine yükler veya AH’a yüklenen bayrak kaydedicilerinin durumlarını kayar nokta kaydedicisine ( floating point register ) yükler. Uygulamada çok sık kullanılan komutlar değillerdir. Mikroişlemciler ve Mikrobilgisayarlar
Aritmetik ve Lojik Komutlar Mikroişlemciler ve Mikrobilgisayarlar
I) Toplama, Çıkarma, Karşılaştırma ADD Komutu Bu komutun farklı adresleme modlarına göre gösterimi aşağıdadır: Mikroişlemciler ve Mikrobilgisayarlar
ADC Komutu ADD komutundan farklı olarak elde bayrağı da (Carry Flag) toplamada dikkate alınır. Mikroişlemciler ve Mikrobilgisayarlar
ADD ve ADC komutları işlemcinin bayrak kaydedicindeki bitlere şöyle etki ederler: İşaretli sayılarla işlem yaparken işaret taşmalarını göstermesi amacıyla V (overflow) bitine. İşaretsiz sayılarda işlem yaparken boyut taşmalarını göstermesi amacıyla C bitine. Sonuç negatif bir değerse S=1 değilse S=0 olur. sonuç 0 olursa Z=1 aksi halde Z=0 olur. BCD olarak yapılan toplama işlemlerinde A bitine. Elde edilen sonuçtaki binary 1 ler çift sayıda olursa, örneğin 0000 0101 değerinde 2 tane 1 vardır bu durumda P=1 olur. Mikroişlemciler ve Mikrobilgisayarlar
INC Komutu Segment saklayıcısı dışında herhangi bir saklayıcıya veya hafıza hücresine 1 ekler. Mikroişlemciler ve Mikrobilgisayarlar
SUB Komutu Bu komutun farklı adresleme modlarına göre gösterimi aşağıdadır: Mikroişlemciler ve Mikrobilgisayarlar
SBB Komutu SBB, operand ile birlikte elde bayrağını (Carry) çıkarmada kullanır. Çıkartma komutları toplama komutlarında da olduğu gibi bayrak kaydedicisinin, Z, S, V, A, P ve C bitini etkilerler. Mikroişlemciler ve Mikrobilgisayarlar
DEC Komutu Bu komut bir segment saklayıcısı dışında herhangi bir saklayıcıdan veya bir hafıza hücresinden 1 çıkarmaktadır. Mikroişlemciler ve Mikrobilgisayarlar
Karşılaştırma Komutu CMP(Compare) komutuSUB komutu ile aynı işi yapar fakat çıkarma işleminin sonucunu herhangi bir kaydediciye yüklemez. Bu komut genelde şartlı dallanma komutlarından önce bayrakları etkilemek için kullanılır. Sadece hafızadan hafızaya ve segmet saklayıcı karşılaştırmasına izin verilmemektedir. Bu komut A, C, O, P, S ve Z bayraklarını etkiler. Mikroişlemciler ve Mikrobilgisayarlar
MOV AX, 5h ; AX=05h MOV BX, 5h ; BX=05h CMP AX,BX ; CMP işleminin sonucunda 0 değeri elde edilir ve Z ve Parity bayrağı kurulur (Z=1 ve P=1) CMP işleminin sonucunda sadece Parity bayrağı etkilenir ve P=1 olur. MOV AX, 15 ; AX=0Fh MOV BX, 10 ; BX=0Ah CMP AX,BX ; CMP işleminin sonucunda negatif bir değer elde edileceği için S bayrağı kurulur (S=1). Ayrıca ilk 4 bitten barrow oluşacağı ve 8 bitin sonunda da barrow oluşacağı için A ve C bayrakları kurulur. MOV AL, 10 ; AL=Ah MOV BL, 15 ; BL=Fh CMP AL,BL ; Mikroişlemciler ve Mikrobilgisayarlar
II) Çarpma ve Bölme İlk mikroişlemciler çarpma ve bölme birimlerine sahip değildiler. Çarpma ve toplama işlemleri sağa ve sola kaydırma komutları ile gerçekleştirilmekteydi. Çarpma ve bölme yapabilme özelliği 16 bit mikroişlemcilerle gerçekleşmiştir. Fakat burada da sadece tamsayılar (integer) üzerinde çarpma ve bölme yapılabilmekteydi. Kayan nokta işlemleri ya yazılım alt programları ile veya yardımcı matematik işlemciler yardımıyla gerçekleştirilmiştir. 80486 ve Pentium işlemcilerle beraber, kayan nokta işlemleri, artık tümdevre üzerinde gerçekleştirilmeye başlanmıştır. Mikroişlemciler ve Mikrobilgisayarlar
ÇARPMA Çarpma işlemi 8 bit veya 16 bit işaretsiz MUL veya işaretli IMUL komutları ile yapılır. Çarpım, operandlar 8 bit ise 16 bit; 16 bit ise 32 bittir. Çarpma komutlarında ayrıca ivedi adresleme modunun dışındaki adresleme modları kullanılır . İlk operand her zaman AL (8 bitlik işlemlerde) veya AX (16 bitlik işlemlerde)’de bulunur. Mikroişlemciler ve Mikrobilgisayarlar
8 Bit Çarpma Çarpanlardan biri her zaman için AL kaydedicisinde ve sonuç değeri de AX kaydedicisinde bulunur. Operand AL x AX Mikroişlemciler ve Mikrobilgisayarlar
16 Bit Çarpma Çarpanlardan biri her zaman için AX kaydedicisinde ve sonuç değeri de AX-DX kaydedici çiftinde bulunur. Operand AX x DX AX Mikroişlemciler ve Mikrobilgisayarlar
BÖLME Çarpma işlemi gibi bölme de işaretsiz DIV veya işaretli (IDIV) 8 bit veya 16 bit sayılar üzerinde gerçekleştirilir. Mikroişlemciler ve Mikrobilgisayarlar
8 Bit Bölme Bölünen her zaman AX saklayıcısında bulunur. Bölme işleminde kullanılan diğer saklayıcılar aşağıdadır : Operand (8 bit) AX - AL AH 8 bit bölme işleminde, bölünecek sayı 8 bit ise bu sayıyı 16 bite çevirmek için CBW (Convert Byte to Word) komutu kullanılır. Bu komut, AL saklayıcısında bulunan 8 bit sayıyı 16 bit olarak değiştirir. Genellikle bölme işleminden önce kullanılır. Mikroişlemciler ve Mikrobilgisayarlar
16 Bit Bölme 16 bit bölme işleminde bölünen her zaman DX:AX saklayıcı çiftinde bulunur. AX DX Operand (16 bit) - AX DX 16 bit bölme işleminde, bölünecek sayı 16 bit ise bu sayıyı 32 bite çevirmek için CWB(Convert Word to Double) komutu kullanılır. Bu komut AX’de bulunan 16 bitlik değeri 32 bitlik hale (DX:AX çifti) çevirir. Mikroişlemciler ve Mikrobilgisayarlar
III)BCD FORMAT BCD kodlama sisteminde hatırlanacağı gibi her sayı 4 bit ile ifade edilmekte idi. Toplama ve çıkarma işleminde ise, toplanacak ve çıkarılacak syılar bir byte içinde 2 hane olarak AL’de saklanırlar. Bu işleme BCD formatı denir. Örn: AL=36h ise, ve bu bir BCD sayıyı belirtiyorsa bu sayı BCD kodlu 36 sayısıdır. Mikroişlemciler ve Mikrobilgisayarlar
BCD gösterim şekli BCD kodlama bölümünde bahsedildiği gibi her rakam 4 bit ile ifade edilmektedir. Bu gösterim ondalık gösterimin bir alt kümesidir. Mikroişlemciler ve Mikrobilgisayarlar
ÖRNEK BCD formatta gerçekleştirilen aritmetik işlemler daha önce öğrendiğimiz aritmetik işlemlerden biraz farklıdır. Bu farklılığı BCD toplama işlemi üzerinde gösterelim. Bellekte saklı bulunan 8 bitlik bir ikili değer ya -128 +128 aralığında ikiye tümleyen biçimindeki işaretli bir değeri ya da 00-99 aralığında BCD basamağını gösterir. Daha önce bahsedilen tüm artimetik komutlar verilerin ikiye tümleyen biçiminde ikili olarak saklandıklarını kabul ederler. Bu nedenle, BCD sayılar üzerinde işlem yaparken, doğru sonuçları üretebilmek için normal ikili sonuçlar üzerinde bazı ayarlamalar yapmak gerekmektedir. Mikroişlemciler ve Mikrobilgisayarlar
A= 0011 0100 B= 0010 0001 A= 34 BCD B= 21 BCD + + 0101 0101 55 BCD A= 0111 0110 B= 0001 0101 A= 76 BCD B= 15 BCD + + 91 BCD X 1000 1011 8 B A= 0100 1000 B= 0100 1001 A= 48 BCD B= 49 BCD + + 97 BCD X 1001 0001 9 1 Mikroişlemciler ve Mikrobilgisayarlar
Toplama işlemi üzerinde doğru BCD sonuçları üretebilmek için normal ikili sonuçlar üzerinde gerçekleştirilen işlem : Eğer her bir 4-bit grubun ikili toplamı 9’dan küçük bir sonuç üretirse ve küçük değerlikli BCD basamakları birbirine eklenirken elde üretilmezse, sonuç doğrudur. Fakat, eğer normal ikili toplamanın sonucu dokuzdan büyük ise veya en küçük değerlikli BCD basamağının toplamı elde üretirse, normal ikili toplama sonucuna düzeltme payı olarak +6 eklenir. Mikroişlemciler ve Mikrobilgisayarlar
A= 0011 0100 B= 0010 0001 A= 34 BCD B= 21 BCD + + 0101 0101 55 BCD A= 0111 0110 B= 0001 0101 1000 1011 A= 76 BCD B= 15 BCD 0000 0110 + + + X 91 BCD 1001 0001 1000 1011 8 B A= 0100 1000 B= 0100 1001 A= 48 BCD B= 49 BCD 1001 0001 + + 0000 0110 + X 97 BCD 1001 0001 9 1 1001 0111 Mikroişlemciler ve Mikrobilgisayarlar
DAA (Decimal Adjust After Addition) Assembly Kodu Açıklama MOV BX, 1234h ; BX=1234 MOV CX,3099h ; CX=3099 MOV AL,BL ; AL=BL ADD AL, CL ; AL 34h+99h = CDh ile hex olarak yüklenmiştir. Fakat bu değer BCD değildir. Bunun için BCD karşılığıa dönüştürmek gerekir. DAA ; İşletiminden sonra AL=33 ve C = 1 olur MOV DL, AL ; DL 33 BCD sayısı ile yüklenir. MOV AL, BH ; AL=BH ADC AL, CH ; AL 12h+30h+C = 43h ile yüklenir. İkinci DAA istenirse işletilmeyebilir DAA ; MOV DH, AL ; DH= 43 Mikroişlemciler ve Mikrobilgisayarlar
DAS (Decimal Adjust After Subtraction) Assembly Kodu Açıklama MOV BX, 1234h ; BX=1234 MOV CX,3099h ; CX=3099 MOV AL,BL ; AL=BL SUB AL, CL ; AL=AL-CL DAS ; İşletiminden sonra AL=65 ve C = 1 olur MOV DL, AL ; DL 65 BCD sayısı ile yüklenir. MOV AL, BH ; AL=BH SBB AL, CH ; AL-CH DAS ; MOV DH, AL ; DH= 18 Mikroişlemciler ve Mikrobilgisayarlar
AAM (Adjust After Multiplication) Assembly Kodu Açıklama MOV AL, 5h ; AL=05h MOV CL, 6h ; CL=06h MUL ; AAM ; Çarpım işleminin sonucunda AX=1Eh olacaktır. Fakat bu değer BCD değildir. Bu yüzden bir AAM komutu işletilir. Komutun işletilmesinden sonra AX= 0300h olur. Mikroişlemciler ve Mikrobilgisayarlar
AAD (Adjust After Division) Açıklama Assembly Kodu MOV BL, 9h ; AL=05h MOV AX, 0702h ; CL=06h AAD ; DIV BL Bu komut bölme işleminde önce kullanılmalıdır. Mikroişlemciler ve Mikrobilgisayarlar
IV) Lojik Komutlar Lojik işlemler, bitlerin reset (lojik 0), set (lojik 1 ) veya tersinin alınmasını sağlar. Bütün lojik işlemler bayrak kaydedicilerinin durumlarını etkilerler. Mikroişlemciler ve Mikrobilgisayarlar
AND AND işlemi lojik çarpma işlemini gerçekleştirir. Bu işlem, bir ikili sayıdaki bitleri resetlemede kullanılır. Bu işlem, maskeleme, sıfırlama olarak da adlandırılır. Assembly Kodu Açıklama MOV CX, 3531h ; AND CX, OFOFh ; 3531h AND OFOFh gerçekleşir. Bu kod bloğu, 16 bit ASCII bilginin BCD koda çevrilmesini sağlar. Mikroişlemciler ve Mikrobilgisayarlar