MTM 305 MĠKROĠġLEMCĠLER



Benzer belgeler
MTM 305 MĠKROĠġLEMCĠLER

MTM 305 MĠKROĠġLEMCĠLER

8086 Mikroişlemcisi Komut Seti

MTM 305 MİKROİŞLEMCİLER

b) Aritmetik İşlem Komutları

MTM 305 MĠKROĠġLEMCĠLER

MTM 305 MĠKROĠġLEMCĠLER

MTM 305 MİKROİŞLEMCİLER

MTM 305 MĠKROĠġLEMCĠLER

Bölüm 4 Veri Aktarma Komutları

Adresleme Modları. Mikroişlemciler ve Mikrobilgisayarlar

Özet DERS 5. Şu ana kadar bilmeniz gerekenler... İşaretsiz Çarpma. Bayraklardaki Durumlar. İşaretli Çarpma

MTM 305 MĠKROĠġLEMCĠLER

MTM 305 MİKROİŞLEMCİLER

Program Kontrol Komutları. Mikroişlemciler ve Mikrobilgisayarlar 1

Bölüm 5: ARITMETIK VE MANTIK IŞLEM YAPAN KOMUTLAR

Ders 3 ADRESLEME MODLARI ve TEMEL KOMUTLAR

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

Bölüm 3: Adresleme Modları. Chapter 3: Addressing Modes

BIL 362 Mikroilemciler Dersi Final Sınavı Cevapları

İŞLEMCİ DURUM KAYDEDİCİSİ (PROCESSOR STATUS REGISTER)

80x86 MICROPROCESSOR Instructions

Ders Özeti. Ders 2. PC nin İç Organizasyonu. Mikroişlemcinin Organizasyonu. Basitçe İşlemciyi Oluşturan Parçalar. Mikroişlemciler

BIL 362 Mikroilemciler Dersi Arasınav Cevapları 3 Temmuz 2007

16 bitlik işlemciler basit olarak 8 bitlik işlemciler gibi Kaydedici ALU Zamanlama/kontrol

Mikroişlemciler. Giriş

BBM 341 Sistem Programlama

Mikroişlemciler. Giriş

Debug Komutları C:\>DEBUG - Çizgi işareti artık debug programının komut kabul etmeye hazır olduğunu belirtmektedir.

Linux Assembly Programlamaya Giriş

6. Mikroişlemcili Geliştirme Sistemleri

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUARI MİKROİŞLEMCİLİ A/D DÖNÜŞTÜRÜCÜ

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUARI İKİLİ TABANDA ÇOK BAYTLI ÇARPMA

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI KESMELİ GİRİŞ/ÇIKIŞ

1 NEDEN SEMBOLİK MAKİNA DİLİ ÖĞRENİLMELİDİR? MİKROİŞLEMCİLERİN ÇALIŞMA BİÇİMLERİ TİPİK BİR RAM İN YAPISI

BM-311 Bilgisayar Mimarisi

Veri Yapıları ve Algoritmalar. Giriş

Quiz:8086 Mikroişlemcisi Mimarisi ve Emirleri

Program akıģı sırasında belirtilen satır numaralı yere gitmek için kullanılır. Genel formu: [<satır numarası>] GOTO <satır numarası 1> GOTO n

CSD İŞLETİM SİSTEMİNDE SİSTEM FONKSİYONLARININ ÇAĞIRILMASI

Prepared By IcEN. >> IcEN. Bu makalemizde 80x86 gerçek mod komutlar inceleyece iz.

80X86 SEMBOLİK MAKİNA DİLİ

MİKROBİLGİSAYAR SİSTEMLERİ. Teknik Bilimler Meslek Yüksekokulu

Fortran komut satırı toplam 80 kolon ve 5 bölgeden oluģur. Komut satırının yapısı aģağıdaki gibidir:

Aritmetiksel Komutlar

Araş. Gör. Abdulkerim ŞENOĞLU Araş. Gör. Mehmet AYAN Araş. Gör İbrahim Kök. BM 310 Mikroişlemciler Dersi Laboratuvarı (LAB2)

JZ TEST3 (7/3) 1 makine çevrimi süresi

