Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

методические указания для выполнения лабораторных работ / Вводная лабораторная работа по Ассемблеру

.doc
Скачиваний:
75
Добавлен:
11.02.2014
Размер:
61.44 Кб
Скачать

Вводная лабораторная работа.

ИСПОЛЬЗОВАНИЕ СИСТЕМНОЙ ПРОГРАММЫ DEBUG

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

1. ОСНОВНЫЕ ПОНЯТИЯ

Микропроцессор ПК состоит из:

  1. Операционного устройства;

  2. Шинного интерфейса.

Операционное устройство включает в себя:

  1. Устройство микропрограммного управления;

  2. Регистры микропроцессора (кроме сегментных);

  3. АЛУ.

Регистры.

Микропроцессоры содержат 32 регистра, из которых 16 пользовательских и 16 системных. Пользовательские регистры делят на виды:

  1. регистры общего назначения

  2. сегментные регистры

  3. регистры состояния и управления (содержат информацию о состоянии МП, исполняемой программы и позволяют изменить это состояние);

  4. Регистры сопроцессора (предназначены для написания программ, использующих тип данных с плавающей точкой);

  5. Целочисленные регистры ММХ – расширения;

  6. Регистры ММХ – расширения с плавающей точкой;

  7. Регистр флагов;

  8. Регистр указатель команд.

Регистры общего назначения.

Регистры общего назначения – это 32 – битные регистры.

Регистр AX – называется аккумулятором, является основным сумматором, применяется для операции ввода – вывода, операции над строками. применение этого регистра для некоторых операций являются необходимым (*,:).

Регистр BX – базовый. Применяется для хранения базового адреса и некоторого объекта в памяти. Один из регистров, который может использоваться в качестве индекса для расширенной адресации.

Регистр CX – регистр счетчика.

Может использоваться для вычисления, если в задаче некоторое число повторений .При организации циклов или в командах сдвига влево или вправо.

DX – регистр данных, применяется для некоторых операций ввода – вывода, для обычных вычислений и для тех вычислений, когда требуется использовать регистровую пару AX,BX.

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

SP – указатель стека, обеспечивает использование стека в памяти и позволяет временно хранить адреса и данные. Причем он связан с регистром SS.

BP – указатель базы стека. Обеспечивает произвольный доступ к любому месту в стеке.

Стек – небольшой участок в памяти, который используется для временного хранения переменных, передачи параметров вызываемым подпрограммам и сохранение возврата при вызове процедур и прерываний. Размер стека зависит от режима работы микропроцессора и ограничивается 64 Кбайтами. Стек располагается в сегменте памяти, описываемом регистром SS, и текущее смещение вершины стека отражено в регистре ESP, причем во время записи значение этого смещения уменьшается, то есть он «растет вниз» от максимально возможного адреса.

Индексные регистры - применяются для расширенной адресации, в операциях сложения и вычитания.

SI – индекс источника. применяется для цепочных операций и содержит текущий адрес элемента в цепочке – источнике.

DI – индекс приемника. Используется как и SI, содержит текущий адрес в цепочке приемника.

Сегментные регистры.

Сегмент – некоторая область памяти, которая начинается на границе параграфа, т.е. по адресу, кратному 16. Существуют 3 сегмента, размером до 64 Кб. Могут располагаться в любом месте памяти.

CS – сегмент кода содержит все машинные команды в программе, которые необходимо выполнить. Начальный адрес содержится в регистре CS.

DS – сегмент данных - содержит константы, различные рабочие области, используемые в программе. Начальный адрес этого сегмента записан в регистр DS.

Сегмент стека – SS, содержит адрес возврата в ОС, и для вызова подпрограмм при возврате в главную программу.

Сегменты могут находиться в любом месте памяти, могут накладываться друг на друга, перекрываться, занимать непересекающиеся области.

ES, GS, FS - дополнительные регистры сегмента данных. При их использовании их адреса должны быть указаны явно с помощью специальных префиксов переопределения сегментов в команде.

Все адреса команд внутри программы относительны к началу сегмента. Такие адреса называются смещением. Для обращения по любому адресу в программе компьютер складывает адрес в регистре сегмента с тем смещением, который нам нужен.

Смещение может измениться от 0000 до FFFF –65535.

Пример: DS=045FH

0006h (смещение)

Для того, чтобы сформировать адрес необходимо выполнить:

0000 045F0H

0002 045F2H

0004 045F4H

0006 045F6H

Формирование физического адреса.

  • адрес в регистре сегмента умножить на 10h

  • к полученному числу прибавить соответствующее смещение

  1. 0045Fh*10h=045F0h

  2. 045F0h+0006h=045F6h

