60
Veri Transfer Komutları 1 Mikroişlemciler ve Mikrobilgisayarlar

Veri Transfer Komutları

  • Upload
    violet

  • View
    114

  • Download
    2

Embed Size (px)

DESCRIPTION

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:. - PowerPoint PPT Presentation

Citation preview

Page 1: Veri Transfer Komutları

Veri Transfer Komutları

1Mikroişlemciler ve Mikrobilgisayarlar

Page 2: Veri Transfer Komutları

I) Adres Yükleme Komutları

Mikroişlemciler ve Mikrobilgisayarlar 2

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.

Page 3: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 3

ÖRNEKMOV komutunun LEA komutu yerine kullanılması bazı durumlarda söz konusu olabilir.

BUFFER DB “Bilgisayar Mühendisliği”,0Ah,0Dh,24hMOV DX, OFFSET BUFFER

İfadesinin eşdeğeri;

BUFFER DB “Bilgisayar Mühendisliği”,0Ah,0Dh,24hLEA DX, BUFFER

Page 4: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 4

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.

Page 5: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar5

Örnek: LDS BX, [SI] komutunu yürütülmesi

34

DS1000h

00

20

30

SP

20

20 34AX

BX

BP

SI

DI

00

30 00CS

DS

12000

12001

12002

12003

Page 6: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 6

ÖRNEKMOV [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)

Page 7: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 7

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.

Page 8: Veri Transfer Komutları

II) Dizi (String) Komutları

Mikroişlemciler ve Mikrobilgisayarlar 8

Üç ç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.

Page 9: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 9

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.

Page 10: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 10

LODS (Load String)

LODS komutu SI ile işaretli hafıza hücresinden AL’yi 1 byte veya AX’e 2 byte aktarabilmektedir.

Assembly Dili Yapılan İşlem

LODSB AL=[SI] gerçekleştirilir ardından SI=SI+1 veya SI=SI-1

LODSW AX=[SI] gerçekleştirilir ardından SI=SI+2 veya SI=SI-2

Page 11: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 11

STOS (Store String)

STOS komutu, AL veya AX’i, DI ile işaretli hafıza hücresine saklamaktadır.

Assembly Dili Yapılan İşlem

STOSB [DI]=AL gerçekleştirilir ardından DI=DI+1 veya DI=DI-1

STOSW [DI]=AL gerçekleştirilir ardından DI=DI+2 veya DI=DI-2

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.

Page 12: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 12

Örnek

LES DI, BUFFER ; BUFFER adresini yükleMOV CX, 10 ; Sayacı yükleCLD ; Otomatik arttırma aktif (D=0 )MOV AL, 0 ; AL saklayıcısına 0h aktarılmaktaREP STOSB ; BUFFER bölgesi 0’lanarak temizlenmektedir.

Assembly Kodu Açıklama

Bu program, BUFFER adresli yerden başlayan 10 byte, sıfır ile temizlenmektedir.

Page 13: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 13

ÖrnekHafıza bloğunu daha hızlı bir şekilde temizleyecek olan assembly programı ise aşağıdadır.

LES DI, BUFFER ; BUFFER adresini yükleMOV CX, 5 ; Sayacı yükleCLD ; Otomatik arttırma aktif (D=0 )MOV AX, 0 ; AX saklayıcısına 0h aktarılmaktaREP STOSW ; BUFFER bölgesi 0’lanarak temizlenmektedir.

Assembly Kodu Açıklama

Page 14: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 14

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.

Assembly Dili Yapılan İşlem

MOVSB [DI]=[SI] gerçekleştirilir ardından DI=DI+1 veya DI=DI-1; SI=SI+1 veya SI=SI-1

MOVSW [DI]=[SI] gerçekleştirilir ardından DI=DI+2 veya DI=DI-2; SI=SI+2 veya SI=SI-2

Page 15: Veri Transfer Komutları

Örnek

Mikroişlemciler ve Mikrobilgisayarlar 15

LES DI, BUFFER1 ; BUFFER1 adresini yükleLDS SI, BUFFER2 ; BUFFER2 adresini yükleCLD ; Otomatik arttırma aktif (D=0 )MOV CX, 100 ; CX saklayıcısına 100 değeri aktarılmaktaREP MOVSB ; BUFFER2’den BUFFER1’e aktarım.

Assembly Kodu Açıklama

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.

Page 16: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 16

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)

Assembly Dili Yapılan İşlem