8086 dan core2 ya yazaç yapısını tanımak. Bayrak yazacının içeriğinde yer alan bayrakların görevlerini tanımlamak. Real mod çalışmada bellek

DENEY II RAPORU MİKROİŞLEMCİ UYGULAMALARI LABORATUVARI

C İLE BUFFER OVERFLOW-2

Bahar Dönemi BIL382 Mikroişlemcili Sistem Lab. Vize Sınavı,

Mikrobilgisayar Mimarisi ve Programlama

Assembly Programlama Dili T e m m u z

Basit Bootstrap Uygulaması

Mikroişlemciler. Öğr. Gör. Kürşat Mustafa KARAOĞLAN Güz

DENEY III RAPORU MİKROİŞLEMCİ UYGULAMALARI LABORATUVARI


İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI OLAYLARI ZAMANLAMA

SAUEEE.ORG. Önce C 00 Sonrası C 00

Öğr. Gör. Kürşat Mustafa KARAOĞLAN Güz

Mikroişlemcili Sistemler ve Laboratuvarı 8.Hafta

Bileenler arasndaki iletiim ise iletiim yollar ad verilen kanallar yardm ile gerçekleir: 1 Veri Yollar 2 Adres Yollar 3 Kontrol Yollar

Hem lw hem de sw komutlarının ofseti 16-bitlik işaretli tamsayıdır.

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI OLAYLARI ZAMANLAMA

8086 Mikroişlemcisi Komut Seti

K uark projesi. Temel Özellikler :

Şekil. 64 Kelimelik Yığıtın Blok Şeması

Özyineleme (Recursion)

Assembly. Programlama Dili. T e m m u z

İşletim Sistemlerine Giriş

(5 soru seçerek cevaplandırınız. Seçilen soru numaralarını yukarıdaki çizelgede işaretleyiniz) Sınav süresi 100 dakikadır. Başarılar dileriz.

Mikrobilgisayar Donanımı

Veri Yapıları ve Algoritmalar. Giriş (Genel Tanımlar ve Kavramlar) Dr. Öğr. Üyesi M. Ozan AKI

Metasploit Framework ile Exploit Geliştirme. Fatih Özavcı Canberk Bolat

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

KOMUT TABLOSU İLE İLGİLİ AÇIKLAMALAR:

BİL 220 Sistem Programlamaya Giriş

ÖNEMLİ AÇIKLAMA: Bu derslerdeki sunumların kısa bir özetini göstermek için hazırlanmıştır. Burada türkçeleştirilmemiş olan kısımlar sorulmayacak

ASSEMBLY, MİKROİŞLEMCİLER VE PİC DERSİ WEB SAYFASI ANA SAYFA

MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

Program AkıĢ Kontrol Yapıları

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI OLAYLARI ZAMANLAMA


BM-311 Bilgisayar Mimarisi

Programlama Dilleri 1. Ders 4: Diziler

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Şekil XNOR Kapısı ve doğruluk tablosu

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır.

Yrd.Doç.Dr. Celal Murat KANDEMİR. Kodlama (Coding) : Bir nesneler kümesinin bir dizgi (bit dizisi) kümesi ile temsil edilmesidir.

Merkezi İşlem Birimi MİKROİŞLEMCİ SİSTEMLERİ. MİB Yapısı. MİB in İç Yapısı. MİB Altbirimleri. MİB in İç Yapısı

MİKROBİLGİSAYAR SİSTEMLERİ VE ASSEMBLER

Mikrobilgisayar Mimarisi ve Programlama

INTEL İŞLEMCİLERİNDE CSD İŞLETİM SİSTEMİNİN BAŞLATILMASI. Selim Nasır

BBM 341 Sistem Programlama

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

MİKROBİLGİSAYAR SİSTEMLERİ VE ASSEMBLER

Pratik Maliyet ve Karlılık

Transkript:

KARABÜK ÜNĠVERSĠTESĠ TEKNOLOJĠ FAKÜLTESĠ MEKATRONĠK MÜHENDĠSLĠĞĠ BÖLÜMÜ MTM 305 MĠKROĠġLEMCĠLER ArĢ. Gör. Emel SOYLU ArĢ. Gör. Kadriye ÖZ

