Assembly Ders Notları

DÜZENLEYİCİ KOMUTLAR

Bir Byte ile ifade dilebilen Decimal dijite paketlenmemiş Decimal sayı adı verilir. Decimal dijit Byte’ı oluşturan bitlerin düşük seviyeli 4 biti ile temsil edilirken yüksek seviyeli 4 bit değeri 0 dır. Bir Byte’ın düşük ve yüksek seviyeli her 2 yarımı ile 2 ayrı Decimal dijit yer alıyorsa bu sayılara da paketlenmiş decimal sayı adı verilir. Paketlenmemiş Decimal sayılar 0 ile 9 arasında değişirken paketlenmiş Decimal sayılar 00 ile 99 arasında değişir.

AAA, AAS, AAM, AAD, DAA, DAS

AAA Komutu

 2 paketlenmemiş Decimal sayıların toplanması sonrasında elde edilen sonuç üzerinde düzenleme yaparak sonucun paketlenmiş Decimal sayı içermesini sağlar

AAA komutu paketlenmemiş Decimal sayılar üzerinde yapılan bir sonucunu ASCII karakterleriyle kurulacak basit ilişki düzeyine getirdiği için toplamanın ascii amaçlı düzenlenmesi şeklinde tanımlanır.

AAS Komutu

 Yapılan bir çıkarma işleminin ascii amaçlı düzenlenmesini sağlar.

AAM Komutu

 Paketlenmemiş sayılar üzerinde yapılan bir çarpma işleminin sonucunun ascii amaçlı düzenlenmesini sağlar.

AAD Komutu

 Yapılan bir bölme işleminin sonucunun ascii amaçlı düzenlenmesini sağlar. Diğer ascii amaçlı düzenleyici komutlar sonuç üzerinde düzenleme yaparken AAD komutu bölünen değer üzerinde düzenleme yapar. Dolayısıyla AAD komutu DIV komutundan önce kullanılır.

DAA komutu

 Bir toplama işlemi üzerinde 2 farklı düzenleme yapılabilir. Bunlardan birisi sonucun paketlenmemiş Decimal haline dönüştürülmesi diğeri ise sonucun paketlenmiş Decimal sayı haline dönüştürülmesini sağlar. Paketlenmemiş Decimal sayılar için AAA komutu kullanılırken paketlenmiş Decimal sayılar için toplama işlemi sonrasında DAA komutu kullanılır.

DAS Komutu

 Yapılan bir çıkarma işleminin sonucu üzerinde (sayılar paketlenmiş Decimal sayı olmak üzere) Decimal amaçlı düzenlenmesini sağlar.

EK ARİTMETİKSEL KOMUTLAR

 Çeşitli sayısal değerler üzerinde 4 işlem yapan ve işlem sonuçlarını ascii yada Decimal amaçlı düzenleyen aritmetiksel komutların yanı sıra bir grup komut daha  vardır. Bu komutlar;

CMPkıyaslama

INC1 arttırma

DEC1 azaltma

NEGikili tamamlayıcısını üretme

CBWByte’ı Word’e dönüştürme

CWDWord’ü DWord’e Dönüştürme

INC ve DEC Komutları

 INC komutu operandının mevcut değeri ile 1 sayısını toplar ve sonucu yine o operanda aktarır.

 DEC komutu ise operandının değerinden 1 sayısını çıkartır ve sonuç değerini yine o operanda aktarır. İşlemler sırasında operand olarak tanımlanan değerin işaretsiz sayılar içerdiği kabul edilir. INC ve DEC komutları Carry flagı haricinde diğer aritmetiksel flagları etkiler.

Genel Formu

INC operand

DEC operand

NEG Komutu

 Operandının değeri 0 sayısından çıkartır ve sonucu tekrar bu operanda aktarır; yani operand olarak tanımlanan değerin 2’li tamamlayıcısını üretir ve sonucu tekrar bu operanda aktarır.