IN AL, IPORT IPORT’tan 8 bit veri AL’e okunur.

IN AX, IPORT IPORT’tan 16 bit veri AX’e okunur.

OUT OPORT, AL AL’nin içeriği OPORT’a gönderilir.

OUT OPORT,AX AX’in içieriği OPORT’a gönderilir.

Page 17: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 17

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.

Assembly Dili Yapılan İşlem

XCHG sak, sak Saklayıcı içeriklerini değiştirir.

XCHG sak, hafıza Saklayıcı ile hafıza içeriklerini değiştirir.

Page 18: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 18

XLAT Komutu

Genellikle tablo olarak tasarlanan dizilere erişmek için kullanılır. AL kaydedicisine tablonun elemanlarından birini yükler. Örn:

TABLO DB 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FMOV AL, 0BhMOV BX, TABLOXLAT

Assembly Kodu

Tablodaki 12. elemanın ASCII karşılığını (hex olarak) AL’ye yükler.

Page 19: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 19

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.

Page 20: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 20

Aritmetik ve Lojik Komutlar

Page 21: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 21

I) Toplama, Çıkarma, KarşılaştırmaADD Komutu

Bu komutun farklı adresleme modlarına göre gösterimi aşağıdadır:

Assembly Dili Yapılan İşlem

ADD AL, CL AL=AL+CL

ADD DX, SI DX=DX+SI

ADD BL, 20h BL=BL+20h

ADD CX, 4000h CX=CX+4000h

ADD [BX], CL CL, DS’de BX ile adreslenen değer ile toplanır ve sonuç CX’dedir.

ADD CX, [SI+2] CX, DS’de SI+2 ile adreslenen değer ile toplanır ve sonuç CX’dedir.

ADD AL, BUF AL, DS’de bulunan BUF hücresi ile toplanır ve sonuç AL’ye yazılır.

ADD AL, BUF[DI] AL, DS’de bulunan BUF+DI hücresi ile toplanır ve sonuç AL’dedir.

ADD [BX+DI],DL DS’de bulunan BX+DI adresi ile belirtilen hücre, DL ile toplanır ve sonuç yine DS’deki BX+DI konumuna yazılır.

Page 22: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 22

ADC Komutu

ADD komutundan farklı olarak elde bayrağı da (Carry Flag) toplamada dikkate alınır.

Assembly Dili Yapılan İşlem

ADC AL, CL AL=AL+CL+C

ADC AX,BX AX=AX+BX+C

ADC [BX], AL DS’de bulunan BX ile adreslenen byte hücresini AL ve C değeri ile toplayop sonucu aynı konumda saklar.

ADC AX,[BP+2] SS’de bulunan ve BP+2 ile ifade edilen konumdaki değeri AX ile toplayıp sonucu tekrar AX’e yazar.

Page 23: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 23

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.

Page 24: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 24

INC Komutu

Segment saklayıcısı dışında herhangi bir saklayıcıya veya hafıza hücresine 1 ekler.

Assembly Dili Yapılan İşlem

INC CL CL=CL+1

INC AX AX=AX+1

INC BYTE PTR[BX] DS’de bulunan ve BX ile adreslenen bir byte hafıza içeriğini arttırır.

INC WORD PTR[SI] DS’de bulunan ve SI ile adreslenen 16 bit hafıza içeriğini artırır.

Page 25: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 25

SUB Komutu

Bu komutun farklı adresleme modlarına göre gösterimi aşağıdadır:

Assembly Dili Yapılan İşlem

SUB AL, CL AL=AL-CL

SUB DX, SI DX=DX-SI

SUB BL, 20h BL=BL-20h

SUB CX,4000h CX=CX-4000h

SUB [BX],CL DS’de BX ile ifade edilen konumdan CL çıkarılır ve sonuç aynı konuma yazılır.

SUB CX, [SI+2] CX’den DS’de bulunan ve SI+2 ile adreslenen konumun içeriği çıkartılır ve sonuç CX’e yazılır.

SUB AL,BUF AL’den DS’de bulunan BUF konumunun içeriği çıkartılır ve sonuç AL’ye yazılır.

SUB [BX+DI],DL DS’de bulunan ve BX+DI ile adreslenen hücrenin içeriğinden DL çıkartılır ve sonuç aynı konuma yazılır.

Page 26: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 26

SBB Komutu

SBB, operand ile birlikte elde bayrağını (Carry) çıkarmada kullanır.

Assembly Dili Yapılan İşlem