String Komutarı MOVS CMPS SCAS LODS STOS

String Komutları MOVS, bir bellek bölgesinin baģka bir bellek bölgesine aktarılması CMPS, farklı iki bellek bölgesinin içeriklerinin karģılaģtırılması SCAS, bellek bölgesinin içeriğinin EAX/AX/AL yazmacı ile karģılaģtırılması LODS, bellek bölgesindeki değerlerin EAX/AX/AL yazmacına yüklenmesi STOS, Bellek bölgesinin EAX/AX/AL yazmacının değeri ile doldurulması

String Komutları String komutları bellek alanı üzerinde byte, word ve double word olmaz üzere, farklı büyüklükler ile iģlem yapmayı mümkün kılar. Bu komutlar genel olarak tekrarlamalı iģlemleri gerçekleģtirmek için tasarlanmıģtır. ĠĢlemlerin tekrar sayısı CX yazmacı ile belirlenirken dizi komutlarının önüne konulan REP öneki çevrimin yapılmasını mümkün kılmaktadır. Bu gruba dahil komutlarda DF bayrağının değeri yapılan iģlemin yönünü belirlediğinden oldukça önemlidir. DF=1 ise indis yazmacı azalır, 0 ise artar. Ġndislerin artıģ azalıģ miktarı Byte ise 1 Word ise 2 Double word ise 4 tür.

MOVSB (Move String Byte) Byte bazında aktarma yapan bir komuttur. Komutun görevi DS:SI ikilisinin gösterdiği adresteki byte ı ES:DI ikilisinin gösterdiği adrese aktarmaktır. MOVS komutu bayrakları etkilememektedir. Yapılan iģlem: [ES:DI] [DS:SI] DI DI-1 SI SI-1 Ör: LEA SI,eskiyer LEA DI,yeniyer MOV CX,10 CLD REP MOVSB ;REP her seferinde CX i bir azaltır. Her turda SI, ve DI yazmaçlarının değeri iģlem byte türünde olduğundan 1 arttırılacaktır.

MOVSB (Move String Byte) #make_com# ORG 100h LEA SI, a1 LEA DI, a2 MOV CX, 5 REP MOVSB RET a1 DB 1,2,3,4,5 a2 DB 5 DUP(0)

MOVSW Move String Word Word bazında aktarma iģlemi yapan komuttur. Komutun görevi DS:SI ikilisinin gösterdiği adresteki wordü ES:DI ikilisinin gösterdiği adrese aktarmaktır. Word olması dolayısıyla DF bayrağının durumuna bağlı olarak artım ve azaltmalar ikiģer olarak yapılmaktadır. Yapılan iģlem: [ES:DI] [DS:SI] DI DI-2 SI SI-2 (DF=1 ise azaltma 0 ise artırma yapılır)

MOVSW Move String Word #make_com# ORG 100h LEA SI, a1 LEA DI, a2 MOV CX, 5 REP MOVSW RET a1 DW 1,2,3,4,5 a2 DW 5 DUP(0)

MOVSD Move String Doubleword Doubleword bazında aktarma iģlemi yapan komuttur. Komutun görevi DS:SI ikilisinin gösterdiği adresteki doubleword ü ES:DI ikilisinin gösterdiği adrese aktarmaktır. Doubleword olması dolayısıyla DF bayrağının durumuna bağlı olarak artım ve azaltmalar dörder olarak yapılmaktadır. Yapılan iģlem: [ES:DI] [DS:SI] DI DI-4 SI SI-4 (DF=1 ise azaltma 0 ise artırma yapılır)

CMPSB Compare String Byte Belleğin farklı adreslerindeki byte büyüklüğündeki değerlerin karģılaģtırılmasında kullanılmaktadır. CMP komutunda olduğu gibi iki iģlenenin birbirinden çıkarılması sonucu bayraklar etkilenmektedir. [DS:SI]-[ES:DI] iģlemden bayraklar etkilenir. DI DI-1 SI SI-1