CBW/CWD Komutları

 Aritmetiksel işlemle sırasında herhangi bir operasyona tabi tutulacak Operandlar farklı uzunluklara sahip olabilirler. Böyle bir durumda operasyon öncesinde bu operandların uzunluklarının düzenlenmesi gerekir. Bu düzenleme küçük uzunluğa sahip operandın uzunluğunun büyük uzunluğa sahip operandın uzunluğuna denkleştirilmesi şeklinde olur.

 İşaretli sayılar içeren operandlarn uzunluklarının düzenlenebilmesi için cbw ve cwd komutları kullanılır. Cbw komutu ah ve al yi, cwd komutu ise dx ve ax i gizli operand olarak kullanır. Cbw komutu al registerı içerisindeki işaretli sayının işaret bitini ah’nin tüm bitlerine, cwd komutu ise ax registerı içerisindeki sayının işaret bitini dx registerının tüm bitlerine aktarır. CBW ve CWD komutları operandsız olarak yazılır.

CMP Komutu

 Kendisine operand olarak verilen 2 sayısal değerin karşılıklı olarak kıyaslanmasını sağlar.

Genel formu: CMP opr1,opr2

 2 sayı arasında bir ilişki olup olmadığını anlayabilmek için bu sayıları birbirinden çıkartmak ve bu çıkarma içleminin flaglar üzerindeki etkilerini öncelemek gerekir.

Örn: çıkarma işlemi sonucunda zero flagı set durumuna geçiyorsa bu 2 sayının birbirine eşit olduğu; aksi taktirde birbirinden farklı olduğu anlaşılabilir.

İşaretsiz Sayılarda (A,B)

İşaretli Sayılarda (A,B)

ZF:1 ise A=B

ZF:1 ise A=B

ZF:0 ise A<>B

ZF:0 ise A<>B

CF:1 ise A<B

SF<>OF ise A<B

Genel olarak bir kıyaslama işleminden hemen sonra kıyaslama sonucuna bağlı olarak belli program parçalarının icra ettirilmesi, belli program parçalarının ise icra ettirilmemesi istenebilir. Bu durumda CMP komutunu tek başına kullanmak bir anlam ifade etmez. Cmp komutundan hemen sonra koşullu dallanma komutları yada koşullu döngü komutları ile program akışının farklı bir konumda devam etmesini sağlar.

Lojik Komutlar

Lojik operasyonlar kapı olarak isimlendirilen elektronik aygıtlar tarafından gerçekleştirilir.

Bir kapıda genel olarak 2 giriş ve 1 çıkış sinyali yer alır. Sadece not kapısı tek bir giriş ve tek bir çıkış sinyali ile çalışır. Lojik kapının girişindeki sinyallerle operasyonlara tabi tutulan bitlere çıkıştaki sinyaller ise operasyon sonucuna karşılık gelir.

Lojik Komutlar

  • OR
  • NOT
  • AND
  • XOR
  • TEST

NOT Komutu

 Operandının değerinin binary sistemdeki karşılığında yer alan 1 bitlerinin 0, 0 bitlerinin 1 yapar. Yani her bir bitin değilini üretir. Elde edilen sonuç operand olarak belirtilen alıcı alana aktarılır.

Genel Formu: NOT opr

OR Komutu

 2 sayısal değeri oluşturan bitleri karşılıklı olarak kıyaslar bitlerden her 2 side 0 ise yeni bit değeri olarak 0, aksi taktirde 1 sonucunu üretir. Operasyon sonrasında elde edilen değer soldaki alıcı alan operandına aktarılır.

Genel formu: or opr1,opr2

x

y

Or (x,y)

1

1

1

0

1

1

1

0

1

0

0

0

XOR Komutu

 Kendine operand olarak verilen değerlerin karşılıklı olanlarını kıyaslar şartların her 2 sininde aynı olduğu durumlarda 0 şartların birbirinden farklı olduğu durumlarda 1 sonucunu üretir. Yapılan işlem sonrasında elde edilen sonuç alıcı alan operandına aktarılır.

Genel Formu:XOR opr1,opr2

x

y

xor (x,y)

1

1

0

0

1

1

1

0

1

0

0

0

AND Komutu

 2 sayısal değeri oluşturan bitlerin karşılıklı olanlarını kıyaslar bitlerden her 2 side 1 ise 1 sonucunu, aksi taktirde 0 sonucunu üretir. Operasyon sonrasında elde edilen sonuç soldaki alıcı alan operandına aktarılır.

