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İ
Hit: 7670
Yazar: serhat8102