Örnek LEA SI,DIZI1 LEA DI,DIZI2 MOV CX,10 CLD REPE CMPSB JNE UYMAZ DIZI1 ve DIZI2 isimli bellek alanlarında bulunan 10 byte lık verinin aynı olup olmadığı kontrol edilmek istenmektedir. CLD komutu ile DF=0 yapıldığı için SI ve DI değerleri her seferinde bir artırılacaktır. REPE öneki iģlemin eģitlik söz konusu olduğu sürece devamını sağlar ve her turda CX sıfır oluncaya kadar SI ve DI değerleri otomatik olarak artırılır. Herhangi bir noktada eģitsizlik söz konusu olursa REPE koģulu bozulur ve iģlem JNE komutu ile devam eder.

CMPSW Compare String Byte Belleğin farklı adreslerindeki word büyüklüğündeki değerlerin karģılaģtırılmasında kullanılmaktadır. CMP komutunda olduğu gibi iki iģlenenin birbirinden çıkarılması sonucu bayraklar etkilenmektedir. [DS:SI]-[ES:DI] iģlemden bayraklar etkilenir. DI DI-2 SI SI-2

CMPSD Compare String Byte Belleğin farklı adreslerindeki doubleword büyüklüğündeki değerlerin karģılaģtırılmasında kullanılmaktadır. CMP komutunda olduğu gibi iki iģlenenin birbirinden çıkarılması sonucu bayraklar etkilenmektedir. [DS:SI]-[ES:DI] iģlemden bayraklar etkilenir. DI DI-4 SI SI-4

SCASB Scan String Byte SCASB komutu AL yazmacı ile ES:DI ikilisinin gösterdiği adreste bulunan byte ı karģılaģtırır. Bu karģılaģtırmadan sadece bayraklar etkilenir. Bu komutta diğer benzerleri gibi REP ön ekleri ile bağlantılı olarak kullanılmaktadır. Yapılan iģlem: AL-[ES:DI] Bayraklar etkilenir. DI=DI-1 (DF 0 ise artırma olacaktır.)

Örnek LEA DI,mesaj MOV CX,000CH CLD MOV AL, * REPNE SCASB JE buldu Mesaj isimli bellek alanının içinde * karakteri aranmaktadır. Bunun için DI yazmacına mesaj değiģkeninin baģlangıç adresi, AL ye aranacak karakter,cx e tekrar sayısı verilmiģ, CLD ile DF=0 yapılarak DI yazmacının artan yönde değiģeceği belirlenmiģtir. Buna göre iģlem dizi içinde * karakteri bulunana kadar REPNE çevrimi içinde dönecek bu aģamada DI yazmacının gösterdiği adresteki veri ile AL deki eģit olduğundan ZF=1 olacak REPNE sağlanamayıp çevrimden çıkılacaktır. Çevrimin normal yolla mı yoksa ZF=1 olduğu için mi bittiğini anlamak için koģullu dallanma komutu ile ZF bayrağının durumu kontrol edilerek arananın bulunup bulunmadığına karar verilmektedir.

SCASW Scan String Word SCASW komutu AX yazmacı ile ES:DI ikilisinin gösterdiği adreste bulunan word ü karģılaģtırır. Bu karģılaģtırmadan sadece bayraklar etkilenir. Bu komutta diğer benzerleri gibi REP ön ekleri ile bağlantılı olarak kullanılmaktadır. Yapılan iģlem: AX-[ES:DI] Bayraklar etkilenir. DI=DI-2 (DF 0 ise artırma olacaktır.)

SCASD Scan String Doubleword SCASD komutu EAX yazmacı ile ES:DI ikilisinin gösterdiği adreste bulunan doubleword ü karģılaģtırır. Bu karģılaģtırmadan sadece bayraklar etkilenir. Bu komutta diğer benzerleri gibi REP ön ekleri ile bağlantılı olarak kullanılmaktadır. Yapılan iģlem: EAX-[ES:DI] Bayraklar etkilenir. DI=DI-4 (DF 0 ise artırma olacaktır.)

LODSB Load String Byte DS:SI ikilisinin belirttiği adresten bir byte ı AL yazmacına yerleģtirir. SI yazmacının değeri ise DF bayrağının durumuna bağlı olarak değiģtirilir. LOADSB komutu bayraklar üzerinde bir değiģikliğe neden olmaz. Yapılan iģlem: AL=[DS:SI] SI=SI-1;(DF=0 ise artma olacaktır)

