Итак, понемногу мы подвигаемся вперёд. Сегодня мы узнаем о такой важной
вещи, как отладчик. В нашем комплекте программ он есть и называется AFD
Pro.
Для чего нужен отладчик? Как ясно из его названия, для
отладки программы. Например, у вас что-то не работает, и нужно найти
причину. У нас пока всё работает, но мы хотим посмотреть на работу
программы "изнутри". Откроем нашу программу test.com в отладчике:
afdpro test.com Файл afdpro.exe должен быть прописан в системных путях или находиться в папке с программой.
Что
же мы видим? В верхней части — значения регистров, о которых мы писали в
предыдущей статье. Правее — состояние Stack — стека, о чём мы будем
говорить позже. Ниже — командная строка, а ещё ниже, как мы, наверное,
догадались, наша программа (первые четыре строчки соответствуют нашему
коду). Теперь немного об управлении:
F1 — пошаговая трассировка с заходом в прерывания и процедуры. F2 — то же самое, но без захода в процедуры и прерывания. Чтобы
перемещаться и изменять, например, регистры, дамп памяти - используйте
клавиши F7 (вверх), F8 (вниз), F9 (влево), F10 (вправо).
Нажмём
F2: программа переместит нас на следующую строчку, при этом регистры будут
отображать нам числовые значения, в них хранящиеся. Первой командой мы
занесли в ah число 9. Всё правильно: в левом верхнем углу значение
регистра ax показывает 0900 (ah=9, al=0 - он не менялся). Следующее
нажатие F2 — значение регистра dx стало равным 109h. Почему 109? Сейчас
узнаем. Ещё раз нажимаем F2 и ещё раз — и мы видим надпись "Program
terminated OK" — программа успешно завершила свою работу. Если хотите,
можете проверить работу программы ещё раз — для этого нужно нажать
клавишу F3 и Enter. Но где же хранят нашу фразу "Hello, world!"?
Рассмотрим подробнее команду mov dx,offset helloworld. В отладчике мы видим иное: MOV DX,0109. Почему так?
Дело
в том, что как мы узнали из предыдущего урока, регистры общего
назначения, в том числе и dx, хранят всего лишь 2 байта. Вся фраза никак
не поместится в регистр dx. Поэтому запись MOV DX,0109 указывает на смещение, где хранится наша фраза. Проверим это.
Нажмём клавишу F8 так, чтобы курсор переместился в окно 2. Заменяем значения DS 0000 на DS 0109. В правой части мы видим фразу "Hello, world!".
Что
же такое смещение? Представить это можно в виде линеек координат. За
линейку X можно представить себе сегмент, а за линейку Y - смещение.
Чтобы найти адрес чего-либо, например, символа, нужно знать эти два
параметра. Почему же мы здесь указываем только смещение? Да потому, что
наши сегментные регистры сейчас имеют одинаковое значение (cs=ds=es=ss).
Все они имеют значение первого свободного адреса, которое находит
процессор и куда загружает в память. Чуть позже мы рассмотрим эти
понятия на примерах.
А в следующем уроке мы узнаем о циклах, операторе безусловного перехода и вызове подпрограмм.