Тема 2

Въведение в използването на Debug.exe

Команди

Ако напишете в конзолата "?" ще получите всички поддържани от програмта команди:

-?
assemble     A [address]
compare      C range address
dump         D [range]
enter        E address [list]
fill         F range list
go           G [=address] [addresses]
hex          H value1 value2
input        I port
load         L [address] [drive] [firstsector] [number]
move         M range address
name         N [pathname] [arglist]
output       O port byte
proceed      P [=address] [number]
quit         Q
register     R [register]
search       S range list
trace        T [=address] [value]
unassemble   U [range]
write        W [address] [drive] [firstsector] [number]
allocate expanded memory        XA [#pages]
deallocate expanded memory      XD [handle]
map expanded memory pages       XM [Lpage] [Ppage] [handle]
display expanded memory status  XS
-

Допълнителни променливи

Малко разяснения към командите преди да ги опишем детайлно.
Като за начало квадратните(счупени скоби) не се пишат - те показват, че параметърът към оператора не е задължителен. А сега ще опишем какви са е предназначението и форматът на това, което е между счупените скоби.

address - Позиция в паметтта, записана в шестнайсетичен код(като шестнадесетично число). Може да използвате само offset(отместване), като в този случай текущия CS (Code Segment) се има за начало от което "отмествате" показалеца към новия адрес. Можете и да податете segment:offset като сегментът може да е който и да е сегмент от паметта(това ще го обясним малко по-късно, за сега е достатъчно да знаете, че паметта е разделена на краен брой сегменти). Ето няколко примера:

-a    100  
-a    DS:12  
-a    SS:0 
-a   198A:1234

range - Две числа в 16-чен код, разделени с интервал. Могат да бъдат като Segment:Offset двойки или само Offset-и (тоест отмествания от текущия CS или "Code Segment" ). Забележка: Команди, като Compare (C), може да изискват втория адрес да е зададен като Offset.

list - Това е поредица от 16-чни числа разделени с интервал или символен низ(а.к.а стринг) съдържащ само символи от ASCII таблицата ограден от еденични кавички. Можете да давате параметри колкото позволява дължината на реда.

e 100 31 C0 B4 09 BA 50 02 CD 21 B8 4C 00 CD 21
e 250 'This is an ASCII data string.$'

number - В DEBUG всички числа са 16-чни! И това горе долу изчерва number-а просто едно число в 16-чна бройна система.

Детайлно описание на командите

Всяка от тях може да бъде въвеждана като цяла дума, или просто с първата си буква

  • Go - Изпълнява програмата от мястото, в което се намира в момента Instruction Pointer-ът. Ако са му дадени начален и краен адрес се държи според очакванията (т.е. работи от-до тези адреси).
  • Trace - Подобно на Go, но изпълнява само една инструкция. Удобно, ако искаме да видим на кой точно ред програмата ни се чупи.
  • Assemle - Превръща код на Assembly в машинен код(т.е. готов за изпълнение). Това ще го ползваме сравнително често. С тази команда ще пишем същинските програми. Един вид "компилация" за Асемблер. Ако не му се подаде адрес, то започва от 0100 в текущия Code Segment. Работи значително по-ефективно когато в указания адрес реално има програма, която прави нещо.
  • Dump - Показва на екрана съдържанието на текущия блок от паметта. Ако му се зададе интервал, показва какво има в интервала
  • Unassemble - Обратното на Assemble. Отново започва от 0100. Не го използвайте много, не с всички видове инструкции работи на 100%.
  • Enter - въвежда данни директно в паметта. Подава му се адрес и списък от 16-тични стойности, които да запише от този адрес нататък. С това ще въвеждаме данни(например числа или текст).

Има и други, но те за момента не са прекалено важни.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License