Örnek LEA SI,input LEA DI,output LEA BX,ascii2ebcdic CLD L1: LODSB OR AL,AL JZ L2 XLAT STOSB JMP L1 L2:.. Örnekte input isimli bellek alanındaki ASCII karakterlerin EBCDIC karģılıkları output isimli bellek alanına yazılmaktadır. ĠĢlem input alanında 00H görünceye kadar devam edecektir. Bu amaçla SI,DI ve BX yazmaçları sırası ile input, output ve ascii2ebcdic isimli bellek alanlarının baģını gösterecek Ģekilde ayarlanmıģtır. DF=0 yapıldığı için her iģlemden sonra SI ve DI yazmacı artırılacaktır. L1 etiketi ile baģlayan çevrimde LODSB ile AL yazmacına alınan değer OR iģleminden geçirilerek (bu iģlem yazmaç üzerinde bir değiģikliğe neden olmaz) sadece bayraklar düzenlenir. ZF=1 olmuģsa L2 etiketine gidilerek akıģ sonlandırılmaktadır. Aksi halde XLAT komutu ile AL=[BX+AL] iģlemi yapılmıģ ve daha önce ASCII değerini barındıran AL yazmacına bunun karģılığı olan EBCDIC değeri ascii2ebcdic tablosundan alınmıģtır. STOSB komutu ise [DI]=AL iģlemini yaparak hedef alanda EBCDIC kodlarından oluģan diziyi oluģturmaktadır.

LODSW Load String Word DS:SI ikilisinin belirttiği adresten bir word üı AX yazmacına yerleģtirir. SI yazmacının değeri ise DF bayrağının durumuna bağlı olarak değiģtirilir. LOADSW komutu bayraklar üzerinde bir değiģikliğe neden olmaz. Yapılan iģlem: AL=[DS:SI] SI=SI-2;(DF=0 ise artma olacaktır)

LODSD Load String Doubleword DS:SI ikilisinin belirttiği adresten bir word üı EAX yazmacına yerleģtirir. SI yazmacının değeri ise DF bayrağının durumuna bağlı olarak değiģtirilir. LOADSD komutu bayraklar üzerinde bir değiģikliğe neden olmaz. Yapılan iģlem: AL=[DS:SI] SI=SI-4;(DF=0 ise artma olacaktır)

STOSB Store String Byte LODSB iģleminin yaptığının tam tersini yapan bir iģlemdir. AL yazmacındaki değeri ES:DI ikilisinin gösterdiği bellek alanına yerleģtirir.di yazmacının değeri DF bayrağının durumuna bağlı olarak değiģtirilir. Yapılan iģlem: [ES:DI]=AL DI=DI-1 (DF=0 ise artan)

Örnek MOV DI,0 MOV CX,100 XOR AL,AL CLD REP STOSB BaĢlangıç adresi olarak 0 seçiliyor. ĠĢlem tekrar sayısı CX yazmacındaki değer ile belirleniyor. AL yazmacı sıfırlanıyor. DF=0 yapılarak DI yazmacının artarak ilerleyeceği belirleniyor. Böylece 0 adresinden itibaren 100 byte lık bellek alanı sıfır ile dolduruluyor.

STOSW Store String Word LODSW iģleminin yaptığının tam tersini yapan bir iģlemdir. AX yazmacındaki değeri ES:DI ikilisinin gösterdiği bellek alanına yerleģtirir.di yazmacının değeri DF bayrağının durumuna bağlı olarak değiģtirilir. Yapılan iģlem: [ES:DI]=AL DI=DI-2 (DF=0 ise artan)

STOSD Store String Doubleword LODSD iģleminin yaptığının tam tersini yapan bir iģlemdir. EAX yazmacındaki değeri ES:DI ikilisinin gösterdiği bellek alanına yerleģtirir.di yazmacının değeri DF bayrağının durumuna bağlı olarak değiģtirilir. Yapılan iģlem: [ES:DI]=AL DI=DI-4 (DF=0 ise artan)