SBB AL,CL AL=AL-CL-C

SBB AX,BX AX=AX-BX-C

SBB[BX], AL DS’de bulunan BX ile adreslenen belle hücresinin değerinden AL ve C çıkartılır ve sonuç hafızada saklanır.

SBB AX, [BP+2] AX’ten SS’de bulunan ve BP+2 ile adreslenen konumun değeri ve C çıkartılır ve sonuç AX’de saklanır.

Çıkartma komutları toplama komutlarında da olduğu gibi bayrak kaydedicisinin, Z, S, V, A, P ve C bitini etkilerler.

Page 27: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 27

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.

Assembly Dili Yapılan İşlem

DEC AL AL=AL-1

DEC SP SP=SP-1

DEC BYTE PTR [BX] DS’de bulunan ve BX ile adreslenen bir byte’lık konumun içeriği azaltılır.

DEC WORD PTR[SI] DS’de bulunan ve SI ile adreslenen iki byte’lık konumun içeriği azaltılır.

Page 28: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 28

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.

Page 29: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 29

Assembly Dili Yapılan İşlem

CMP AL, CL AL-CL

CMP DX, SI DX-SI

CMP BI,20h BI-20h

CMP CX, 4000h CX-4000h

CMP[BX], CL DS’de yer alan BX ile adreslenen hücreden CL çıkartılır.

CMP CX, [SI+2] CX’den, DS’de yer alan SI+2 ile adreslenen hücrenin içeriği çıkarılır.

CMP AL, BUF AL’den, DS’de yer alan BUF hücresinin içeriği çıkarılır.

CMP AL, BUF[DI] AL’den, DS’de yer alan BUF+DI ile adreslenen hücrenin içeriği çıkarılır.

CMP [BX+DI], DL DS’de yer alan BX+DI ile adreslenen hücrenin içeriğinden DL çıkarılır.

Page 30: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 30

MOV AX, 5h ; AX=05h MOV BX, 5h ; BX=05hCMP AX,BX ;

CMP işleminin sonucunda 0 değeri elde edilir ve Z ve Parity bayrağı kurulur (Z=1 ve P=1)

MOV AX, 15 ; AX=0Fh MOV BX, 10 ; BX=0AhCMP AX,BX ;

CMP işleminin sonucunda sadece Parity bayrağı etkilenir ve P=1 olur.

MOV AL, 10 ; AL=Ah MOV BL, 15 ; BL=FhCMP AL,BL ;

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.

Page 31: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 31

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.

Page 32: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 32

Ç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.

Page 33: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 33

8 Bit Çarpma

OperandAL

AX

Çarpanlardan biri her zaman için AL kaydedicisinde ve sonuç değeri de AX kaydedicisinde bulunur.

x

Page 34: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 34

16 Bit Çarpma

Çarpanlardan biri her zaman için AX kaydedicisinde ve sonuç değeri de AX-DX kaydedici çiftinde bulunur.

OperandAX

AXDX

x

Page 35: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 35

Assembly Dili Yapılan İşlem

MUL DL AL’de bulunan işaretsiz tamsayı DL ile çarpılır ve çarpım AX’e yerleştirilir.

IMUL CH AL’de bulunan işaretli tamsayı CH ile çarpılır ve çarpım AX’te bulunur.

MUL BYTE PTR[BX] DS’de bulunan BX ile adreslenen hafıza hücresinin içerdiği işaretsiz sayı AL ile çarpılır ve çarpım AX’te bulunur.

IMUL BYTE PTR OP2 DS’de OP2 ile adreslenen hafıza hücresinin içerdiği işaretli sayı AL ile çarpılır ve çarpım AX’de bulunur.

IMUL CX AX’deki işaretli sayı CX ile çarpılır ve çarpım DX-AX çiftinde saklanır.

Page 36: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 36

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.

Page 37: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 37

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)

AL

AX

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.

Page 38: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 38

16 Bit Bölme

16 bit bölme işleminde bölünen her zaman DX:AX saklayıcı çiftinde bulunur.

Operand (16 bit)

AX

AX

DX

-

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.

Page 39: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 39

III)BCD FORMATBCD 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.

Page 40: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 40

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.

Desimal Sayı BCD Kodlanmış Hali

0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

Page 41: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 41

ÖRNEKBCD 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.

Page 42: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 42

A= 0011 0100 B= 0010 0001+

0101 0101

A= 34 BCDB= 21 BCD+

55 BCD

A= 0111 0110 B= 0001 0101+