Genel Formu: AND opr1,opr2

x

y

and (x,y)

1

1

1

0

1

0

1

0

0

0

0

0

TEST Komutu

 Tamamiyle and komutu gibi çalışır. Test operasyonu tüm flagları and komutunda olduğu gibi etkiler. Farklı olarak komutunda birlikte kullanılan operandların değerini değiştirmez

Genel Formu: Test opr1,opr2

Dallanma, İcra Transferi

 Bir proğramın icra akışı bir dallanma yada bir procedure çağırımını gerçekleştiren bir komut kullanmadıkça birbirini izleyen komutlar üzerinde devam eder. Dallanma komutları sayesinde icra akışının bir sonraki komuta geçmesi engellenerek adresi belirtilen başka bir komuta transfer edilmesine sebep olur. Dallanma komutlarını kullanmaktaki asıl amaç belli bir şartın doğru yada yanlış olmasına bağlı olarak belli program parçalarının icra görmesini yada görmemesini sağlayabilmektir. Ayrıca dallanma komutlarını kullanarak belli program parçalarının döngüye sokulması sıklıkla yapılan işlemlerdendir. Dallanma komutları 2 ayrı sınıfta toplanır.

Koşulsuz Dallanma Komutları

  • JMP

Koşullu Dallanma Komutları

  • JZ,JE …………..= ise
  • JB,JC,JNAE …..< ise
  • JL,JNGE …..<ise
  • JA,JNBE …..> ise
  • JG,JNLE …..> ise
  • JBE,JNA …..<= ise
  • JLE,JNG …..<= ise
  • JNB,JNC,JAE …..>= ise
  • JGE,JNL …..>= ise
  • JNZ …………..<> ise
  • JO …………..OF:1 ise
  • JNO …………..OF:0 ise
  • JS ………….SF:1 ise
  • JNS ………….SF:0 ise
  • JCXZ ………….CX:0 ise

JMP Komutu

 Programın icra akışını bir noktadan başka bir noktaya koşulsuz olarak yönlendirir. İcra akışının yönlendirileceği komutun adresi JMP komutunun parametresi olarak kullanılır.

Genel Formu: JMP adres

J:jump=atla

Z:Zero=sıfır

E:Equal=eşit

C:Carry=Carry Flağı

B:Below=Küçük

A:Above=büyük

O:Oweflow=OF

S:Sign=SF

L:Less=küçük

G:Greater=büyük

N:Not=değil

CX:CX reg. =CX

Koşullu Dallanma Komutları

 8086 mikroişlemcisi belirtilen bir koşulun doğru olması halinde dallanmayı sağlar. 17 farklı dallanma komutuna sahiptir.

Dallanma operasyonunun gerçekleştirilebilmesi için belirli bir koşulun doğru olması gerekir. Komutun icrası sırasında belirtilen doğru ise verilen adrese dallanır. Koşul doğru değil ise dallanma gerçekleşmez ve işlenen komut ile icra devam eder. Koşullu dallanma komutları 1 veya 2 flagın mevcut değerine göre hareket eder.

JZ/JE Komutları

İşaretli ve işaretsiz sayılar üzerinde yapılan operasyonlardan sonra kullanılır.komutun icrası sırasında ZF set durumunda ise adres olarak belirtilen bölgeye dallanma işlemi gerçekleşir. Bir CMP komutunun hemen arkasında kullanıldıklarında sayıların birbirine eşit olması halinde dallanma gerçekleşir.

JC/JB/JNAE Komutu

 İşaretsiz sayılar üzerinde yapılan operasyonlardan sonra kullanılırlar. Carry flagının 1 olması durumunda dallanma gerçekleşir. Bir CMP operasyonundan sonra kullanıldığında 1. değerin 2. değerden küçük olması durumunda dallanma gerçekleşir.

JL/JNGE Komutu

 İşaretli sayılar üzerinde yapılan operasyonlardan sonra kullanılır.sign ve overflow flağının değeri birbirinden farklı ise dallanma gerçekleşir. İşaretli bir sayının işaretli başka bir sayıdan küçük olup olmadığını kontrol etmek üzere bir cmp komutundan hemen sonra kullanılır.

 