CBW Convert Byte to Word ĠĢleneni olmayan bu komut AL yazmacında bulunan verinin AX yazmacına yerleģtirilmesini sağlar. Bu iģlem yapılırken iģaret biti yüksek anlamlı byte boyunca tekrarlanır. CBW; AL=10001111B ise sonuç AX=1111111110001111B olur AL=01111000B ise sonuç AX=0000000001111000B olur.

CWD Convert Word To Doubleword ĠĢleneni olmayan bu komut AX yazmacında bulunan bilginin DX ve AX yazmaç ikilisine yerleģtirilmesini sağlar. Bu iģlem yapılırken iģaret biti yüksek anlamlı word boyunca tekrarlanır. Yani DX yazmacı iģaret bitinin sahip olduğu değer ile doldurulur. CWD; AX=1000000011111111B ise sonuç DX=1111111111111111B ve AX=1000000011111111B olacaktır.

CWDE Convert Word To Doubleword Extended Bu komut ile AX yazmacındaki değerin iģaret biti EAX yazmacının yüksek anlamlı wordü boyunca tekrarlanır.

CDQ Convert Doubleword to Quadword ĠĢaret biti kalmak kaydıyla doubleword bir sayıyı quadword sınırına getirmektedir. Bu komut yanına iģlenen almaz, giriģ verisi olarak EAX yazmacını kabul eder ve sonucu EDX:EAX ikilisinde oluģturur.

Ön Ekler Ön ekler CMPS,LODS,MOVS,SCAS,STOS türü string komutlarının önünde, iģlemlerin istenen sayıda veya gerek koģul sağlanıncaya kadar tekrarlanmasını sağlamak üzere kullanılırlar. ĠĢlemin tekrar sayısı CX yazmacındaki değer yardımıyla belirlenir. Her iģlemden sonra CX yazmacı otomatik olarak 1 azaltılacaktır. Özellikle tek komutun tekrarlandığı türde iģlemlerde LOOP komutu kullanarak iģlemleri yapmak yerine ön eklerden yararlanmak bir alıģkanlıktır.

REP Repeat String Prefix CX <>0 olduğu sürece REP komutunu takip eden iģlem tekrarlanır. Diğer deyiģle CX=0 olunca durur. Örnek: LEA DI,dizi CLD XOR AL,AL MOV CX,1024 REP STOSB Dizi isimli bellek alanının içeriğinin sıfırlanması için bellek adresi DI yazmacında tutulmaktadır. ĠĢlemin artan adrese doğru yapılmadı için DF=0 yapılır. ĠĢlem sayısı CX yazmacına aktarılır. STOSB iģlemi yapıldıktan sonra REP öneki gereği CX azaltılır ve sıfırdan farklı olduğu sürece STOSB komutu tekrar iģletilir.

REP Repeat String Prefix Örnek: LEA SI,dizi1 LEA DI,dizi2 CLD MOV CX,8 REP MOVSB Dizi1 ile belirlenen bellek alanından 8 byte veri dizi2 ile belirlenen alana aktarılmaktadır. Bu iģlem MOVSB yerine MOVSW ile yapılacak olursa CX yazmacında 8 değeri kullanmak yerine 4 değeri kullanılmalıdır.

REPE/REPZ Repeat Equal/Repeat Zero ZF bayrağının değeri 1 olduğu sürece iģleme devam edilecektir. Diğer deyiģle CX=0 veya ZF bayrağının değeri 0 olduğunda iģlem sona erer. Örnek: XOR BL,BL CLD MOV CX,8 LEA SI,dizi1 LEA DI,dizi2 REPE CMPSB JNE son INC BL. Dizi1 ve dizi2 isimli bellek alanlarının içerikleri karģılaģtırılmaktadır. CX=0 veya ZF=0 ise iģlem biter. ĠĢlemin hangi koģula bağlı olarak bittiği koģullu dallanma komutuyla belirlenir. ĠĢlem bir eģitlik sonucu sona ermiģ ise BL yazmacının değeri 1 artırılmaktadır.

REPNE/REPNZ Repeat not Equal/Repeat not Zero ZF bayrağının değeri 0 olduğu sürece iģleme devam edilecektir. Diğer deyiģle CX=0 veya ZF bayrağının değeri 1 olduğunda iģlem sona erer.