Регистры состояния и управления

1. Регистр указателя команды. Смещение очередной выполняемой команды всегда храниться в этом регистре.

2. Регистры флагов

2. ХОД РАБОТЫ

Использование системной программы DEBUG для просмотра памяти, ввода программ и осуществления трассировки их выполнения.

  1. Просмотр памяти

Для просмотра содержимого ячеек памяти используется программа DOS DEBUG.

Для запуска этой программы запустите сеанс MS DOS, выберите диск С:\, введите DEBUG и нажмите Enter.

1.1. Размер памяти. Размер доступной для работы памяти находится в ячейках памяти 413Н Ии 414Н, и его можно просмотреть по адресу, состоящему из двух частей: 400 – это адрес сегмента, который записывается как 40 (последний нуль подразумевается); 13 - это смещение от начала сегмента.

Введите запрос: D 40:13 (Enter)

Первые два байта, появившиеся на экране в шестнадцатиричном представлении, содержат объем памяти в килобайтах, причем байты располагаются в обратном порядке.

Шестнадцатиричное

обратное

Шестнадцатиричное

нормальное

Десятичное (К)

80 00

00 80

128

00 01

01 00

256

80 01

01 80

384

00 02

02 00

512

80 02

02 80

640

    1. Серийный номер.

Серийный номер ПК находится в ROM по адресу FE000Н. Введите с клавиатуры: D FE00:0 (Enter)

1.3. Дата ROM BIOS. Дата в формате mm/dd/yy предназначена для определения модели и возраста ПК и находится по адресу FFFF5Н. Введите: D FFFF:05 (Enter)

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

  1. Пример машинных кодов: непосредственные данные

Программа на машинном языке состоит из команд. Машинные команды находятся в памяти друг за другом и выполняются последовательно. В машинном коде команда пересылки MOV может кодироваться как В8 или как 8В.

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

Команда

Назначение

В82301

Переслать значение 0123Н в АХ

052500

Прибавить значение 0025Н к АХ

8BD8

Переслать содержимое АХ в ВХ

03D8

Прибавить содержимое АХ к ВХ

8BCB

Переслать содержимое ВХ в СХ

2BCB

Вычесть содержимое АХ из АХ (очистка АХ)

90

Нет операции

CB

Возврат в DOS

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

- Введите команду запуска отладчика DEBUG и нажмите (Enter).

- Для ввода программы введите команду:

E CS:100 B8 23 01 05 25 00 (Enter)

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

- Введите команду:

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

Команда Е вводит шесть байтов в ячейки с CS:106 и далее в 107, 108, 109, 10А и 10В.

- Последняя команда вводит шесть байтов:

E CS:10C 2B C8 2B C0 90 CB (Enter)

Выполнение команд программы:

- Введите команду R для просмотра содержимого регистров и флагов. В данный момент отладчик покажет содержимое регистров в шестнадцатиричном формате: АХ=0000. Регистр IР=0100, т.к. выполняемая команда находится на смещении 100Н байт от начала сегмента кодов.

Регистр флагов покажет определенные значения: NV UP DI NZ NA PO NC, которые означают: нет переполнения, прерывания запрещены, знак плюс, не ноль, нет внешнего переноса, контроль на четность и нет переноса.

Регистр CS содержит числовое значение, а команда выглядит, например, следующим образом:

13С6:0100 В82301 MOV АХ,0123

CS=13С6 указывает, что начало сегмента кода находится по смещению 13С6. Значение 13С6:0100 обозначает 10016 байт от начального адреса 13С6 в регистре CS.

В82301 – команда, введенная по адресу CS:100.

MOV AX,0123 – ассемблерный мнемонический код, соответствующий команде.

- Для выполнения команды MOV нажмите клавишу Т (для трассировки) и (Enter).

Отладчик выдаст на экран содержимое регистров, флаги и следующую команду. Регистр АХ=0123, IP:0103 показывает адрес следующей команды.

- Для выполнения последующих команд снова введите команды Т.

- Можно ввести Т для выполнения команд 90 и СВ, но это сделайте позже. Для просмотра программы в Машиных кодах в сегменте кодов введите:

D CS:100 (Enter)

Отладчик выдаст на каждую строку по 16 байт данных в шестнадцатиричном представлении. Первая строка дампа начинается с 00 и представляет содержимое ячеек от CS:100 до CS:10F. Вторая строка – от CS:110 до CS:11F. Несмотря на то, что программа заканчивается по адресу CS:111, команда Damp выдает восемь строк с адреса CS:100 до CS:170.

- Закончите выполнение программы.

- Выйдите из программы DEBUG.