Bölüm 5 : DEBUG Programı
DEBUG, MS-DOS altında kullanılan ve kullanıcıya çalıştırılabilir dosyaları bellek üzerinde
değiştirip kaydedebilme olanağı sağlayana bir yazılımdır. Bugün piyasada aynı işi yapan çok
daha fonksiyonel ve gelişmiş programlar mevcuttur fakat DEBUG’ın MS-DOS ile birlikte
gelmesi programın elde edilmesi konusundaki zorluğu ortadan kaldırmaktadır.
Bu bölümde DEBUG programı içerisinde kullanılan bazı komutları örnekleri ile ele aldım.
DEBUG programını başlatmak için MS-DOS kipinde “debug” komutun vermeniz yeterlidir.
Komutu verdikten sonra aşağıdaki gibi bir ekran görüntüsü ile karşılaşırsınız.
Microsoft(R) Windows 98
(C)Telif Hakkı Microsoft Corp 1981-1999.
C:\WINDOWS\Desktop>debug
-
42
Yukarıdaki ekran debug programını ilk çalıştırdığınız zaman karşınıza gelecek ekrandır.
Program çalıştığı zaman sadece ekranın sol kenarında bir çizgi belirir. Bu aşamada debug
sizden bir sonraki işlem için komut beklemektedir. Aşağıdaki tabloda en çok kullanılan
komutları açıklamaları ile birlikte verdim.
A – Assemble Belirli bir adresten itibaren program yazımı
G – Go Bellekteki programın çalıştırılması
L – Load Belleğe yükleme yapılması
N – Name Yüklenecek veya yazılacak programın ismi
Q – Quit DEBUG’tan çıkmak
R – Register Register değeri atama
T – Trace Adım adım işletim
U – Unassemble Yüklü programın dağıtılması
W - Write Bellekten diske yazma işlemi
? - Yardım Kullanılabilecek komutların listesi
Yukarıda sadece kullanacağımız komutları açıklamaları ile birlikte verdim. Şimdi isterseniz
MS-DOS kipinde debug’ı çalıştırıp bir program yazalım ve programı diske kaydedelim.
C:\WINDOWS\Desktop>debug
-A 100
1E27:0100 mov ah,02
1E27:0102 mov dh,07
1E27:0104 mov dl,0c
1E27:0106 int 10
1E27:0108 mov ah,4c
1E27:010A int 21
1E27:010C
-N set_curs.com
-R CX
CX 0000
:000C
-W
0000C bayt yazılıyor
-
Yukarıdaki program ile imleç DH ve DL ile belirtilen noktaya taşınıyor. Öncelikle programın
debug içerisinde yazılması için “A” komutu kullanıldı. “A” komutu ile kullanılan 100
parametresi programın yazılmaya başlanacağı offset adresini gösteriyor. Yazacağımız program
bir COM dosyası olduğu için başlangıç offseti 0100 olarak belirledik. Bir sonraki satırda
assembly programımızı yazmaya başladık. Programın yazım kısmı bittikten sonra “N” komutu
ile bellekte bulunan bilgiyi diske yazacağımız zaman kaydedilecek dosya ismini belirledik. “R”
komutu ile CX register’ı içerisindeki değere programımızın bayt olarak uzunluğunu atıyoruz
(Örneğimizde 010C – 0100 = 000C ). En son olarak da “W” komutu ile bellekteki komutlar
“set_curs.com” dosya adı ile diske kaydediliyor.
Şimdi de yazdığımız programı tekrar DEBUG yardımı ile dağıtalım.
43
C:\WINDOWS\Desktop>debug
-N set_curs.com
-L
-U
1E4A:0100 B402 MOV AH,02
1E4A:0102 B607 MOV DH,07
1E4A:0104 B20C MOV DL,0C
1E4A:0106 CD10 INT 10
1E4A:0108 B44C MOV AH,4C
1E4A:010A CD21 INT 21
1E4A:010C D6 DB D6
1E4A:010D C70619DFAD82 MOV WORD PTR [DF19],82AD
1E4A:0113 E8C901 CALL 02DF
1E4A:0116 0BC0 OR AX,AX
1E4A:0118 7478 JZ 0192
1E4A:011A 8BE8 MOV BP,AX
1E4A:011C BF02D2 MOV DI,D202
1E4A:011F 8B36C6DB MOV SI,[DBC6]
-Q
C:\WINDOWS\Desktop>
Yukarıda yine komut satırından “debug” komutu verilerek DEBUG programı çalıştırılıyor.
Bu sefer “N” komutu diske yazılacak dosyanın ismini değil, diskten belleğe aktarılacak
dosyanın ismini vermek için kullanılıyor. Daha sonra “L” komutu ile ismi verilen dosya belleğe
yükleniyor. Belleğe yüklenen program “U” komutu ile dağıtılıyor. Kodları dikkatli incelerseniz
programın ilk altı satırının bizim bir önceki örnekte yazdığımız assembly kodlarından
oluştuğunu göreceksiniz. Kodların solundaki sayılar assembly komutlarının bellekte
bulundukları şeklidir (makine dili). 010C ve sonrasındaki satırlardaki assembly komutları o
anda bellekte rasgele bulunan kodlardır. Bizim programımız ile bir ilgileri yoktur. En son
olarak da “Q“ komutu ile DEBUG’tan çıkılıyor.
“T” komutu ile bellekteki herhangi bir program adım adım işletilebilir. Komutun kullanımına
basit bir örnek aşağıda verilmiştir.
Microsoft(R) Windows 98
(C)Telif Hakkı Microsoft Corp 1981-1999.
C:\WINDOWS\Desktop>debug
-A 100
1E2C:0100 mov ax,1234
1E2C:0103 mov bx,4567
1E2C:0106 mov ax,bx
1E2C:0108
-T = 100
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1E2C ES=1E2C SS=1E2C CS=1E2C IP=0103 NV UP EI PL NZ NA PO NC
1E2C:0103 BB6745 MOV BX,4567
-T
AX=1234 BX=4567 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1E2C ES=1E2C SS=1E2C CS=1E2C IP=0106 NV UP EI PL NZ NA PO NC
1E2C:0106 89D8 MOV AX,BX
44
-T
AX=4567 BX=4567 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1E2C ES=1E2C SS=1E2C CS=1E2C IP=0108 NV UP EI PL NZ NA PO NC
1E2C:0108 107420 ADC [SI+20],DH DS:0020=FF
-
Gördüğünüz gibi DEBUG ile yazılan program adım adım işletilmektedir. “T” komutunu
yazdığınız kısa kodların hata kontrolü için kullanabilirsiniz.
Hiç yorum yok:
Yorum Gönder