Assembly Ders Notları

ARİTMETİKSEL KOMUTLAR

 80x86 mikroişlemcisi işaretli yada işaretsiz binary sayılar üzeinde ada işaretsiz decimal sayılar üzerinde aritmetiksel işlemleri yapabilir. İşaretsiz decimal sayılar; paketlenmiş yada paketlenmemiş decimal sayılar olmalarına göre farklı aritmetiksel oparasyonlara tabi tutulurlar. Aritmetiksel komutlar 3 farklı alanda işlenir.

1)         Dört İşlem Komutlar

ADD, ADC, SUB, SBB, MUL, IMUL, DIV, IDIV

2)         Düzenleyici Komutlar

AAA, AAS, AAM, AAD, DAA, DAS

3)         Ek Aritmetiksel Komutlar

CMP, INC, DEC, NEG, CBW, CWD

ADD Komutu

 Kendisine Operand olarak verilen çeşitli verilerin toplanmasını sağlar

Genel Formu: ADD Alıcı,Gönderici

Yaptığı işlem: Alıcı=Alıcı+Gönderici

 ADD komutu alıcı alan operandının değerine gönderici olan operandının değerini ekler ve sonucu alıcı alan operandına aktarır. Operasyon sonrasında alıcı alandaki değer değişirken gönderici alandaki değer sabit kalır.

Alıcı Alan

Operand Tipi

Gönderici Alan Operand Tipi

Register

Bellek

Bölgesi

Sabit

Register

Bellek Bölgesi

 

Operandlar byte veya Word uzunluklu olabilir. Ancak her 2 operandın uzunluğunun birbirine eşit olması gerekir.

 Segment registerları üzerinde aritmetiksel işlemler yapılamaz.

Gönderici alan üzerinde byte ptr eki ile bir aktarım yapılmışsa bu bellek bölgesi byte veya Word ile tanımlanmış bir register ile aritmetiksel işleme tabi tutulabilir. Fakat gönderici alan olarak kullanılan bellek bölgesi Word  uzunluklu tanımlanmış ile alıcı alan olarak kullanılan registerın mutlaka Word uzunluklu seçilmesi gerekir.

Alıcı alan bellek bölgesi gönderici alan olarak kullanıldığında bellek bölgesi gönderici alan olarak kullanılan registera göre kendisini ayarlar.

Bellek bölgesiyle başka bir bellek bölgesi doğrudan aritmetiksel işleme tabi tutulamaz

ADC Komutu

ADD komutu gibi kendisine verilen 2 farklı değerin toplanması amacıyla kullanılır ADC komutu ADD komutundan farklı olarak işlemin sonrasında Carry flagının durumunu işlemin sonucuyla toplar. (üst üste yapılan toplama işlemini kontrol etmek için kullanılır.)

Genel Formu: ADC alıcı,gönderici

Yaptığı İşlem: Alıcı=alıcı+gönderici+Carry

 

 

SUB Komutu

Kendisine operand olarak verilen değerlerin farkını elde etmek için kullanılır. Operasyon sonrasında elde edilen değer alıcı alanın operandına aktarılır.

Genel Formu: SUB alıcı,gönderici

Yaptığı işlem:Alıcı=Alıcı-Gönderici

SBB Komutu

Alıcı alan ile gönderici alan üzerinde yaptığı çıkarma işlemi sonrasında elde edilen Carry flagının durumunu alıcı alandan çıkarır. İşlem sonucu tekrar alıcı alana aktarılır. (üst üste yapılan çıkarma işlemini kontrol etmek için kullanılır)

Genel Formu: SBB alıcı,gönderici

Yaptığı işlem: Alıcı=alıcı-gönderici-Carry

MUL Komutu

 İşaretsiz sayıların çarpılmasında kullanılır.

Genel Formu: MUL çarpan

 Assambler çarpma işleminde çarpılan değer mul komutu icra görmeden önce Byte uzunluklu ise al ye Word uzunluklu ise AX’e Aktarılır. Bu düzenleme yapıldıktan sonra sonuç Word uzunluklu ise AX’te Double Word uzunluklu ise DX ve AX ikilisinde saklanır. (yuksek seviyeli kısım DX’te düşük seviyeli kısım AX’te saklanır.

-Byte x Byte Çarpımı

 Mov al,çarpılan (1 Byte)

 Mul çarpan (1 Byte)

 Sonuç AX’te saklanır.

-Byte x Word Çarpımı

 Mov al,çarpılan (1 Byte)

 Mov AH,0 (etkisiz olması için AH nin sıfırlanması)

 Mul çarpan (1 Word)

 Sonuç DX, AX ikilisinde saklanır

(yüksek seviyeli kısım DX’te Düşük seviyeli kısım AX’te saklanır.)

-Word x Byte Çarpımı

 Mov ax,çarpılan (1 word)

 Mov bl,çarpılan (1 byte)

 Mov bh,0 (etkisiz olması işin BH’nin sıfırlanması)

 Mul çarpan (1 Word)

 Sonuç DX, AX ikilisinde saklanır.

-Word x Word Çarpımı

 Mov AX,çarpılan (1 Word)

 Mov Çarpılan (1 Word)

 Sonuç DX, AX ikilisinde saklanır.

Çarpma işlemi sonucunda Carry set edilirse owerflow flagı da set edilir

IMUL Komutu

 İşaretli satılarda çarpma işlemi yapmak için kullanılır.

Genel Formu:IMUL çarpan

DIV Komutu

 İşaretsiz sayıların bölünmesinde kullanılır.

Genel Formu:DIV bolen

 Div operasyonlarında div komutu icra görmeden önce bölünen değer bytelık ise bölünen değer AL ye, Word uzunluklu ise AX e bölünen doubleword uzunluklu ise DX AX ikilisine aktarımının yapılması gerekir.

-Word/Byte

 Mov ax,bölünen (1Word)

 Dıv bolen (1 byte)

 Sonuç: bölüm AL, kalan AH

-Byte/Byte

 Mov al,bölünen (1 Byte)

 Dıv bölen (1 byte)

 Sonuç: Bölüm AL, kalan AH

-Word/Word

 Mov ax,bölünen (1 Word)

Mov DX,0 (bölme işleminde DX’in etkilememesi için sıfırlanması)

Dıv Bölen (1 Word)

 Sonuç:Bölüm AX, Kalan DX

-Dword/Word

 Mov dx,bölünen1 (bölünenin yüksek seviyeli kısmı)

 Mov ax,bölünen2 (bölünenin düşük seviyeli kısmı)

 Dıv bölen (1 Word)

 Sonuç: Bölüm AX, Kalan DX

IDIV Komutu

 İşaretli sayıların bölünmesi için kullanılır.

Genel Formu: IDIV Bölen

4 İŞLEM ÖRNEKLERİ

Tarih:
Hit: 7670
Yazar: serhat8102

Taglar: assembly.


Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.