· EEM332
EEM332 Mikroişlemciler: Laboratuvar 1–2: DEBUG ve Segment Yazmaçları
EEM332 – Mikroişlemciler · 21.02.2006 · 18.10.2026
Bu yazı, Başkent Üniversitesi EEM332 Mikroişlemciler ders arşivindeki ilgili notları ve uygulamaları bir araya getiriyor (2006–2015). DEBUG başlangıcı, CS/DS/SS/ES ve IP yazmaçları, bellek adresleri; föyler ve kişisel bilgileri çıkarılmış öğrenci çözümleri. Bir arkadaşın hazırladığı çalışmalar ve ders belgeleri birlikte aktarılmış; öğrenci adları, numaraları ve grup bilgileri çıkarılmıştır. Belgelerin PDF arşiv kopyaları ve varsa kaynak kodları yazının sonunda ZIP olarak indirilebilir.
eem332_lab01
EEM 332 - Mikroişlemciler
Deney Numarası: 1 Deney Adı: Debug’a Giriş, x86 Yazmaçları ve Makina Komutları
Ön Çalışma 8086 yazmaçları ve DEBUG komutları hakkında bir araştırma yapınız ve en çok dört sayfalık bir özet hazırlayınız. Çalışmalarınıza kullandığınız kaynakların adlarını mutlaka ekleyiniz.
Deneysel Çalışma
Aşağıdaki çalışmaları okuyup, verilen komutları uygulayınız. Verilen soruların yanıtlarını raporunuzda belirtiniz.
DEBUG programını çalıştırmak için bir DOS penceresi açılır ve aşağıdaki komut girilir
C:\> debug <enter>
DEBUG tire “-” istemi ile cevap verir. Tire istemi, DEBUG programının verilecek komutları etkileşimli olarak kabul etmeye hazır olduğunu belirtir. En önemli komutlardan birisi, tüm geçerli komutların bir özetini veren “?” komutudur. Tüm geçerli DEBUG komutlarının bir listesi ders kitabının 118. sayfasında verilmiştir.
Şimdi DEBUG’ı çalıştırınız ve bütün komutların listesini görüntüleyiniz;
C:\> debug <enter>
-? <enter>
Bu komutlar uygulandığında, ekranda geçerli DEBUG komutlarının bir listesini görülür. Tüm komutlar tek bir harften oluşmaktadır. Bazı komutlar için ek bağımsız değişkenlerin kullanımı gerekmektedir.
DEBUG Üzerinde Aritmetik İşlemler
“h” komutu, DEBUG’da verilen iki bağımsız değişkenin toplamını ve farkını gösterir. DEBUG sadece 16lık (hexadecimal) sayı sisteminde işlem yapar!
DEBUG istem satırına aşağıdaki komutu giriniz
-h 3 2 <enter>
Komut işletildikten sonra ekranda aşağıdaki satır gösterilecektir
0005 0001
Burada, sırasıyla toplama ve çıkarma işlemlerinin sonucu gösterilmektedir, 3+2=5 ve 3-2=1.
Şimdi aşağıdaki komutu deneyiniz
-h 2 3 <enter>
Bu durumda negatif sonuç, 2-3= -1, 2’nin tümleyeni şeklinde verilir. Negatif bir sayının tanımlanması için o sayının en anlamlı bitinin 1 olup olmamasına bakılır. Öte yandan toplama işlemi sonucu
oluşacak pozitif bir sayının da en anlamlı biti 1 olabilir. Sonucu doğru olarak yorumlamak
PROGRAMCI’ya kalmaktadır. Örnek olarak, aşağıdaki komutları çalıştırınız
-h E1F6 1E09 <enter>
Toplamanın pozitif sonucu FFFF olarak görülmektedir! Şimdi aşağıdaki komutu çalıştırınız
-h 5C3F0 4BC6 <enter>
Görülen hata mesajı DEBUG’ın WORD bazında çalışmasından kaynaklanmaktadır. x86 mimarisinde word, 16 bit uzunluğundadır.
Yazmaçlar ve Hafıza
x86 işlemcileri (en azından 8086 versiyonu) 14 temel yazmaç içerir. Yazmaçların içeriklerini görmek
için aşağıdaki komutu giriniz
-r <enter>
İkinci satırın sonundaki 2-harfli kısaltmalara dikkat edin. Bu kısaltmalar FLAGS yazmacındaki özel amaçlı bitlerin değerlerini göstermektedir. Bir yazmacın içeriğini incelemek ve değiştirmek için “r” komutu ve değişken olarak o yazmacın adı kullanılabilir. Örnek olarak aşağıdaki komutları giriniz:
-r ax <enter>
ax 0000 :3A7 <enter>
Şimdi r komutunu kullanarak tüm yazmaçları tekrar inceleyiniz. AX yazmacının artık 03A7 sayısını sakladığını göreceksiniz.
r komutunu kullanarak BX yazmacına 92A değerini yükleyiniz. Daha sonra AX ve BX yazmaçlarının sırasıyla 3A7 ve 92A sayılarını sakladıklarını gözleyiniz.
Şimdi 3A7+92A işlemini DEBUG komutları kullanmak yerine makina komutlarını kullanarak x86 mikroişlemcisinin hafızasında yapılmasını sağlayacağız. Burada DEBUG sadece komutların işlemciye yüklenmesi için bir araç olarak kullanılacaktır. Hafızanın içeriğinin incelenmesi ve değiştirilmesi için
“e” komutu kullanılır. Aşağıda verilen komutları uygulayınız
-e 100 <enter>
3756:0100 E4.01 <enter>
-e 101 <enter>
3756:0101 85.D8 <enter>
Yukarıdaki komutları girerken büyük bir ihtimalle 3756, E4 ve 85 değerlerinden farklı değerler göreceksiniz. Bu sayılar DEBUG çalıştırılmadan önce hafızanın durumuyla ilgilidir ve bu aşamada bunun bir önemi yoktur. 01 ve D8 değerlerini 0100 ve 0101 numaralı göreli konumlara (offset) girmeniz gerekmektedir. e 100 komutunu girerek, DEBUG’a mevcut kod parçasında (code segment) 0100 numaralı göreli konumdaki bilgi sekizlisini (byte of data) yükleme emrini vermiş oluruz. Yukarıdaki örnekte 3756:0100 adresindeki mevcut sekizli (byte) E4, kullanıcı tarafından girilen 01 sekizlisi ile değiştirilmiştir. Aynı örnekte kod parçası (code segment)’nın adresi 3756’dir. Bu değer kendi bilgisayarlarınızda farklı olabilir, ancak bunun şu an için bir önemi yoktur.
Kod parçasının adresini 16’lık tabanda 10 ile çarpıp, sonuca göreli konum değeri (offset) eklendiğinde fiziksel adres (physical address) elde edilir. X86 sistemleri hafıza adreslerini genellikle parçalı olarak (segmented form) belirtirler.
x86 Kullanarak Toplama
Yazmaç içeriklerini inceleyiniz
-r <enter>
Ekrandaki görüntü aşağıdakilere benzeyecektir
AX=03A7 BX=092A CX=0000 DX=0000 SP=#### BP=#### SI=#### DI=####
DS=#### ES=#### SS=#### CS=#### IP=0100 NV UP DI PL NZ NA PO NC
#### : 0100 01D8 ADD AX, BX
Burada # 16’lık bir basamağı temsil eder. Görüntünün son satırı 01D8 değerinin hafızada saklanmakta olduğunu belirtir. Bu, aslında ADD AX, BX komutunun makina dili karşılığıdır ve bu komutun çalıştırılması ile belirtilen yazmaçların içerikleri toplanarak sonuç AX yazmacına yazılır. x86 yapısı sekizli-adreslenebilir (byte-addressible) bir yapıda olduğu için bilgi aşağıdaki şekilde
düzenlenir
3756 : 0100 01
3756 : 0101 D8
x86’da komut hafızada bulunduğu halde, komutun çalıştırılabilmesi için komutun nerede bulunduğunun belirtilmesi gerekir. x86 sistemlerde kullanılan yöntemde iki özel yazmaç kullanılır. Bunlar CS ve IP’dir. Bu yazmaçlar bir sonra işlenecek komutun parçalı adresini barındırırlar. Böylece işlenecek olan komutun hafızada bulunduğu yer, kod parçası değeri (CS yazmacında tutulur) ve göreli konum değeri (IP yazmacında tutulur) yardımıyla etkili bir şekilde gösterilir. Gereken durumlar da r komutu kullanılarak IP yazmacına doğru göreli konum değeri yüklenir (örnekte
0100).
DEBUG’da bir izleme (trace) komutu “t” bulunur ve bu komut sayesinde her defasında bir tane olmak üzere makina dili komutları çalıştırılabilinir. Mevcut hafıza ve yazmaç içerikleriyle DEBUG’a izleme
komutunu uygulayalım
-t <enter>
AX yazmacınin içeriği artık 03A7 ve 092A sayılarının toplamı olan 0CD1’dir. AX yazmacının içeriğinin işlem sonucu elde edilen toplam ile değiştiği görülür. Aynı zamanda IP yazmacının içeriği de 0102 olarak değişir. x86 sistemleri IP yazmacının içeriğini, işlenecek bir sonraki komutun adresine göre kendiliğinden değiştirir.
Şimdi sistemlerinizi kullanarak 092A (BX yazmacında) değerini, 0CD1 (AX yazmacında) değerine ekleyiniz (toplayınız). DEBUG’ın r komutunu kullanarak IP yazmacını uygun değere ayarlamayı unutmayın!
Çıkarma işlemini gerçekleştirmek için gerekli makina dili komutunu kod parçasına (code segment) eklemek gerekmektedir. 29D8 olarak makina dilinde kodlanmış komutu, göreli konum değerini 0100 olarak ayarlayıp, e komutunu kullanarak mevcut kod parçasına ekleyiniz. r komutunu
kullarak SUB AX, BX komutunun hafızaya yerleştirildiğini gözlemleyiniz ve daha sonra izleme (trace) komutunu kullanarak bu işlemin gerçekleştirilmesini sağlayınız.
Çevirici Dili Programlarındaki (Assembler Language Programs) DOS İşlevlerinin
Kullanımı
INT komutu, x86 sistemlerinin bilgisayarın önyüklemesi (boot) sırasında DOS aracılığıyla sabit
diskten hafızaya kopyalanan özel programlara ulaşılmasını sağlar. Şimdilik INT komutu bir “işlev çağrıcı” olarak düşünülebilir.
DEBUG kullanarak 0200 değerini AX yazmacına ve 0041 değerini DX yazmacına yükleyelim. INT 21 komutunun makina dili karşılğı CD21’dır (INT komutu ve yazmaçlara atanan değerlerin detaylarına internet sayfasında verilen bağlantıdan ulaşılabilir). Hafızada, 0102 göreli konum değerini kullanarak mevcut kod parçasına CD ve bir sonraki göreli konum değerinin gösterdiği parçaya 21 değerlerini giriniz. IP yazmacını 0102 olarak ayarlayınız ve hafıza ve yazmaç içeriklerinin doğru
olduğunu kontrol ediniz. Daha sonra komutu, aşağıdaki işlemi uygulayarak çalıştırınız
-g 104 <enter>
g komutu DEBUG’ın “go until” komutudur. Bu satırı uygulayarak x86’ya mevcut IP değerinden başlayarak, belirtilen IP değerine kadar olan bütün komutların çalıştırılmasını sağlarız. Burada kod parçasında değişiklik olmaz (CS:IP yapısında sadece IP değişir). Eğer izleme (t) komutunu kullanmış olsaydık, INT 21 işlevinin içinde bulunan bütün komutların işlenebilmesi için her komut için aynı komutu defalarca kullanmamız gerekirdi ve bazı durumlarda bu oldukça uzun kodların satır satır çalıştırılması anlamına gelmektedir. g komutunun kullanılması sayesinde CS:0104 değerine ulaşılana kadar gereken bütün komutların çalıştırılması sağlanır.
Yukarıdaki işlemin sonunda ekranda A karakterinin yazdığını görürüz. Burada kullandığımız INT işlevi, tüm INT işlevleri içinde 21 numaralı olanıdır. Bu işlevin kullanılmasıyla diğer DOS işlevlerine erişim sağlanabilir. AH yazmacındaki 02 (AH, AX’in en anlamlı sekizlisidir) değeri DOS’a ekrana bir karakter yazacağını gösterir. Ekrana basılacak karakteri ise DL (DL, DX’in en az anlamlı sekizlisidir) yazmacına yazdığımız 41 değeri belirtir. 41, A karakterinin ASCII kodundaki karşılığıdır.
Programların Sonlandırılması
Çevirici veya makina dili programları çalışmalarını bitirdiğinde, x86 sisteminin işletim sistemi tarafından kontrol edilebilir hale gelmesi gerekmektedir. Bunu gerçekleştirmenin bir yolu INT 20 işlevini çağırmaktır. Yüksek seviye programlama dillerinde (C/C++ gibi) yazılan programlarda derleyici kendiliğinden bu satırı eklemektedir. Kullandığımız alt seviye çevirici dilinde (assembler language) ise programın sonuna INT 20 satırını eklemek programcıya ve onun ihtiyaçlarına bağlıdır.
Şimdi 2-satırlı şu programı yazalım
INT 20
INT 21
Bunun için aşağıdaki işlemleri gerçekleştirmemiz gerekmektedir
1. DEBUG’ın r komutunu kullanarak AX ve DX yazmaçlarına sırasıyla 0200 ve 0043
değerlerini kaydedelim
2. aşağıda verilenleri sırasıyla hafızaya yükleyelim
CD
CD
3. IP ve CS yazmaçlarına INT 21 komutunun yerini gösteren hafıza adreslerini yükleyelim
4. geçerli bir bitiş göreli konum değeri belirterek DEBUG’ın g komutunu kullanıp bu
komutları çalıştıralım
Tebrikler! İlk makina dili programınızı yazıp çalıştırdınız. Programın çalışmasını laboratuvar sorumlusuna gösteriniz.
SORU 1: 2-satırlı programı çalıştırdığınızda ekranda ne gördünüz? Bunun nedenini açıklayınız.
Çevirme/Geri Çevirme (Assemble/Disassemble)
Pek çok program iki satırdan daha uzundur. Yazdığınız kodların insan tarafından anlaşılabilen hali olan anımsatıcıları (mnemonics) görmek için IP yazmacının değerini 2-satırlı programnınız başlangıç konumunu gösterecek şekilde ayarlayınız ve DEBUG’ın geri çevirme (unassemble) komutunu
aşağıdaki şekilde giriniz
-u <enter>
Programınızın anımsatıcılar şeklinde yazıldığını ve her anımsatıcının yanında hafızada saklanan 16’lık (hexadecimal) bir makina kodunun olduğunu göreceksiniz. Şu ana kadar yaptıklarımız makina dili kodlarını içermekteydi. Anımsatıcıları kullanarak bir program yazmak, yazım ve anlama açısından daha kolaydır. Bu nedenle DEBUG bir çevirme (assemble) komutu “a” içerir. Örnek olarak 2-satırlı programı ele alalım. Mevcut kod parçasında 0100 numaralı göreli konum değerinden başlayarak aynı
programı anımsatıcılar olarak yazalım
-a 100 <enter>
int 21 <enter>
int 20 <enter>
<enter>
Yukarıdaki komutlar sayesinde, aynı programı 16’lık makina kodları yerine anımsatıcılar (mnemonics) olarak ifade edebilirsiniz.
DEBUG Senaryoları (Scripts)
Sadece DEBUG kullanarak çevirici dili programları yazılabilir. Bu durumda bir takım kısıtlamalar söz konusudur. DEBUG’daki bu kısıtlamalarla karşılaşılacağı zaman ayrıntılı bilgi verilecektir. DEBUG’da iki farklı şekilde çevirici dili programlaması yapılabilir. İlk yöntemde DEBUG penceresinde yazılacak kod çalıştırılabilir. İkinci yöntemde ise çevirici dili kodlarının bulunduğu bir dosya yaratılarak DEBUG tarafından çalıştırılması sağlanabilir. İkinci yöntemi gösteren aşağıdaki çalışmayı yapınız:
1. Bilgisayarınızdaki herhangi bir kelime işlemci programı veya yazım (Ör: Notepad)
programını kullanarak TEMP.DBG adlı bir dosya yaratınız. Bu dosyanın içeriğinin nasıl olması gerektiği aşağıda verilmiştir. İstediğiniz herhangi bir kelime işlemci veya yazım programını kullanabilirsiniz, ancak dosyayı kaydederken mutlaka TEXT veya ASCII dosyası olarak kaydetmeniz gerekmektedir!
a 100
mov ah, 02
mov dl, 2a
int 21
int 20
n temp.com r bx r cx w q
Yukarıdaki komutları yazarken arada bırakılan boş satırı sizin de uygulamanız gerekmektedir. Bu satır DEBUG’a çevirici kodlarının bitip, DEBUG komutlarının kullanılmaya başlandığını belirtir.
2. DOS komut istemini çalıştırarak aşağıdaki komutu yazınız:
C:\> DEBUG < TEMP.DBG <enter>
Bu işlemden sonra sabit diskinizde TEMP.COM adlı bir çalıştırılabilir dosya oluşturulacaktır.
SORU 2: TEMP.COM adlı dosyayı çalıştırın. Bu dosya ne iş yapıyor?
SORU 3: Bu belgedeki bilgileri ve DEBUG’ın yardım menüsünü (? komutu) kullanarak TEMP.DBG dosyasındaki satırların hangi işlevleri gerçekleştirdiğini yazınız.
SORU 4: Bu deneyden edindiğiniz bilgileri kısaca özetleyiniz.
eem332_lab02
EEM 332 - Mikroişlemciler Deney Numarası: 2 Deney Adı: Temel Debug ve Çevirici (Assembly) Komutları
Ön Çalışma “Introduction to Debug” belgesini okuyunuz.
1. Parça (segment) yazmaçlarının(CS, SS, DS, ES) ve Komut Göstericisinin
(instruction pointer - IP) nasıl kullanıldığını açıklayınız.
2. Deneysel çalışma kısmında gördüğünüz, BÜYÜK harflerle yazılmış DEBUG
komutlarını açıklayınız.
Deneysel Çalışma Aşağıda verilen işlemleri gerçekleştiriniz. Gereken komut satırlarını ve gözlemlediğiniz sonuçları raporunuzda belirtin.
1. YAZMAÇ (REGISTER) komutunu kullanarak:
a. yazmaçların mevcut içeriklerini görüntüleyiniz, b. IP yazmacının içeriğini 10016 olarak değiştiriniz, c. DS yazmacının içeriğini 150016 olarak değiştiriniz, d. CS yazmacının içeriğini 160016 olarak değiştiriniz, e. taşma bayrağının (overflow flag) durumunu “taşma yok” (no overflow), eşlik bayrağının (parity flag) durumunu “çift eşlik” (even parity) olarak değiştiriniz.
2. Yukarıdaki değişikliklere göre oluşan yeni yazmaç durumlarına göre, aşağıda
verilenler için etkin adresi (effective address) hesaplayınız a. DS:BX b. CS:IP c. SS:BP
3. DOLDUR (FILL) komutunu kullanarak DS:10 adresinden başlayarak 16 tane
depolama yerinin mevcut değerlerini 2316 değeriyle değiştiriniz.
4. Mevcut bilgi parçasının (data segment) ilk 64 sekizlisinin (byte) içeriklerini DÖKÜM
(DUMP) komutuyla gözlemleyiniz.
5. DS:15 adresinden başlayarak 20 depolama yerini, CS:100 adresinden başlayan
depolama yerlerine TAŞI (MOVE) komutunu kullanarak kopyalayınız ve değişiklikleri DÖKÜM (DUMP) komutuyla gözlemleyiniz.
6. ARAMA (SEARCH) komutunu kullanarak DS:00 ve DS:100 aralığında 8616 ve
FF16 değerlerinin bulunduğu yerleri belirleyiniz.
7. KARŞILAŞTIR (COMPARE) komutunu kullanarak aşağıdaki işlemleri
gerçekleştiriniz
a. DS:15 adresinden başlayan 20 yerin içerikleri ile CS:100 adresinden başlayan yerlerin içeriklerini karşılaştırınız,
b. (a) adımını 32 depolama yeri için tekrarlayın.
8. ÇEVİR (ASSEMBLE) komutunu kullanarak aşağıda verilen komutları giriniz ve
GERİ ÇEVİR (UNASSEMBLE) komutuyla bunların oluşturduğu makina dili kodlarını teyit ediniz. Her komut kaç sekizli (byte) yer tutmaktadır?
MOV AX,00
MOV BX,AX
MOV CX,12
MOV DX,0101
OR CX,AX
OR AX,CX
ADD BX,AX
SUB AX,BX
ROL DX,1
ROR DX,1
ROR DX,1
NOT DX
9. İZLEME (TRACE) komutunu kullanarak yukarıdaki programı adım adım çalıştırınız
ve yazmaçların içeriklerindeki değişimleri gözlemleyiniz.
NOT: 16’lık tabandaki sayılar “16” altsimgesiyle belirtilmiştir. Bunun dışında verilen
sayılar 10’luk tabana göre verildiğinden, bu sayıları 16’lık tabana çevirmeniz gerekebilir.
EEM 332 – Mikroişlemciler Deney 2 Çalışma Formu
İsim
1 Aşağıdaki anımsatıcı (mnemonic) komutlarını makina dili kodlarına çeviriniz. a) MOV AX,BX Cevap___________ b) MOV AX,0AAAAH Cevap ___________ c) MOV AX,[BX] Cevap ___________ d) MOV AX,[0004] Cevap ___________ e) MOV AX,[BX+SI] Cevap ___________ f) MOV AX,[SI]+[0004] Cevap ___________ g) MOV AX,[BX][SI]+[0004] Cevap ___________
2 Yukarıdaki kodların herbirinin kapladığı sekizli (byte) miktarını belirtiniz. a) Cevap ___________ b) Cevap ___________ c) Cevap ___________ d) Cevap ___________ e) Cevap ___________ f) Cevap ___________ g) Cevap ___________
3 Aşağıdaki işlemleri yapınız ve sonuçları gözlemleyiniz. Her işlemi gerçekleştirmek için yazdığınız komutları belirtiniz. Bütün işlemler için adres koşulu: DS=200, CS=100.
a. DS:1234 adresli konuma ED, DS:1235 adresli konuma BE, DS:1236 adresli konuma CD ve DS:1237 adresli komua AB değerlerini yükleyiniz. b. SI yazmacına 1236 değerini yükleyiniz. c. Yazmaçların bu değişiklikler sonucundaki halini görüntüleyiniz.
d. CS:0000 adresinden başlayarak aşağıdaki komutları çeviriniz (assemble)
MOV AX, 1234
MOV BX,[1234]
MOV CX,[SI]
e. Yazdığınız komutları izleyebilmek (trace) için gereken CS ve IP yazmaç değerlerini ayarlayınız. f. Programı izleyiniz (trace) ve sonuçları gözlemleyiniz. AX, BX ve CX yazmaçlarında olan değişiklikleri ve nedenlerini açıklayınız.
calisma-623
1.)
a)
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13FA ES=13FA SS=13FA CS=13FA IP=0100 NV UP EI PL NZ NA PO NC
13FA:0100 0000 ADD [BX+SI],AL DS:0000=CD
b)
-r ip
IP 0100
c)
-r ds
DS 13FA
:1800
d)
-r cs
CS 13FA
:2400
e)
-r f
NV UP EI PL NZ NA PO NC -pl
-r f
NV UP EI PL NZ NA PO NC -ov
-r f
OV UP EI PL NZ NA PO NC -
f)
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0100 OV UP EI PL NZ NA PO NC
2400:0100 0000 ADD [BX+SI],AL DS:0000=00
2.)
-f 20 3d 42
3.)
-d 20 3d
1800:0020 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
1800:0030 42 42 42 42 42 42 42 42-42 42 42 42 42 42 BBBBBBBBBBBBBB
4.)
-m ds:20 33 cs:100
-d cs:100 133
2400:0100 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
2400:0110 42 42 42 42 00 00 00 00-00 00 00 00 00 00 00 00 BBBB............
2400:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
2400:0130 00 00 00 00 ....
-d ds:20 33
1800:0020 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
1800:0030 42 42 42 42 BBBB
5.)
a)
-c ds:20 33 cs:100
b)
-c ds:20 47 cs:100
1800:0034 42 00 2400:0114
1800:0035 42 00 2400:0115
1800:0036 42 00 2400:0116
1800:0037 42 00 2400:0117
1800:0038 42 00 2400:0118
1800:0039 42 00 2400:0119
1800:003A 42 00 2400:011A
1800:003B 42 00 2400:011B
1800:003C 42 00 2400:011C
1800:003D 42 00 2400:011D
6.)
-s ds:00 30 42
1800:0020
1800:0021
1800:0022
1800:0023
1800:0024
1800:0025
1800:0026
1800:0027
1800:0028
1800:0029
1800:002A
1800:002B
1800:002C
1800:002D
1800:002E
1800:002F
1800:0030
7.)
-a 100
2400:0100 mov ax,55
2400:0103 mov bx,ax
2400:0105 mov cx,20
2400:0108 mov dx,0110
2400:010B or cx,ax
2400:010D or ax,cx
2400:010F add bx,ax
2400:0111 sub ax,bx
2400:0113 rol dx,1
2400:0115 ror dx,1
2400:0117 ror dx,1
2400:0119 not dx
2400:011B
-u 100
2400:0100 B85500 MOV AX,0055
2400:0103 89C3 MOV BX,AX
2400:0105 B92000 MOV CX,0020
2400:0108 BA1001 MOV DX,0110
2400:010B 09C1 OR CX,AX
2400:010D 09C8 OR AX,CX
2400:010F 01C3 ADD BX,AX
2400:0111 29D8 SUB AX,BX
2400:0113 D1C2 ROL DX,1
2400:0115 D1CA ROR DX,1
2400:0117 D1CA ROR DX,1
2400:0119 F7D2 NOT DX
2400:011B 0000 ADD [BX+SI],AL
2400:011D 0000 ADD [BX+SI],AL
2400:011F 0000 ADD [BX+SI],AL
8.)
-r ip
IP 0100
:100
-t 3
AX=0055 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0103 OV UP EI PL NZ NA PO NC
2400:0103 89C3 MOV BX,AX
AX=0055 BX=0055 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0105 OV UP EI PL NZ NA PO NC
2400:0105 B92000 MOV CX,0020
AX=0055 BX=0055 CX=0020 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0108 OV UP EI PL NZ NA PO NC
2400:0108 BA1001 MOV DX,0110
-t 3
AX=0055 BX=0055 CX=0020 DX=0110 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=010B OV UP EI PL NZ NA PO NC
2400:010B 09C1 OR CX,AX
AX=0055 BX=0055 CX=0075 DX=0110 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=010D NV UP EI PL NZ NA PO NC
2400:010D 09C8 OR AX,CX
AX=0075 BX=0055 CX=0075 DX=0110 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=010F NV UP EI PL NZ NA PO NC
2400:010F 01C3 ADD BX,AX
-t 3
AX=0075 BX=00CA CX=0075 DX=0110 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0111 NV UP EI PL NZ NA PE NC
2400:0111 29D8 SUB AX,BX
AX=FFAB BX=00CA CX=0075 DX=0110 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0113 NV UP EI NG NZ AC PO CY
2400:0113 D1C2 ROL DX,1
AX=FFAB BX=00CA CX=0075 DX=0220 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0115 NV UP EI NG NZ AC PO NC
2400:0115 D1CA ROR DX,1
-t 3
AX=FFAB BX=00CA CX=0075 DX=0110 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0117 NV UP EI NG NZ AC PO NC
2400:0117 D1CA ROR DX,1
AX=FFAB BX=00CA CX=0075 DX=0088 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=0119 NV UP EI NG NZ AC PO NC
2400:0119 F7D2 NOT DX
AX=FFAB BX=00CA CX=0075 DX=FF77 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1800 ES=13FA SS=13FA CS=2400 IP=011B NV UP EI NG NZ AC PO NC
2400:011B 0000 ADD [BX+SI],AL DS:00CA=00
D2 önçalışma
1)
a)Code Segment
Code segment registeri olan CS icra gören programı içeren segmentin başlangıç adresini
gösterir. Diğer bir deyişle, CS ile adreslenen segment içinde makine dili komutları yer almaktadır. Stack segment registeri olan SS, geçerli stack segmentin başlangıç adresini içerir. Stack segmen! t,çeşitli verilerin geçici olarak saklandığı bir bellek bloğudur.
b) Data Segment
Data segment registeri olan DS ,geçerli data segmentinin başlangıç adresidir. Bu segment
genel olarak program değişkenleri tarafından kullanılır. Diğer bir deyişle, bilgi işlem operasyonlarına tabi tutulan bilgiler, data segment içindeki lokasyonlarda yer alırlar.
c) Extra Segment
Ekstra segment registeri olan ES geçerli ekstra segmentin başlangıç adresini içerir.
Ekstra segment, genel olarak string operasyonları için kullanılır. Yeterli bellek
büyüklüğüne sahip olan sistemlerde bu 4 segment, belleğin farklı parçalarıdır. Geniş belleğe sahip olmayan sistemlerde ise, bu segmentler üstüste gelebilir.
d) Stack Segment
Stack segment registeri olan SS, geçerli stack segmentin başlangıç adresini içerir. Stack
segmen! t,çeşitli verilerin geçici olarak saklandığı bir bellek bloğudur.
e) IP Çeşitli bellek bölgelerindeki verilere ulaşabilmek için adres göstericisi olarak kullanılır. Bellek içindeki bir lokasyonun adresini gösterebilmek için, iki ayrı adres değeri kullanılır. İlk değer, işaret edilen lokasyonu içinde barındıran segmentin adresidir . bu noktada segment registerlerinden yararlanılır. Lokasyonun segment içindeki yerini gösteren ikinci adres değeri ise offset adresi olarak bilinir. Offset adreslerinin gösterilmesi için de, pointer ve indeks registerlerinden yararlanılır.
2)
- R (Register) : Bu komut o andaki register değerlerini ve bayrakların durumunu belirlemekte kullanılır.
Ör
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2AF2 ES=2AF2 SS=2AF2 CS=2AF2 IP=0100 NV UP EI PL NZ NA PO NC
2AF2:0100 8B24 MOV SP,[SI] DS:0000=20CD
-
Bu komut yardımı ile register'lara istenilen değerler (hexadecimal olmak şartıyla) verilebilir.
Ör
-R AX
AX 0000
- F (Fill) : Bellek başlangıç ve bitiş adresleri belirlenen bir alanı belirlenen bir sayı ile doldurmak amacıyla kullanılır.
Ör
-
-F DS:100,120,AB
F komutundan yararlanarak DS'in 100H-120H arasındaki kısım ABH değeri ile doldurulacaktır. Bu işlemden sonra D komutu ile DS:100H adresinden itibaren incelersek işlemin olması gibi yapıldığını kontrol etmiş oluruz.
- D (Dump / Display): Bu komut ile belleğin istediğimiz segment'inin istediğimiz offset'inden itibaren bilgileri görebiliriz. İstersek görmek istediğimiz alanı sınırlama imkanına da sahibiz.
Ör
-D DS:0
2AF2:0000 CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 5A 25 8A 03 . ........O.Z%..
2AF2:0010 5A 25 17 03 5A 25 14 24-01 01 01 00 02 FF FF FF Z%..Z%.$........
2AF2:0020 FF FF FF FF FF FF FF FF-FF FF FF FF 3B 25 4E 01 ............;%N.
2AF2:0030 16 2A 14 00 18 00 F2 2A-FF FF FF FF 00 00 CE 0B .*.....*........
2AF2:0040 06 1E 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
2AF2:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20 .!...........
2AF2:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20 .....
2AF2:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........
-
Burada Data segment'in 0000H offset'inden itibaren olan kısmı gösterilmiştir. Eğer herhangi bir aralık verilmemiş ise 128 byte gösterir. Hexadecimal olarak belleğin dökümünü verdikten sonra yanında gösterilebilir ASCII karakter karşılıklarına da yer verilir.
Ör
-D DS:100,115
2AF2:0100 8B 24 17 5A 18 BA 4A 29-A2 4F F6 C9 07 AE 07 09 .$.Z..J).O......
2AF2:0110 20 8C 07 BA 4F 80 ...O.
-
- M (Move) : Bir yerdeki bir blok bilgiyi başka bir yere taşımak için kullanılır
Ör
- M DS:100,110,CS:500
Bu komut ile DS:100H ile DS:110H arasında kalan bilgi CS:500H adresinden itibaren yerleştirilecektir.
- C (Compare) : Belirlenen aralıktaki bilgileri karşılaştırmak amacıyla kullanılan bir komuttur.
-C 100,110,10
2AF2:0100 AB 5A 2AF2:0010
2AF2:0101 AB 25 2AF2:0011
2AF2:0102 AB 17 2AF2:0012
2AF2:0103 AB 03 2AF2:0013
2AF2:0104 AB 5A 2AF2:0014
2AF2:0105 AB 25 2AF2:0015
2AF2:0106 AB 14 2AF2:0016
2AF2:0107 AB 24 2AF2:0017
2AF2:0108 AB 01 2AF2:0018
2AF2:0109 AB 01 2AF2:0019
2AF2:010A AB 01 2AF2:001A
2AF2:010B AB 00 2AF2:001B
2AF2:010C AB 02 2AF2:001C
2AF2:010D AB FF 2AF2:001D
2AF2:010E AB FF 2AF2:001E
2AF2:010F AB FF 2AF2:001F
2AF2:0110 AB FF 2AF2:0020
Bu komut 100H-110H adresindeki bilgiler ile 10H adresinden başlayan bilgileri karşılaştırır ve farklı olanları listeler.
-C 100,110,100
-
100H-110H adresindekileri yine 100H adresindekiler ile karşılaştırmaktadır. Herhangi bir farklılık bulunmadığı için ekranda hiçbir bilgi görünmez.
S (Search) : Hafıza bölgesinde istenilen adres aralığında belli bir değeri arar. Eğer Sonuç bulursa adres olarak ekranda gözlenir.
Ör
-S CS:100,110,65
0100 ile 0110 offsetleri arasında 65 bilgisin arar.
calisma-704
CS:BX 15000
CS:IP 16000
SS:BP 15470
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0100 OV DN DI NG NZ NA PO CY
1600:0100 0000 ADD [BX+SI],AL DS:0000=00
-f DS:10 1f 23
-d DS:10
1500:0010 23 23 23 23 23 23 23 23-23 23 23 23 23 23 23 23 ################
1500:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-m 15 29 cs:100
-d cs:100
1600:0100 23 23 23 23 23 23 23 23-23 23 23 00 00 00 00 00 ###########.....
1600:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-1500:0010 23 23 23 23 23 23 23 23-23 23 23 23 23 23 23 23 ################
1500:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-m 15 29 cs:100
-d cs:100
1600:0100 23 23 23 23 23 23 23 23-23 23 23 00 00 00 00 00 ###########.....
1600:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-s ds:0000 0100 86 -s ds:0000 0100 ff
1500:00F9
-c ds:15 29 cs:100 -c ds:15 34 cs:0100 -c ds:0015 0034 cs:0100 --a 100
1600:0100 MOV AX,00
1600:0103 MOV BX,AX
1600:0105 MOV CX,12
1600:0108 MOV DX,0101
1600:010B OR CX,AX
1600:010D OR AX,CX
1600:010F ADD BX,AX
1600:0111 SUB AX,BX
1600:0113 ROL DX,1
1600:0115 ROR DX,1
1600:0117 ROR DX,1
1600:0119 NOT DX
1600:011B
-u
1600:0100 B80000 MOV AX,0000
1600:0103 89C3 MOV BX,AX
1600:0105 B91200 MOV CX,0012
1600:0108 BA0101 MOV DX,0101
1600:010B 09C1 OR CX,AX
1600:010D 09C8 OR AX,CX
1600:010F 01C3 ADD BX,AX
1600:0111 29D8 SUB AX,BX
1600:0113 D1C2 ROL DX,1
1600:0115 D1CA ROR DX,1
1600:0117 D1CA ROR DX,1
1600:0119 F7D2 NOT DX
1600:011B 0000 ADD [BX+SI],AL
1600:011D 0000 ADD [BX+SI],AL
1600:011F 0000 ADD [BX+SI],AL
-
1600:0117 ROR DX,1
1600:0119 NOT DX
1600:011B
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0103 OV DN DI NG NZ NA PO CY
1600:0103 89C3 MOV BX,AX
-
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0105 OV DN DI NG NZ NA PO CY
1600:0105 B91200 MOV CX,0012
-t
AX=0000 BX=0000 CX=0012 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0108 OV DN DI NG NZ NA PO CY
1600:0108 BA0101 MOV DX,0101
-t
AX=0000 BX=0000 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=010B OV DN DI NG NZ NA PO CY
1600:010B 09C1 OR CX,AX
-t
AX=0000 BX=0000 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=010D NV DN DI PL NZ NA PE NC
1600:010D 09C8 OR AX,CX
--t
AX=0012 BX=0000 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=010F NV DN DI PL NZ NA PE NC
1600:010F 01C3 ADD BX,AX
-t
AX=0012 BX=0012 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0111 NV DN DI PL NZ NA PE NC
1600:0111 29D8 SUB AX,BX
-t
AX=0000 BX=0012 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0113 NV DN DI PL ZR NA PE NC
1600:0113 D1C2 ROL DX,1
-t
AX=0000 BX=0012 CX=0012 DX=0202 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0115 NV DN DI PL ZR NA PE NC
1600:0115 D1CA ROR DX,1
--t
AX=0000 BX=0012 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0117 NV DN DI PL ZR NA PE NC
1600:0117 D1CA ROR DX,1
-t
AX=0000 BX=0012 CX=0012 DX=8080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1547 SS=1547 CS=1600 IP=0119 OV DN DI PL ZR NA PE CY
1600:0119 F7D2 NOT DX
lab1_rapor(1)
SORU 1
- 2 satırlı programı çalıştırdığımız zaman ekranda
AX=0200 BX=0000 CX=0000 DX=0043 SP=FFEE BP=0000 SI=0000 DI=0000
DS=152D ES=152D SS=152D CS=152D IP=0100 NV UP EI PL NZ NA PO NC
152D:0100 CD21 INT 21
- g 104 komutunu girdim
“C:\>
C
Program normal olarak sonlandırıldı
C:\>“
Burada, int 21 yazı yazdırma, int 20 ise programı onlandırma komutlarıdır. Int 21 komutu sayesinde, DX registerina yüklediğimiz 43 degerinin C harfinin ascii kodu karsılıgı oldugunu görüyoruz.
SORU 2
TEMP.COM dosyasını çalıştırdığım zaman ekranda
C:\>temp.com
*
C:\>
Çıkıyor.Buradan da anlaşıldığı üzere bu dosya ekrana * yazdırıyor.
SORU 3
a 100
152D:0100 mov ah,02 (AX->AH 02)
152D:0102 mov dl,2a (DX ->DL2a)
152D:0104 int 21
152D:0106 int 20
n temp.com (Parametre listesi) r bx (bx ?)
BX 0000
:0 r cx (cx ?)
CX 0000
:08 w (write komutu) 00008 bayt yazılıyor q (programdan çıkış)
SORU 4
8086 registerları Debug komutları hakkında bilgi edindik ve Debug programını çalıştırmayı ve üzerinde işlem yapmayı öğrendik. Debug komutlarıyla ekranda yerleri görünen yazmaçların içeriğini değiştirmeyi bunların yardımlarıyla işlem yapmayı öğrendik ve wordpad de yazdığımız bir Debug programının çıktısını dos ortamında nasıl elde edeceğimizi öğrendik.
lab1_rapor
SORU 1
- 2 satırlı programı çalıştırdığımız zaman ekrandaki çıktılar
AX=0200 BX=0000 CX=0000 DX=0043 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C81 ES=0C81 SS=0C81 CS=0C81 IP=0100 NV UP EI PL NZ NA PO NC
0C81:0100 CD21 INT 21
- g 104 komutu kullandığımız zaman ekranda
“C
Program normal olarak sonlandırıldı “ Burada, int 21 yazı yazdırma, int 20 ise programı onlandırma komutlarıdır. Int 21 komutu sayesinde, DX registerina yüklediğimiz 43 degerinin C harfinin ascii kodu karsılıgı oldugunu görüyoruz.
SORU 2
TEMP.COM dosyası çıktı olarak ekranda * işaretini gösterdi
SORU 3
a 100
mov ah,02 (AX registerinin high kısmına 02 yazdır)
mov dl,2a (DX registerinin low kısmına 2a yazdır)
int 21
int 20
n temp.com (Parametre listesi) r bx (bx yazmacının içeriğini değiştir) r cx (cx yazmacının içeriğini değiştir) w (write komutu) q (programdan çıkış)
SORU 4
8086 registerları hakkında bilgi edindik ve Debug komutlarını öğrendik. Debug üzerinde aritmetik işlemler yapmayı ve yazmaçların işlevlerini görmeyi , değiştirmeyi,üzerinde istedgmz işlemleri gerçekleştirmeyi öğrendik.
deney2önçalışma
R Register Komutu
Komut CPU registerlerinin değerlerini görmek yada değiştirmek için kullanılır. R komutunun kullanım biçimi aşağıda verilmiştir. - R Register Adı Komut registerlerin kullanımı ile ilgili olmak üzere 3 ayrı görevi yerine getirir. R : Komut tek başına kullanılırsa CPU registerlerinin o anki tüm değerleri gösterilir. Registerlerin yanısıra komut Flag registerinin değerlerini de temsili olarak gösterecektir. Komutun kullanımı sonunda CS:IP ile işaret edilen komut da ekranda gösterilecektir. R komutunun kullanımı sonunda aşağıdakine benzer bir görüntü alınacaktır.
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2054 ES=2054 SS=2054 CS=2054 IP =0100 NV UP EI PL NZ NA PO NC
2054:0100 IE PUSH DS
R komutundan sonra parametre olarak F harfi kullanılırsa program flagların değiştirilmesi için mevcut flagları ekrana getirir ve istediğiniz flagları değiştirmeniz için bekler. Bu durumda istediğiniz herhangi bir flagi set yada reset edebilirsiniz.
-RF
NV UP EI PL NZ NA PO NC - ZRUP
- Yukarıdaki örnekte Zero flagı SET, direction flagı RESET edilmektedir. R komutu ile sadece flagların değil tüm registerlerin degerleri değiştirilebilir. Bunun için R komutundan sonra değiştirilmesi istenen registerin isminin yazılması gerekir. Bu işlem gerçekleştiğinde registerin mevcut degeri ekrana yazılır ve ( : ) iş areti konularak registerin yeni degeri sorulur. Bu işaretin yanına deger 4 digit hexadecimal olarak verilmelidir. Eger bir deger verilmeyip enter tuşuna basılırsa registerin içeriği değiştirilmeyecektir.
T Trace Komutu
Trace komutu hafızada bulunan bir programın satırlarının tek tek veya belli bir kısmının çalıştırılması için kullanılır. Komutun kullanımı aşağıda verilmiştir. - T=Adres Değer Komutun parametreleri seçimliktir. Ilk parametre Adres parametresidir ki bu parametre kullanılacaksa komuttan sonra = işaretinin kullanımı zorunludur. Adres parametresi icra ettirilecek ilk komutun adresi olarak alınır. Değer parametresi kaç adet komutun peşpeşe icra ettirileceğini gösterir. Eğer kullanılmamış ise bu değer 1 olarak alınır. Eğer herhangi bir parametre kullanılmaz ise komut CS:IP ile adreslenen yerden başlayarak 1 komut icra ettirilir ve komutun icr asından sonra registerlerin değeri ve işlenecek olan komut ekranda görüntülenir.
U Unassembly Komutu
U Komutu bellekteki programın makine dili ve assembly karşılıklarını ekranda listelemek için kullanılır. Komutun kullanım şekli aşağıda verilmiştir. - U Adres1 Adres2 Parametre olarak verilen Adres1 listelenmek istenen programın başlangıç adresini gösterir. Bu
adres segment ve offset olarak verilebilir. Bu adres verilirken herhangi bir komutu
bölmemesine özen göstermek gerekir. Aksi halde ekrana getirilecek list e anlamsız bir liste olacaktır.Ikinci verilen parametre listelemenin sonunu belirler. Burada verilecek adres offset niteliğinde olmalıdır. Segment Adres1’de belirtilen segment adresi olarak alınacaktır.
A Assembly Komutu
A Komutu assembly program yazmak için kullanılır. Bu komutun kullanılış şekli; -- A [segment:offset] şeklindedir. Komutun parametresi olan adres, yazılacak programın bellegin neresinden itibaren yerleşeceğini gösterir. Parametre seçimliktir. Eğer verilmeyecek olur ise mevcut CS ve IP üzerindeki değerler komutun parametresi olarak varsayılır. Komuttan sonra hiç bir parametre vermeyeceğiniz gibi sadece offset adresi de verebilirsiniz. Eğer komuttan sonra sadece tek bir sayı verilmişse verilen değer offset olarak algılanır ve IP registerine bu deger verilerek programın default segment ve belirlenen offset üzerinde n yazılması sağlanır. Komutun çalıştırılması ile, default veya belirlenen segment ve offset adresi yeni bir satır başına yazılarak bu adresin yanında komut girişi için beklenir. Her komut girilip enter tuşuna basıldığında debug ilk önce girilen komutu yorumlar ve girile n komut doğru ise segment ve offset adresleri yazılan komut uzunluğu kadar artırılarak yeni komut girişi için beklemeye başlar. Eğer girilen komut hatalı ise hata yeri gösterilerek komutun tekrar girilmesi için aynı segmet ve offset adreslerinde beklenir. Eğer herhangi bir satırda komut girilmeyerek enter tuşuna basılırsa debug komut satırına geri döner.
- D (Dump / Display): Bu komut ile belleğin istediğimiz segment'inin istediğimiz offset'inden itibaren bilgileri görebiliriz. İstersek görmek istediğimiz alanı sınırlama imkanına da sahibiz. D komutunun yanına gösterilmesi istenen aralığın adresi verilecek olursa sadece belirlenen adres aralığındaki değerler ekranda görüntülenecektir.
F (Fill) : Bellek başlangıç ve bitiş adresleri belirlenen bir alanı belirlenen bir sayı ile doldurmak amacıyla kullanılır. -
-F DS:100,120,AB
F komutundan yararlanarak DS'in 100H-120H arasındaki kısım ABH değeri ile doldurulacaktır. Bu işlemden sonra D komutu ile DS:100H adresinden itibaren incelersek işlemin olması gibi yapıldığını kontrol etmiş oluruz.
- C (Compare) : Belirlenen aralıktaki bilgileri karşılaştırmak amacıyla kullanılan bir komuttur.
Farklı segment'ler üzerindeki bilgiler de karşılaştırılabilmektedir.
- M (Move) : Bir yerdeki bir blok bilgiyi başka bir yere taşımak için kullanılır
- M DS:100,110,CS:500
Bu komut ile DS:100H ile DS:110H arasında kalan bilgi CS:500H adresinden itibaren yerleştirilecektir.
Debug: s (search)
Bir adres aralığında bir veya daha çok bayt değeri desenini arar.Sözdizimi
s Aralık Listes, Parametreler Aralık Gerekli. Aramak istediğiniz aralığın başlangıç ve bitiş adreslerini belirtir .Liste Gerekli. Arama yapmak istediğiniz bir veya birden çok bayt değerinin desenini veya bir dizeyi belirtir.
Code segment:
Belleğin ,operatörleri (komutları) sakladığı bölümüne kod segment adı verilir ve belleğin bu bölgesinin başlangıç adresi CS yazmacında tutulur.Program komutlarının başlangıcını tanıtır.sonraki byte’ını işletilecek asıl bellek adresi belirtilen paragrafın kod segment yazmacına yerleştirilmesiyle ve bu değerin komut pointerina (Ip) eklenmesiyle bulunur.
Data segment:
Aynı şekilde, operandların saklandığı bölüme ise veri segment adı verilir.Bu bellek bölgesinin başlangıç adresi DS yazmacında tutulur.Programın veri bölümünün başlangıcını tanıtır.Derleyici bir veri bildirimini karşılarken veri segmenti içerisinde o verinin boyutuna bağlı bir alan ayırır.Verinin belirli bir tipi varsa başlangıç değeri belleğe yerleştirilir.Aksi durumda değeri programın başlangıcından önceki içeriğinden oluşur.
-DS:BX- -DS:SI-
Extra segment:
Değişik amaçlarla kullanılan (örneğin string işlemleri) bellek bölgesine ise extra segment adı verilir ve adresi ES yazmacında tutulur
-ES:DI-
Stack segment:
Yığıt segmentleri verilen geçici olarak bellekte tutulduğu bölgeyi ifade eder SS yazmacı bu bölgenin başlangıç adresini belirtir
-SS:SP-
-SS:BP-
IP: (İnstruction pointer)
İşletilecek sonraki komutların adresini içerir. Bunun nedenide yazmacın değişmesinin programı olumsuz yönde etkileyecek olmasıdır.Komut işaretleyicisine doğrudan erişilemez yada değiştirilemez.
calisma-840
Başkent Üniversitesi Elektrik - Elektonik Mühendisliği Bölümü
EEM 332 – Mikroişlemciler Laboratuvarı
Ön Çalışma/ Rapor
Deney No: # 2 Deney Adı: Temel Debug ve Çevirici (Assembly) Komutları Deney Tarihi: 10/03/2006
2)
DS: 15000
CS: 16100
SS: 13A50
8)
Byte Sayısı
MOV AX,00 B80000 3
MOV AX,BX 89C3 2
MOV CX,12 B91200 3
MOV DX,0101 BA0101 3
OR CX,AX 09C1 2
OR AX,CX 09C8 2
ADD BX,AX 01C3 2
SUB AX,BX 29D8 2
ROL DX,1 D1C2 2
ROR DX,1 D1CA 2
ROR DX,1 D1CA 2
NOT DX F7D2 2
9)
MOV AX,00:AX=0000 BX=0000 CX=0000 DX=0000
MOV AX,BX: AX=0000 BX=0000 CX=0000 DX=0000
MOV CX ,12: AX=0000 BX=0000 CX=0012 DX=0000
MOV DX,0101: AX=0000 BX=0000 CX=0012 DX=0101
OR CX,AX:AX=0000 BX=0000 CX=0012 DX=0101
OR AX,CX:AX=0012 BX=0000 CX=0012 DX=0101
ADD BX,AX: AX=0012 BX=0012 CX=0012 DX=0101
SUB AX,BX:AX=0000 BX=0012 CX=0012 DX=0101
ROL DX,1: AX=0000 BX=0012 CX=0012 DX=0202
ROR DX,1: AX=0000 BX=0012 CX=0012 DX=0101
ROR DX,1: AX=0000 BX=0012 CX=0012 DX=8080
NOT DX: AX=0000 BX=0012 CX=0012 DX=7F7F
rapor_2
2)
DS:BX 15000
CS:IP 16100
SS:BP 15050
8)
MOV AX,00 B80000 3
MOV AX,BX 89C3 2
MOV CX,12 B91200 3
MOV DX,0101 BA0101 3
OR CX,AX 09C1 2
OR AX,CX 09C8 2
ADD BX,AX 01C3 2
SUB AX,BX 29D8 2
ROL DX,1 D1C2 2
ROR DX,1 D1CA 2
ROR DX,1 D1CA 2
NOT DX F7D2 2
9)
MOV AX,00:AX=0000 BX=0000 CX=0000 DX=0000
MOV AX,BX: AX=0000 BX=0000 CX=0000 DX=0000
MOV CX ,12: AX=0000 BX=0000 CX=0012 DX=0000
MOV DX,0101: AX=0000 BX=0000 CX=0012 DX=0101
OR CX,AX:AX=0000 BX=0000 CX=0012 DX=0101
OR AX,CX:AX=0012 BX=0000 CX=0012 DX=0101
ADD BX,AX: AX=0012 BX=0012 CX=0012 DX=0101
SUB AX,BX:AX=0000 BX=0012 CX=0012 DX=0101
ROL DX,1: AX=0000 BX=0012 CX=0012 DX=0202
ROR DX,1: AX=0000 BX=0012 CX=0012 DX=0101
ROR DX,1: AX=0000 BX=0012 CX=0012 DX=8080
NOT DX: AX=0000 BX=0012 CX=0012 DX=7F7F
calisma-1259
EEM332-MİKROİŞLEMCİLER
Deney Numarası: 2 Deney Adı: Temel DEBUG ve Çevirici(Assembly) Komutları
ÖNÇALIŞMA
1-) Parça (Segment) yazmaçlarının ve Komut Göstericisinin (IP) nasıl kullanıldığını açıklayınız. 8086 işlemcisinde 20 adres bacağı olmasına rağmen en büyük yazmacı 16 bittir.Bir tek yazmaç üzerindeki değer ile ancak 64 KB’lık bir alanı adresleyebilmektedir.Bu durumda 20 adres bacağı ile adresleyebilmesi mümkün olan 1 MB’lık bellekten yararlanabilmek için parça bellek erişim yapısı ortaya atılmıştır. 8086 ailesi de ana bellek her bir çift adresten başlamak üzere 64 KB’lık alanlara ayrılmıştır.Temel olarak 4 tane kesim çeşidi vardır.Herhangi bir kesime erişmek için ancak o alanın kesim yazmacını kullanmakla mümkündür.Bu temel kesim yazmaçları ise CS,SS,DS ve ES olarak adlandırılır. Kesim içerisindeki verilere ise kesim içi işaretçilerle ulaşılmaktadır.(IP)Kesim içi işaretçiler göreli konum olarak adlandırılan,kesimin başlangıcından olan uzaklığı belirleyen değerdir.
2-)Deneysel çalışma kısmında gördüğünüz,BÜYÜK harflerle yazılmış DEBUG konutlarını açıklayınız.
a-) YAZMAÇ(REGİSTER) Komutu: Bu komut o andaki register değerlerini ve bayrakların durumunu belirlemekte kullanılır. Bu komut yardımı ile register'lara istenilen değerler (hexadecimal olmak şartıyla) verilebilir.
b-) DOLDUR(FILL) Komutu : Bellek başlangıç ve bitiş adresleri belirlenen bir alanı belirlenen bir sayı ile doldurmak amacıyla kullanılır.
c-) DÖKÜM(DUMP) Komutu : Bu komut ile belleğin istediğimiz segment'inin istediğimiz offset'inden itibaren bilgileri görebiliriz. İstersek görmek istediğimiz alanı sınırlama imkanına da sahibiz. D komutunun yanına gösterilmesi istenen aralığın adresi verilecek olursa sadece belirlenen adres aralığındaki değerler ekranda görüntülenecektir.
d-) TAŞI(MOVE) Komutu : Bir yerdeki bir blok bilgiyi başka bir yere taşımak için kullanılır
e-) ARAMA(SEARCH) Komutu
f-) KARŞILAŞTIR(COMPARE) Komutu : Belirlenen aralıktaki bilgileri karşılaştırmak amacıyla kullanılan bir komuttur. farklı segment'ler üzerindeki bilgiler de karşılaştırılabilmektedir.
g-) ÇEVİR(ASSEMBLE) Komutu : Bu komut Debug yardımıyla basit programlar yazmayı sağlar. Debug içinde yazılan programlar COM uzantılı programlarda olduğu gibi 100H offset adresinden başlarlar. Bu neden ile program çalıştırılacağı zaman mutlaka IP register'ının değerinin R komutu ile 100H e getirilmesi gerekmektedir.
h-) GERİÇEVİR(UNASSEMBLE) Komutu : CS’de yazılı olan makine kodunu kullanıcının anlayacağı formdaki mnemonic'lere çevirmek için kullanılan bir komuttur. Her çağırılışında 32 byte uzunluğunda makine kodunun mnemonic'lerini kullanıcıya gösterir.
ı-) İZLEME(TRACE) Komutu : Yazılmış olan assembly komutları teker teker çalıştırılarak işlem sonunda register ve bayrakların aldıkları değerleri ekranda gösterir. T komutu çalışmaya IP nin gösterdiği noktadan itibaren başlar ve her komut işlendikten sonra durur. Eğer kullanıcı ister ise T komutunun yanına bir sayı da verebilir. Bu durumda verilen sayı kadar komut satırı arka arkaya çalıştırılır, her seferinde register ve flag değerleri ekrana yazılır.
ucs-eem332 lab ön çalışma 2
1) Segment yazmaçlarının hepsi 16 bittir ve hafızanın segment olarak adlandırılan kısmını
adreslemede kullanılırlar.
Code Segment Yazmacı (CS) : MS-DOS işletim sisteminde, programları oluşturan kodlar
Code Segment’e yüklenir. Yani komutlar Code Segment yazmaçlarında saklanır. Bu kodlar
Instruction Pointer (IP) yardımıyla bulunur. IP işlenecek komutun adres bilgisini saklar. Böylece IP, işlenecek CS’i işaret ettiğinde oradaki komutlar çalıştırılır.
Stack Segment Yazmacı (SS) : Programlar, Stack Segment (SS) denilen bir hafıza alanını
geçici depolama alanı olarak kullanırlar. Örneğin bir dallanma veya interrupt olduğunda, o
andaki bilgiler SS’e kaydolur. Bu yığıtlar “Last In First Out” tekniğiyle çalışır. Stack
Pointer (SP) ise SS’ in adresini tutar. Program gerekli interrupt’ı gerçekleştirdikten sonra, SP yardımıyla SS’deki dosyalar yerinden çıkarılır. Program kaldığı yerden devam eder.
Data Segment Yazmacı (DS) : .exe türündeki bir programda kullanılacak olan veriler Data
Segment’ te tutulur. Programın veri bölümünün başlangıç adresi DS içinde tutulur.
Extra Segment Yazmacı (ES) : Çeşitli string işlemlerinde kullanılan bellek bölgesine Extra
Segment adı verilir. Bu bellek adresi DI ve ES içinde tutulur.
Instruction Pointer (IP) : O anda işletilen komuttan sonraki komutun offset adresini içinde tutar. Her kod işleminden sonra mikroişlemci tarafından 1 arttırılır ve işlem bu şekilde devam eder. Bu register’ın değerini, stack üzerindeki bilgiler ile dolaylı olarak değiştirmek mümkündür.
2)
YAZMAÇ (REGISTER) : Bu komut CPU’ nun kullandığı yazmaçların görülmesi ve değiştirilmesi için kullanılmaktadır. Eğer tüm yazmaçlar görüntülenmek istenirse, aşağıdaki gibi bir sonuç elde edilir;
-R
AX=0000 BX=0000 CX=0000 DP=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1787 ES=1787 SS=1787 CS=1787 IP=0100 NV UP EI PL NZ NA PO NC
1787:01000 0000 ADD [BX+SI], AL
Eğer üzerinde değişme yapılacak bir yazmaç içinse;
-R AX
AX 0000
: 0200 şeklinde olur.
DOLDUR (FILL) : Belirlediğimiz bir bellek bölgesini, gireceğimiz bir data ile doldurmak için F komutu kullanılır. Kullanımı şu şekildedir;
-F DS:100,110,AB Bu işlem yapılınca DS’nin 100 – 110 adresi arası AB ile doldurulur.
DÖKÜM (DUMP) : Bellek bölgesinin istenilen kısmını göstermek için kullanılır.
-D komutu girildiğinde en son görüntülenen bellek bölgesinden sonraki 128 byte görüntülenir.
Bu alanı küçültmek için;
-D (offset) komutu girilir. Böylece başlangıç adresi offset olarak alınır ve sonraki 128 byte
görüntülenir.
-D (başlangıç) (bitiş) komutu girildiğinde ise yalnızca belirlenen yerler arası görüntülenir.
TAŞI (MOVE) : Bu komut yardımıyla, belirli bir bölgeyi belleğin başka bir yerine taşıyabiliriz. Bunun komut aşağıdaki gibi kullanılabilir;
- M DS:100,110,CS:500 Bu komut ile DS’nin 100-110 arası bölgesi CS:500 e taşınır.
ARAMA (SEARCH) : Bir bellek bölgesinde istenilen veriyi arar. Bunun için aşağıdaki kod parçası kullanılabilir;
-S (başlangıç) (bitiş) (liste)
KARŞILAŞTIR (COMPARE) : Belirli iki aralık içindeki verileri karşılaştırmak için kullanılır.
-C 100,110,10 kodu girildiğinde 100-110 adresindeki veriler ile 10 adresinden başlayan bilgiler karşılaştırılır ve farklı olanları listelenir. Eğer bu veriler aynıysa ekrana hiçbir şey yazılmaz.
ÇEVİR (ASSEMBLE) : Bu kod yardımıyla Assembly dilinde kod yazılabilir.
- A [segment:offset] şeklinde kodlar Assambly dilinde yazılabilir.
GERİ ÇEVİR (UNASSEMBLE) : Bu kod yardımıyla, Assembly dilinde yazılmış kodlar makine diline çevrilir. Böylece ayrı bir derleyici kullanmadan makine dilinde programlar
yazılabilir. Kullanım şekli aşağıdaki gibidir
-U (başlangıç) (bitiş)
Bu başlangıç ve bitiş adresleri segment veya offset olarak verilebilir. Burada dikkat edilmesi gereken nokta, başlangıç ve bitiş noktaları seçilirken bir kod parçasının bölünmeden alınması gerektiğidir.
İZLEME (TRACE) : Bellekte bulunan komutların istediğimiz bir kısmını çalıştırmaya yarar. Bunu tek-tek yapabileceğimiz gibi bir bütün halinde de yapabiliriz. Yani;
-T (adım sayısı) kodu girildiğinde girilen adım sayısı kadar komut çalıştırılır.
-T (başlangıç) (adım sayısı) kodu girildiğinde ise başlangıç adresinden sonraki adım sayısı
kadar komut çalıştırılır.
calisma-834
.MODEL SMALL
.STACK 64
.DATA
ORG 0010H
SIGN_DATA DB 69,87,96,45,75 ;place data definitions here
;
.CODE
MAIN PROC FAR ;this is the program entry point
MOV AX,@DATA ;load the data segment address
MOV DS,AX ;assign value to DS
;
MOV CX,5;place code here
MOV BX,OFFSET SIGN_DATA
SUB AL,AL
AGAIN: CMP AL,[BX]
JA NEXT
MOV AL,[BX]
NEXT: INC BX
LOOP AGAIN
MOV BX,10H
MOV AH,02H
MOV DL,[BX]
INT 21H
;
MOV AH,4CH ;set up to
INT 21H ;return to DOS
MAIN ENDP
END MAIN ;this is the program exit point
calisma-1231
Umut [kişisel bilgi çıkarıldı] Sağdıçoğlu
[kişisel bilgi çıkarıldı]
Deney 2
21.03.2011
Microsoft Windows XP [Sürüm 5.1.2600]
(C) Telif Hakkı 1985-2001 Microsoft Corp.
C:\calisma>debug
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1524 ES=1524 SS=1524 CS=1524 IP=0100 NV UP EI PL NZ NA PO NC
1524:0100 0000 ADD [BX+SI],AL DS:0000=CD
-r ip
IP 0100
:
-r ds
DS 1524
:1500
-r cs
CS 1524
:1600
-r f
NV UP EI PL NZ NA PO NC -nv pe
-f ds:10,1f,23
-d ds:00,3f
1500:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0010 23 23 23 23 23 23 23 23-23 23 23 23 23 23 23 23 ################
1500:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-m ds:15,22,cs:100
-d cs:100
1600:0100 23 23 23 23 23 23 23 23-23 23 23 00 00 00 00 00 ###########.....
1600:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1600:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-s ds:00,100,86
-s ds:00,100,ff
-c ds:15,22,cs:100
-c ds:15,2e,cs:100
-a cs:200
1600:0200 MOV AX,00
1600:0203 MOV BX,AX
1600:0205 MOV CX,12
1600:0208 MOV DX,0101
1600:020B OR CX,AX
1600:020D OR AX,CX
1600:020F ADD BX,AX
1600:0211 SUB AX,BX
1600:0213 ROL DX,1
1600:0215 ROR DX,1
1600:0217 ROR DX,1
1600:0219 NOT DX
1600:021B
-u cs:200
1600:0200 B80000 MOV AX,0000
1600:0203 89C3 MOV BX,AX
1600:0205 B91200 MOV CX,0012
1600:0208 BA0101 MOV DX,0101
1600:020B 09C1 OR CX,AX
1600:020D 09C8 OR AX,CX
1600:020F 01C3 ADD BX,AX
1600:0211 29D8 SUB AX,BX
1600:0213 D1C2 ROL DX,1
1600:0215 D1CA ROR DX,1
1600:0217 D1CA ROR DX,1
1600:0219 F7D2 NOT DX
1600:021B 0000 ADD [BX+SI],AL
1600:021D 0000 ADD [BX+SI],AL
1600:021F 0000 ADD [BX+SI],AL
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0100 NV UP EI PL NZ NA PE NC
1600:0100 2323 AND SP,[BP+DI] SS:0000=20CD
-r ip
IP 0100
:200
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0203 NV UP EI PL NZ NA PE NC
1600:0203 89C3 MOV BX,AX
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0205 NV UP EI PL NZ NA PE NC
1600:0205 B91200 MOV CX,0012
-t
AX=0000 BX=0000 CX=0012 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0208 NV UP EI PL NZ NA PE NC
1600:0208 BA0101 MOV DX,0101
-t
AX=0000 BX=0000 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=020B NV UP EI PL NZ NA PE NC
1600:020B 09C1 OR CX,AX
-t
AX=0000 BX=0000 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=020D NV UP EI PL NZ NA PE NC
1600:020D 09C8 OR AX,CX
-t
AX=0012 BX=0000 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=020F NV UP EI PL NZ NA PE NC
1600:020F 01C3 ADD BX,AX
-t
AX=0012 BX=0012 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0211 NV UP EI PL NZ NA PE NC
1600:0211 29D8 SUB AX,BX
-t
AX=0000 BX=0012 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0213 NV UP EI PL ZR NA PE NC
1600:0213 D1C2 ROL DX,1
-t
AX=0000 BX=0012 CX=0012 DX=0202 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0215 NV UP EI PL ZR NA PE NC
1600:0215 D1CA ROR DX,1
-t
AX=0000 BX=0012 CX=0012 DX=0101 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0217 NV UP EI PL ZR NA PE NC
1600:0217 D1CA ROR DX,1
-t
AX=0000 BX=0012 CX=0012 DX=8080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=0219 OV UP EI PL ZR NA PE CY
1600:0219 F7D2 NOT DX
-t
AX=0000 BX=0012 CX=0012 DX=7F7F SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=1524 SS=1524 CS=1600 IP=021B OV UP EI PL ZR NA PE CY
1600:021B 0000 ADD [BX+SI],AL DS:0012=23
-u 200
1600:0200 B80000 MOV AX,0000 3 byte
1600:0203 89C3 MOV BX,AX 2 byte
1600:0205 B91200 MOV CX,0012 3 byte
1600:0208 BA0101 MOV DX,0101 3 byte
1600:020B 09C1 OR CX,AX 2 byte
1600:020D 09C8 OR AX,CX 2 byte
1600:020F 01C3 ADD BX,AX 2 byte
1600:0211 29D8 SUB AX,BX 2 byte
1600:0213 D1C2 ROL DX,1 2 byte
1600:0215 D1CA ROR DX,1 2 byte
1600:0217 D1CA ROR DX,1 2 byte
1600:0219 F7D2 NOT DX 2 byte
1600:021B 0000 ADD [BX+SI],AL
1600:021D 0000 ADD [BX+SI],AL
1600:021F 0000 ADD [BX+SI],AL
///DENEY 2 ÇALIŞMA FORMU\\\
Microsoft Windows XP [Sürüm 5.1.2600]
(C) Telif Hakkı 1985-2001 Microsoft Corp.
C:\calisma>debug
-a
1524:0100 MOV AX,BX
1524:0102 MOV AX,AAAA
1524:0105 MOV AX,[BX]
1524:0107 MOV AX,[0004]
1524:010A MOV AX,[BX+SI]
1524:010C MOV AX,[SI]+[0004]
1524:010F MOV AX,[BX][SI]+[0004]
1524:0112
-u 100
1524:0100 89D8 MOV AX,BX
1524:0102 B8AAAA MOV AX,AAAA
1524:0105 8B07 MOV AX,[BX]
1524:0107 A10400 MOV AX,[0004]
1524:010A 8B00 MOV AX,[BX+SI]
1524:010C 8B4404 MOV AX,[SI+04]
1524:010F 8B4004 MOV AX,[BX+SI+04]
1524:0112 0000 ADD [BX+SI],AL
1524:0114 0000 ADD [BX+SI],AL
1524:0116 0000 ADD [BX+SI],AL
1524:0118 0000 ADD [BX+SI],AL
1524:011A 0000 ADD [BX+SI],AL
1524:011C 3400 XOR AL,00
1524:011E 1315 ADC DX,[DI]
-r ds
DS 1524
:200
-r cs
CS 1524
:100
-f ds:1234,1234,ED
-f ds:1235,1235,BE
-f ds:1236,1236,CD
-f ds:1237,1237,AB
-r SI
SI 0000
:1236
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1236 DI=0000
DS=0200 ES=1524 SS=1524 CS=0100 IP=0100 NV UP EI PL NZ NA PO NC
0100:0100 0000 ADD [BX+SI],AL DS:1236=CD
-a 00
0100:0000 MOV AX,1234
0100:0003 MOV BX,[1234]
0100:0007 MOV CX,[SI]
0100:0009
-r ip
IP 0100
:0000
-t
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1236 DI=0000
DS=0200 ES=1524 SS=1524 CS=0100 IP=0003 NV UP EI PL NZ NA PO NC
0100:0003 8B1E3412 MOV BX,[1234] DS:1234=BEED
-t
AX=1234 BX=BEED CX=0000 DX=0000 SP=FFEE BP=0000 SI=1236 DI=0000
DS=0200 ES=1524 SS=1524 CS=0100 IP=0007 NV UP EI PL NZ NA PO NC
0100:0007 8B0C MOV CX,[SI] DS:1236=ABCD
-t
AX=1234 BX=BEED CX=ABCD DX=0000 SP=FFEE BP=0000 SI=1236 DI=0000
DS=0200 ES=1524 SS=1524 CS=0100 IP=0009 NV UP EI PL NZ NA PO NC
0100:0009 0000 ADD [BX+SI],AL DS:D123=85
fig2-2
;THE FORM OF AN ASSEMBLY LANGUAGE PROGRAM
USING SIMPLIFIED SEGMENT DEFINITION
.MODEL SMALL
.STACK 64
.DATA
;
;place data definitions here
;
.CODE
MAIN PROC FAR ;this is the program entry point
MOV AX,@DATA ;load the data segment address
MOV DS,AX ;assign value to DS
;
;place code here
;
MOV AH,4CH ;set up to
INT 21H ;return to DOS
MAIN ENDP
END MAIN ;this is the program exit point
2010 laboratuvar 2 deneysel çalışma şablonu
Şablondaki DEBUG oturumu; yazmaç ayarı, fiziksel adres, doldurma, taşıma, arama ve karşılaştırma işlemlerini gösterir.
A,b,c,d,e şıkkı
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13B6 ES=13B6 SS=13B6 CS=13B6 IP=0100 NV UP EI PL NZ NA PO NC
13B6:0100 0000 ADD [BX+SI],AL DS:0000=CD
-r ip
IP 0100
:100
-r ds
DS 13B6
:1500
-r cs
CS 13B6
:1600
-r f
NV UP EI PL NZ NA PO NC -nv pe
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=1600 IP=0100 NV UP EI PL NZ NA PE NC
1600:0100 0000 ADD [BX+SI],AL DS:0000=00
Effectif adresi yazmak için ilk register i 4 bit sola kaydırırız ve ikinci ile toplarız. Buna göre;
DS:BX = 15000
CS:IP = 16100
SS:BP = 13B60
3)
-f ds:10,1f,23
4)
-d ds:00,3f
1500:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0010 23 23 23 23 23 23 23 23-23 23 23 23 23 23 23 23 ################
1500:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
5)
-m ds:15,28,cs:100
-d ds:100
1500:0100 23 23 23 23 23 23 23 23-23 23 23 00 00 00 00 00 ................
1500:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1500:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
6)
-s ds:0000 0100 86
-s ds:0000 0100 ff
Yukardaki kodlar ile 00-100 arasındaki adreslerde 86 ve ff i arar.
Sonuç bulamadığı için ekranda herhangi bir açıklama çıkmadı.
7)
A ve b şıkkını aşağıdaki kodları girerek gerçekleştirdim.
-c 15,28,100
-c 15,34,100
Ancak daha önce ds:15 ten başlayan verileri cs:100 ile başlayan depolama yerlerine taşıdığım için ve ilgili depolama bölgelerinin dışındakilerin içi “00” olduğundan farklı hiçbir değer belirleyemedi ve sonuç göstermedi.
Eğer karşılaştırma fonksiyonunu aşağıdaki gibi kullansaydım sonuç verecekti.
-c 30,36,100
1500:0030 00 23 1500:0100
1500:0031 00 23 1500:0101
1500:0032 00 23 1500:0102
1500:0033 00 23 1500:0103
1500:0034 00 23 1500:0104
1500:0035 00 23 1500:0105
1500:0036 00 23 1500:0106
Burada c:30 ile başlayan adres 00 c:100 ile başlayan adres 23 olduğu için farkı ekranda gösterdi.
8)
-a
13B6:0100 mov ax,00
13B6:0103 mov bx,ax
13B6:0105 mov cx,12
13B6:0108 mov dx,0101
13B6:010B or cx,ax
13B6:010D or ax,cx
13B6:010F add bx,ax
13B6:0111 sub ax,bx
13B6:0113 rol dx,1
13B6:0115 ror dx,1
13B6:0117 ror dx,1
13B6:0119 not dx
13B6:011B
-u 13b6:0100
13B6:0100 B80000 MOV AX,0000
13B6:0103 89C3 MOV BX,AX
13B6:0105 B91200 MOV CX,0012
13B6:0108 BA0101 MOV DX,0101
13B6:010B 09C1 OR CX,AX
13B6:010D 09C8 OR AX,CX
13B6:010F 01C3 ADD BX,AX
13B6:0111 29D8 SUB AX,BX
13B6:0113 D1C2 ROL DX,1
13B6:0115 D1CA ROR DX,1
13B6:0117 D1CA ROR DX,1
13B6:0119 F7D2 NOT DX
13B6:011B 0034 ADD [SI],DH
13B6:011D 00A51300 ADD [DI+0013],AH
9) Bir üst soruda a kodunu adres vermeden girdiğim için cs:13b6:0100 adresinden itibaren yazmaya başladı. Bu sebeple 1600 de olan cs değerini
-r cs
CS 1600
:13B6
Kodu ile değiştirdim.
AX=0000 BX=0000 CX=0000 DX=0000 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0103 NV UP EI PL ZR NA PE NC
13B6:0103 89C3 MOV BX,AX
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0105 NV UP EI PL ZR NA PE NC
13B6:0105 B91200 MOV CX,0012
-t
AX=0000 BX=0000 CX=0012 DX=0000 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0108 NV UP EI PL ZR NA PE NC
13B6:0108 BA0101 MOV DX,0101
-t
AX=0000 BX=0000 CX=0012 DX=0101 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=010B NV UP EI PL ZR NA PE NC
13B6:010B 09C1 OR CX,AX
-t
AX=0000 BX=0000 CX=0012 DX=0101 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=010D NV UP EI PL NZ NA PE NC
13B6:010D 09C8 OR AX,CX
AX=0012 BX=0000 CX=0012 DX=0101 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=010F NV UP EI PL NZ NA PE NC
13B6:010F 01C3 ADD BX,AX
-t
AX=0012 BX=0012 CX=0012 DX=0101 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0111 NV UP EI PL NZ NA PE NC
13B6:0111 29D8 SUB AX,BX
-t
AX=0000 BX=0012 CX=0012 DX=0101 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0113 NV UP EI PL ZR NA PE NC
13B6:0113 D1C2 ROL DX,1
-t
AX=0000 BX=0012 CX=0012 DX=0202 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0115 NV UP EI PL ZR NA PE NC
13B6:0115 D1CA ROR DX,1
-t
AX=0000 BX=0012 CX=0012 DX=0101 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0117 NV UP EI PL ZR NA PE NC
13B6:0117 D1CA ROR DX,1
-
AX=0000 BX=0012 CX=0012 DX=8080 SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0119 OV UP EI PL ZR NA PE CY
13B6:0119 F7D2 NOT DX
-t
AX=0000 BX=0012 CX=0012 DX=7F7F SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=011B OV UP EI PL ZR NA PE CY
13B6:011B 0034 ADD [SI],DH DS:0000=00
-t
AX=0000 BX=0012 CX=0012 DX=7F7F SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=011D NV UP EI PL NZ NA PO NC
13B6:011D 00A51300 ADD [DI+0013],AH DS:0013=23
-t
AX=0000 BX=0012 CX=0012 DX=7F7F SP=5DB7 BP=20CA SI=0000 DI=0000
DS=1500 ES=13B6 SS=13B6 CS=13B6 IP=0121 NV UP EI PL NZ NA PO NC
13B6:0121 0000 ADD [BX+SI],AL DS:0012=23
Not: .dot dosyasının hazırlanmış PDF karşılığı bulunmadığından metni özgün Word dosyasının metin tablosundan çıkarılmıştır. İndirme paketine meta verisiz TXT dökümü eklendi. Kaynaktaki “efektif adres” ifadesi, verilen hesaplarda fiziksel adresi anlatmaktadır.