Начало » Програмиране » Използване на Debug

Debug е един малко използван инструмент който се разпространява с Windows. Въпреки че не е лесен за употреба като други подобни програми, той е доста добър(трябва само да знаете десетичното смятане).
Нека започнем с неговото разучаване: отворете ms-dos prompt -> START->RUN->command или START->RUN->cmd и напишете debug и prompt-a ще ви стане подобен на '-'. От тук нататък можете да извиквате команди на debug. Като за начало нека погледнем към регистрите: напишете 'r' и натиснете enter: ще видите нещо подобно на това:
<q>
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2422 ES=2422 SS=2422 CS=2422 IP=0100 NV UP EI PL NZ NA PO NC
2422:0100 C3 RET
</q>
AX, BX, CX и DX са регистри които в момента са празни, SP е указател към стека, IP е указател към инструкциите, който сочи към това коя ще бъде следващата инструкция която ще бъде изпълнена.
Ако разгледаме самостоятелно адреса 0100 се оказва че той е невалиден адрес от паметта. Затова той се комплектова с регистъра CS. CS сочи сегмента от код на програмата в паметта. Така указателя на инструкции(IP) сочи в момента към следният сегмент от паметта 2422:0100. От последния ред също се че вижда следващата инструкция която ще се изпълни в този адрес е RET.
За да започнем да работим с регистрите изпълнете следната команда:
<q>
r AX #позиционираме се върху регистъра АХ
4 #постявяме числото 4 в регистъра АХ
</q>
Натиснете ‘r’ за да видите още веднъж съдържанието на регистъра АХ. Стойността на AX трябва да се е променила и да показва стойността, която току що сложихте там (AX=0004)
Повторете процеса, заменяйки АХ с ВХ, а BX с 2. Отново вижте с 'r' и ще забележите че имате нови стойности в регистрите АХ и ВХ.
За да съберем тези стойности(ADD AX,BX) ще си послужим с една хитрост. Като начало трябва да заредим инструкцията за събиране в паметта и да накараме указателя на инструкциите(IP) да сочи към нея. Затова извикайте следните команди:
<q>
e 100 #избираме адрес 0100h
01 #поставяме 01h в горния адрес(0100h)
e 101 #избираме адрес 0101h
D8 #поставяме D8h в него
</q>
Сега направете листинг(dump) на паметта с 'r' и ще видите последния ред да гласи:
<q>
2422:0100 01D8 ADD AX,BX
</q>
01D8 е машинния код на x86-процесорите за събиране на рестрите AX и BX. В примера код-сегмента е 2422, когато изпробвате вашият регистър вероятно ще е друг. Независимо от това следващата инструкция, която ще се изпълни събира стойностите на регисрите АХ и ВХ които ако си спомняте заредихме преди малко(AX=0004, BX=0002). За да изпълните тази инструкция напишете 't' - трасиране. Когато изпълните тази команда, ще видите още едно автоматично представяне на паметта показващо резултата от инструкцията.
<q>
AX=0006 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2422 ES=2422 SS=2422 CS=2422 IP=0102 NV UP EI PL NZ NA PE NC
2422:0102 8AC3 MOV AL,BL
</q>
Както виждате стойността от калкулацията се запазва …
| 01 | Използване на Debug - 2 част |
| 02 | Регистри в асемблер |
| 03 | Оператори в асемблер |
| 04 | Класове в C++ II част |
| 05 | Класове в C++ I част |
|
Коментари за Използване на Debug