Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
19
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

1. Р а з м е р п а м я т и. Сначала проверим размер доступной

для работы памяти. В зависимости от модели компьютера это значение

связано с установкой внутренних переключателей и может быть меньше,

чем реально существует. Данное значение находится в ячейках памяти

шест.413 и 414 и его можно просмотреть из DEBUG по адресу, состоящему

из двух частей:

400 - это адрес сегмента, который записывается как 40

(последний нуль подразумевается) и

13 - это смещение от начала сегмента. Таким образом, можно

ввести следующий запрос:

D 40:13 (и нажать Return)

Первые два байта, появившиеся в результате на экране, содержат размер

памяти в килобайтах и в шестнадцатеричном представлении, причем байты

располагаются в обратной последовательности. Несколько следующих примеров

показывают шест. обратное, шест. нормальное и десятичные представления.

Шест. обратн. Шест. норм. Десятичн. (К)

8000 0080 128

0001 0100 256

8001 0180 384

0002 0200 512

8002 0280 640

2. С е р и й н ы й н о м е р. Серийный номер компьютера "зашит"

в ROM по адресу шест. FE000. Чтобы увидеть его, следует ввести:

D FE00:0 (и нажать Return)

В результате на экране появится семизначный номер компьютера и дата

копирайт.

3. Д а т а rom bios. Дата rom bios в формате mm/dd/yy находится

по шест. адресу FFFF5. Введите

D FFFF:05 (и нажмите Return)

знание этой информации (даты) иногда бывает полезным для определения

модели и возраста компьютера.

Теперь, поскольку вы знаете, как пользоваться командой D (Display),

можно устанавливать адрес любой ячейки памяти для просмотра содержимого.

Можно также пролистывать память, периодически нажимая клавишу D, - DEBUG

выведет на экран адреса, следующие за последней командой.

Для окончания работы и выхода из отладчика в DOS введите команду Q

(Quit). Рассмотрим теперь использование отладчика DEBUG для

непосредственного ввода программ в память и трассировки их выполнения.

ПРИМЕР МАШИННЫХ КОДОВ: НЕПОСРЕДСТВЕННЫЕ ДАННЫЕ

________________________________________________________________

Цель данного примера - проиллюстрировать простую программу на

машинном языке, ее представление в памяти и результаты ее выполнения.

Программа показана в шестнадцатиричном формате:

Команда Назначение

B82301 Переслать шест. значение 0123 в AX.

052500 Прибавить шест. значение 0025 к AX.

8BD8 Переслать содержимое AX в BX.

03D8 Прибавить содержимое AX к BX.

8BCB Переслать содержимое BX в CX.

2BC8 Вычесть содержимое AX из AX (очистка AX).

90 Нет операции.

CB Возврат в DOS.

Можно заметить, что машинные команды имеют различную длину: один, два

или три байта. Машинные команды находятся в памяти непосредственно друг за

другом. Выполнение программы начинается с первой команды и далее

последовательно выполняются остальные. Не следует, однако, в данный момент

искать большой смысл в приведенном машинном коде. Например, в одном случае

MOV - шест.B8, а в другом - шест.8B.

Можно ввести эту программу непосредственно в память машины и выполнить

ее покомандно. В тоже время можно просматривать cодержимое регистров после

выполнения каждой команды. Начнем данное упражнение так же как делалось

предыдущее - ввод команды oтладчика DEBUG и нажатие клавиши Return. После

загрузки DEBUG на экране высвечивается приглашение к вводу команд в виде

дефиса. Для печати данного упражнения включите принтер и нажмите Ctrl и

PrtSc одновременно.

Для непосредственного ввода программы на машинном языке введите

следующую команду, включая пробелы:

E CS:100 B8 23 01 05 25 00 (нажмите Return)

Команда E обозначает Enter (ввод). CS:100 определяет адрес памяти,

куда будут вводиться команды, - шест.100 (256) байт от начала сегмента

кодов. (Обычный стартовый адрес для машинных кодов в отладчике DEBUG).

Команда E записывает каждую пару шестнадцатиpичных цифр в память в виде

байта, начиная с адреса CS:100 до адреса CS:105.

Следующая команда Enter:

E CS:106 8B D8 03 D8 8B CB (Return)

вводит шесть байтов в ячейки, начиная с адреса CS:106 и далее в 107, 108,