A= 76 BCDB= 15 BCD+

1000 1011 8 B X 91 BCD

A= 0100 1000 B= 0100 1001+

A= 48 BCDB= 49 BCD+

1001 0001 9 1 X97 BCD

Page 43: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 43

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.

Page 44: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 44

A= 0011 0100 B= 0010 0001+

0101 0101

A= 34 BCDB= 21 BCD+

55 BCD

A= 0111 0110 B= 0001 0101+

A= 76 BCDB= 15 BCD+

1000 1011 8 B X 91 BCD

A= 0100 1000 B= 0100 1001+

A= 48 BCDB= 49 BCD+

1001 0001 9 1 X 97 BCD

1000 10110000 0110+

1001 0001

1001 00010000 0110+

1001 0111

Page 45: Veri Transfer Komutları

DAA (Decimal Adjust After Addition)

Mikroişlemciler ve Mikrobilgisayarlar 45

MOV BX, 1234h ; BX=1234MOV CX,3099h ; CX=3099MOV AL,BL ; AL=BLADD 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=BHADC AL, CH ; AL 12h+30h+C = 43h ile yüklenir. İkinci DAA

istenirse işletilmeyebilirDAA ;MOV DH, AL ; DH= 43

Assembly Kodu Açıklama

Page 46: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 46

DAS (Decimal Adjust After Subtraction)

MOV BX, 1234h ; BX=1234MOV CX,3099h ; CX=3099MOV AL,BL ; AL=BLSUB AL, CL ; AL=AL-CLDAS ; İşletiminden sonra AL=65 ve C = 1 olur MOV DL, AL ; DL 65 BCD sayısı ile yüklenir.MOV AL, BH ; AL=BHSBB AL, CH ; AL-CH DAS ;MOV DH, AL ; DH= 18

Assembly Kodu Açıklama

Page 47: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 47

AAM (Adjust After Multiplication)

Ç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.

MOV AL, 5h ; AL=05h MOV CL, 6h ; CL=06hMUL ;AAM ;

Assembly Kodu Açıklama

Page 48: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 48

AAD (Adjust After Division)

MOV BL, 9h ; AL=05h MOV AX, 0702h ; CL=06hAAD ;DIV BL

Assembly Kodu Açıklama

Bu komut bölme işleminde önce kullanılmalıdır.

Page 49: Veri Transfer Komutları

IV) Lojik Komutlar

Mikroişlemciler ve Mikrobilgisayarlar 49

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.

Page 50: Veri Transfer Komutları

AND

Mikroişlemciler ve Mikrobilgisayarlar 50

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.

MOV CX, 3531h ; AND CX, OFOFh ; 3531h AND OFOFh gerçekleşir.

Assembly Kodu Açıklama

Bu kod bloğu, 16 bit ASCII bilginin BCD koda çevrilmesini sağlar.

Page 51: Veri Transfer Komutları

OR

Mikroişlemciler ve Mikrobilgisayarlar 51

OR işlemi lojik toplama işlemini gerçekleştirir. Diğer bir kullanım amacı ise, bir ikili sayıdaki istenilen bitleri set etmek (1’lemek)’tir.

MOV AX, F0F0h ; AX’e FOFOh verisi aktarılmakta OR AX, 0F0F ; FOFOh OR OFOFh işlemi yürütülür.

Assembly Kodu Açıklama

Page 52: Veri Transfer Komutları

XOR

Mikroişlemciler ve Mikrobilgisayarlar 52

XOR işlemi her iki girişin birbirinden farklı olması durumunda Lojik 1 değerini üretmektedir. Diğer durumlarda ise Lojik 0 değerini üretir.

Diğer bir kullanımı, ikili bir sayıdaki bitlerin terslenmesi işlemidir. Bir kelimedeki tersini alınacak bitlerin karşılığı 1 ile XOR işlemine girer ise, istenilen bitler terslenmiş olur. Örn:

XOR AX, FFCOh

Bir saklayıcının veya bir hafıza hücresinin bitleri, kendisi ile XOR işlemine girer ise o kelime sıfırlanmış olur. Örn:

XOR BX,BX

Page 53: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 53

Assembly Dili Yapılan İşlem

OP AL,CL AL=AL OP CL

OP CX,DX CX=CX OP DX

OP BL,0Fh BL=BL OP 0Fh

OP AX, [DI] DS:DI ile işaret edilen 16 bitlik kelime ile işlem gerçekleştirilir, sonuç AX kaydedicisinde saklanır.