JA/JNBE Komutu

 Her 2 komutta işaretsiz sayılar üzerinde yapılan operasyonlardan sonra kullanılırlar. Bu komutlar Carry ve zero flaglarını kontrol eder. Her 2 flag da reset durumunda ise dallanma gerçekleşir. Bir cmp operasyonundan hemen sonra kullanıldığında 1. sayının 2. sayıdan büyük olması durumuna göre dallanma gerçekleşir.

JG/JNLE Komutu

 İşaretli sayılar üzerinde yapılan operasyonlardan sonra kullanılır. Yapılan operasyon sonrasında ZF reset, sign ile OF flaglarının değeri birbirine eşit ise dallanma gerçekleşir. İşaretli 1. değerin işaretli 2. değerden büyük olup olmadığını kontrol etmek üzere bir cmp komutunun hemen arkasından kullanulur.

JBE/JNA Komutu

 İşaretsiz sayılarda yapılan operasyonlardan sonra kullanılırlar. Operasyon sonrasında Carry veya ZF herhangi biri set edilmişse dallanma gerçekleşir.bir değerin başka bir değerden küçük yada eşit olup olmadığını öğrenmek üzere bir cmp komutunun hemen arkasından kullanılırlar.

ÖRNEK:0 ile 9 arasında herkangi bir rakamın sürekli kuvveti alınıyor. Girilen sayının kaçıncı kuvveti 1000 den büyük olduğunu hesaplayan program blognu yazınız.

JLE/JNG Komutu

 İşaretli sayılar üzerinde yapılan operasyonlardan sonra kullanılırlar. Operasyon sonrasında ZF set veya SF<>OF ise dallanma gerçekleşir. İşaretli bir sayının işaretli başka bir sayıdan küçük yada eşit olup olmadığını kontrol etmek üzere bir cmp komutunun hemen arkasından kullanılır.

JNB/JNC/JAE Komutu

 İşaretsiz sayılar üzerinde yapılan operasyonlardan sonra kullanılır. Operasyon sonrasında ZF set veya CF reset ise dallanma gerçekleşir. Bir cmp komutunun hemen arkasından kullanıldıklarında 1. değerin 2. değerden büyük yada eşit olup olmadığını kontrol edilir.

JNL/JGE Komutu

 İşaretli sayılar üzerinde yapılan operasyonlardan sonra ZF set edilmişse yada sign ile OF flaglarının değerleri birbirlerine eşitse dallanma gerçekleşir. İşaretli bir değerin başka bir değerden büyük yada eşit olup olmadığını kontrol etmek üzere bir cmp komutunun sonrasında kullanılır.

JNZ/JNE Komutu

 İşaretli ve işaretsiz sayılar üzerinde yaılan operasyonlardan sonra kullanılırlar. Yapılan operasyon sırasında ZF reset ise dallanma gerçekleşir. Bir cmp operasyonundan hemen sonra kullanıldıklarında sayıların birbirinden farklı olması durumuna göre dallanma gerçekleşir.

JS Komutu

 İşaretli sayılar üzerinde yapılan operasyonlardan sonra kullanılırlar. Sign flağının set durumuna göre dallanmaya sebep olurlar.

JNS Komutu

 İşaretli sayılar üzerinde yapılan operasyonlardan sonra kullanılarak SF reset durumuna göre dallanma gerçekleşir.

JO ve JNO Komutları

İşaretli sayılar üzerinde yapılan operasyonlarda kullanılarak yapılan operasyon sırasında OF set ediliyorsa JO komutunun, set edilmiyorsa JNO komutnun icrası gerçekleşir.

JCXZ Komutu

 Diğer koşullu dallanma komutlarından farklıdır. Diğer koşullu dallanma komutları bayrakların durumunu kontrol ederler.JCXZ komutu CX registerının durumunu kontrol eder.bu komutun icrası sırasında cx registerının değeri 0’a eşitse dallanma gerçekleşir. Aksi taktirde dallanma gerçekleşmez.

Tarih:
Hit: 7688
Yazar: serhat8102

Taglar: assembly.


Yorumlar


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