20 уроков Ассемблера


Семён Леонидович Углев

Урок 4. Отладчик

Итак, понемногу мы подвигаемся вперёд. Сегодня мы узнаем о такой важной вещи, как отладчик. В нашем комплекте программ он есть и называется AFD Pro. Для чего нужен отладчик? Как ясно из его названия, для отладки программы. Например, у вас что-то не работает, и нужно найти причину. У нас пока всё работает, но мы хотим посмотреть на работу программы "изнутри". Откроем нашу программу 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). Все они имеют значение первого свободного адреса, которое находит процессор и куда загружает в память. Чуть позже мы рассмотрим эти понятия на примерах.

Мы используем куки-файлы, чтобы вы могли быстрее и удобнее пользоваться сайтом. Подробнее