Ассемблер и программирование для IBM PC



       

ГЛАВА 2. Выполнение программ - часть 3


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

Цель данного примера - проиллюстрировать простую програм му на машинном языке, ее представление в памяти и результаты ее выполнения. Программа показана в шестнадцатиричном формате:

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

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) байт от начала сегмента кодов. (Обычный стартовый

Ассемблер для IBM PC. Глава 2 33

адрес для машинных кодов в отладчике DEBUG). Ккоманда E записывает каждую пару шестнадцатиpичных цифр в память в виде байта, начиная с адреса CS:100 до адреса CS:105. Следующая команда Enter:

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




Содержание  Назад  Вперед