OP DISP[SI], AL DS’de DISP+SI ile işaret edilen 16 bitlik kelime ile AL’nin içeriği üzerinde işlem gerçekleştirilir. Sonuç aynı bellek konumunda saklanır.

Page 54: Veri Transfer Komutları

TEST

Mikroişlemciler ve Mikrobilgisayarlar 54

TEST komutu AND komutu ile benzer özelliktedir. AND komutu, hedef operandı değiştiriyorken TEST komutu değiştirmez. Bu komut, sadece testin sonucunu belirten bayrak saklayıcısının durumunu etkiler.

Assembly Dili Yapılan İşlem

TEST AL,CL AL AND CL işlemi gerçekleştirilir. AL ve CL eski içeriklerini korur. Sadece bayrak kaydedicileri etkilenir.

TEST CX,DX CX AND DX işlemi gerçekleştirilir. CX ve DX eski içeriklerini korur. Sadece bayrak kaydedicileri etkilenir.

TEST komutundan sonra JZ (Jump Zero) veya JNZ (Jump Not Zero) gibi dallanma komutları kullanılır.

Page 55: Veri Transfer Komutları

NOT ve NEG

Mikroişlemciler ve Mikrobilgisayarlar 55

Lojik tersini alma işlemi (1’in tümleyeni) NOT komutuyla ve aritmetik işaret tersleme işlemi(2’nin tümleyeni) NEG komutuyla yapılır. Bu iki komut tek bir operand kullanmaktadır.

Assembly Dili Yapılan İşlem

NOT CL CL=CL’

NEG CL CL=CL’+1

NEG AX AX=AX’+1

Page 56: Veri Transfer Komutları

IV)Kaydırma(Shift) ve Döndürme(Rotate)

Mikroişlemciler ve Mikrobilgisayarlar 56

Kaydırma (Shift) Komutları

4 temel kaydırma komutundan bahsetmek mümkündür. Bunlar;-SHL (Shift Left)-SAL (Shift Arithmetic Left)-SHR (Shift Right)-SAR (Shift Arithmetic Right)

Döndürme (Rotate) Komutları

4 temel kaydırma komutundan bahsetmek mümkündür. Bunlar;-ROL (Rotate Left)-RCL (Rotate Carry Left)-ROR (Rotate Right)-RCR(Rotate Carry Right)

Page 57: Veri Transfer Komutları

Kaydırma(Shift)

Mikroişlemciler ve Mikrobilgisayarlar 57

2’nin katları ile çarpma (sola kaydırma) ve bölme (sağa kaydırma) işlemlerinde kullanılır.

C

C

C

C

0

0

0

S

SHL

SAL

SHR

SAR

Lojik Sol

Aritmetik Sol

Lojik Sağ

Aritmetik Sağ

Page 58: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 58

C

C

C

C

0

0

0

S

SHL

SAL

SHR

SAR

Lojik Sol

Aritmetik Sol

Lojik Sağ

Aritmetik Sağ0 (+)1 (-)

Aritmetik sağa/sola kaydırma ile lojik sağa/sola kaydırma işaretli ve işaretsiz sayılarda farklılık gösterir. Örn: SAR komutu işaretli sayıyı 2’ye bölerken işaretsiz sayı SHR komutu ile 2’ye bölünmektedir.

Eğer 1 haneden fazla kaydırma istenirse, CL saklayıcısı kaydırma sayısını tutar.

Page 59: Veri Transfer Komutları

Mikroişlemciler ve Mikrobilgisayarlar 59

Assembly Dili Yapılan İşlem

SHL CX Lojik olarak CX’i sola kaydırır

SHR AX Lojik olarak AX’i sağa kaydırır.

SAL BUFFER, CL Aritmetik olarak DS:BUFFER konumunda bulunan değeri CL’de bulunan değer kadar sola kaydırır.

SAR SI Aritmetik olarak SI’yı sağa kaydırır.

Page 60: Veri Transfer Komutları

Döndürme(Rotate)

Mikroişlemciler ve Mikrobilgisayarlar 60

Bir saklayıcıdaki veya hafıza hücresindeki bilgi, bir ucundan diğerine veya elde bayrağı üzerinden aşağıdaki gibi döndürülür. Yine CL saklayıcısı birden fazla döndürme işlemi yapılacaksa kullanılır.

C

C

ROL

RCL

ROR

RCR

C

C

A0

A0

A0

A0