Örnek : Aşağıda verilen programda BASSON alt programı kaynak verisini önce B harfinden başlayarak Hedef değişkenine kopyalamaktadır. SONBAS alt programı ise R harfinden başlayarak kopyalamaktadır. MODEL SMALL.STACK 64.DATA KAYNAK DB BILGISAYAR HEDEF DB ELEKTRONIK HEDEF2 DB 10 DUP ( ).CODE ANA PROC FAR CALL BASSON CALL SONBAS MOV AH,4CH INT 21H ANA ENDP BASSON PROC NEAR CLD ; soldan sağa doğru MOV CX,10 LEA SI, KAYNAK LEA DI, KAYNAK REP MOVSB RET BASSON ENDP SONBAS PROC NEAR STD ; sağdan sola doğru MOV CX,10 LEA SI,KAYNAK+10 LEA DI,HEDEF+10 REP MOVSB RET SONBAS ENDP END ANA

Örnek : Kopyalama.MODEL SMALL.CODE ORG 100H BAS: JMP SHORT KOPYALA KAYNAK DB BILGISAYARCILAR HEDEF DB ELEKTRONIKCILER KOPYALA PROC NEAR CLD MOV CX,15 LEA SI,KAYNAK LEA DI,HEDEF TEKRAR: LODSB STOSB LOOP TEKRAR MOV AH,4CH INT 21H KOPYALA ENDP END BAS

Örnek: Aşağıda verilen iki string eşit ise BH kaydedicisine 1 değil ise BH kaydedicisine 0 atan programı yapınız. NAME1 DB ASSEMBLERS NAME2 DB ASSEMBLERS CLD MOV CX,10 LEA SI,NAME1 LEA DI,NAME2 REPE CMPSB JNE ESITDEGIL MOV BH,01 JMP SON ESITDEGIL: MOV BH,0 SON: MOV AH,4CH INT 21H ; EĢit olduğu müddetçe karģılaģtır.

Örnek program verilen LDA#305A Stringindeki elemanlar arasında # karakterini arayıp, yerine $ karakteri ile değiştirir..model SMALL.STACK 64.DATA DIZI DB LDA #305A.CODE ANA PROC FAR MOV AX,@DATA MOV ES,AX CLD MOV AL, # MOV BH, $ MOV CX,9 LEA ES:DI,DIZI REPNE SCASB JNE CIK MOV BYTE PTR [DI-1], BH CIK: MOV AH,4CH INT 21H ANA ENDP END ANA

Yığın Komutarı POP POPA POPAD POPF POPFD PUSH PUSHA PUSAD PUSHF PUSHFD

Yığın Komutları Yığın çağırılan yordamların dönüģ adreslerini, yazmaçların değerlerini ve yordamlar arasında aktarılan parametreleri saklamak amacıyla kullanılmaktadır. 32 bitlik mimari kullanılmadığı sürece yığın yapısı üzerinde çalıģan komutlar her seferinde yığının üstünden bir word alır veya koyarlar. 80386 dan itibaren 32 bitlik iģlemcilerin devreye girmesi ile yığın iģlemleri 32 bit olarak yapılabilmektedir. 8086 iģlemcisinde SP yazmacı yığın üzerinde bulunan dolu gözü göstermektedir. POP src src SS:[SP] PUSH src SP SP-2 SP SP+2 SS:[SP] src Bu ara iģlemler PUSH ve POP komutlarının kullanımı ile otomatik olarak gerçekleģtiğinden dolayı kullanıcı müdahalesi gerekmez. POP ve PUSH komutları bayraklar üzerinde değiģiklik yapmazlar. Ancak bayrak değerlerini yığından çeken POPF komutu doğası gereği bayrakları değiģtirecektir.

POP Pop word of stack POP regw POP mem Yığın üzerinden alınan veriyi hedef olarak belirlenen iģlenene aktarıp yığın iģaretçisi (SP yazmacının değeri) artırılacaktır. Yapılan iģlem: Hedef=SS:[ESP] Ġf(sizeof(hedef)=16) then ESP=ESP+2 Else ESP=ESP+4 Endif Örnek: POP ECX;Yığından 32 bitlik değer ECX yazmacına alınır. ESP=ESP+4 olur (32 bit iģlemciler) POP AX ;Yığından 16 bit değer AX yazmacına alınır. SP=SP+2 olur.

POPA Pop all general registers SP yazmacı haricindeki tüm genel amaçlı yazmaçların yığından alınmasını sağlar. 80286 ve üstü iģlemcilerde kullanılabilir. POPA yapıldığında aģağıdaki iģlemler gerçekleģir: POP DI POP SI POP BP ADD SP,2; SP yazmacının değerinin değiģmesini engellemek için POP BX POP DX POP CX POP AX

POPAD Pop all general registers-double ESP yazmacı hariç 32 bitlik tüm genel amaçlı yazmaçların yığından alınmasını sağlar. POPADyapıldığında aģağıdaki iģlemler gerçekleģir: POP EDI POP ESI POP EBP ADD ESP,4; SP yazmacının değerinin değiģmesini engellemek için POP EBX POP EDX POP ECX POP EAX

POPF Pop flag from stack Bu komut ile bayrak (PSW) yazmacına yığından 16 bitlik değer yüklenir.sp yazmacının değeri 2 artırılır. Yapılan iģlem: FLAG=SS:[SP] SP=SP+2

POPFD Pop eflag from stack-double EFLAG yazmacına yığından alınan 32 bitlik değer yükleniresp yazmacının değeri 4 artırılır. Yapılan iģlem: EFLAG=SS:[SP] ESP=ESP+4

PUSH Push Word To The Stack PUSH idata PUSH register PUSH memory PUSH sreg Yığını üzerine konulması istenen veriyi yerleģtirir. Daha sonra yığın iģaretçisi uygun Ģekilde azaltılır. Yapılan iģlem: Ġf(sizeof(src)=16) then ESP=ESP-2 Else ESP=ESP-4 Endif SS:[ESP]=src Örnek PUSH EAX ;Yığına EAX yazmacındaki 32 bit değer konulur. PUSH AX; Yığına AX yazmacındaki 16 bit değer konulur.

Örnek MOV AX, 1234h PUSH AX POP DX ; DX = 1234h RET

PUSHA Push all general registers PUSHA 16 bitlik tüm yazmaç değerlerinin belli bir sıraya uygun olarak yığına saklanmasını sağlar. Ancak yazmaçlar arasında yığın üzerinde iģaretçi olarak kullanılan SP yazmacının durumu farklılık göstermektedir. GerçekleĢtirilen her PUSH iģleminin sonucu olarak SP yazmacının değeri 2 azalmaktadır. Bu durumda SP yazmacının yığına saklanması sırasında farklı bir yöntemin kullanılması gerekmektedir. Bunun için PUSA iģlemine baģlarken SP nin sahip olduğu değer geçici bir değiģkende saklanır ve SP yazmacının yığında saklanma sırası geldiğinde bu geçici değer yığına SP nin yerine yerleģtirilir. Yazmaçların yığına yerleģtirilme sırası Ģöyledir: Temp=SP PUSH AX PUSH CX PUSH DX PUSH BX PUSH Temp PUSH BP PUSH SI PUSH DI

PUSHAD Push all general registers-double 32 bitlik tüm yazmaç değerleri aģağıda verilen sıra dahilinde yığına yerleģtirilir. Ancak ESP yazmacını değeri bu aģamada yığına yerleģtirilmez. Yapılan iģlem: Temp=ESP PUSH EAX PUSH ECX PUSH EDX PUSH EBX PUSH Temp PUSH EBP PUSH ESI PUSH EDI

PUSHF Push Flag On To Stack Bu komut ile 16 bit ile ifade edilen bayrak değeri yığına yerleģtirilir. Yapılan iģlem: SP=SP-2 SS:[SP]=FLAG

PUSHFD Push EFlag On To Stack Bu komut ile 32 bit ile ifade edilen bayrak değeri yığına yerleģtirilir. Yapılan iģlem: ESP=SP-4 SS:[ESP]=EFLAG

Ödev 10 elemanı olan, word olarak tanımlı bir dizi içinde kaç tane tek, kaç tane çift sayı olduğunu bulan program

Beni dinlediğiniz için teģekkür ederim.