Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_lab__rab_spo.doc
Скачиваний:
14
Добавлен:
05.09.2020
Размер:
433.66 Кб
Скачать

4. Требования к отчету

Отчет по лабораторной работе должен содержать:

а) титульный лист;

б) условие задания;

в) текст программ на языке Ассемблера;

г) ответы на контрольные вопросы.

5. Контрольные вопросы

1. Какие шестнадцатеричные значения строки и столбца соответствуют нижнему правому углу экрана?

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

3. Какая информация будет находиться в регистре AL после нажатии функциональной клавиши?

Список литературы

  1. Абель П. Ассемблер. Язык и программирование для IBM PC: пер с англ. – К.: Век+, 2005. – 736 с.

  2. Рудольф М. Ассемблер на примерах. Базовый курс – М.: Наука и техника, 2005. – 240 с.

  3. Пильщиков В. Assembler. Программирование на языке Ассемблера IBM PC – М.: Диалог-МИФИ, 2005. – 288 с.

  4. Финогенов К. Г. Основы языка Ассемблера. – М.: Радио и связь, 2000. – 288 с.

  5. Голубь Н.Г. Искусство программирования на Ассемблере Platinum Edition (3 изд.) –М.: Диасофт-ЮП, 2005. – 832 с.

ПРИЛОЖЕНИЕ 1

Программа debug

DOS-программу DEBUG можно применять для написания совсем небольших программ, для отладки программ, или для просмотра содержимого файла либо памяти. Удобнее всего запустить DEBUG в отдельном окне. Пользуясь командами из системного меню окна, можно копировать фрагменты его содержимого в буфер обмена или вставлять текст из буфера в окно.

Для запуска DEBUG из командной строки наберите DEBUG и нажмите <Enter>. DEBUG загрузится с диска в память. Когда символ-приглашение появится на экране, DEBUG будет готов воспринимать команды (приглашение представляет собой дефис).

DEBUG можно запускать двумя способами:

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

2. DEBUG <имя файла>, чтобы отладить или модифицировать существующую программу.

Загрузчик программ размещает DEBUG в памяти, и DEBUG выводит дефис (–) в качестве приглашения. Регистры CS, DS, ES и SS инициализированы адресом 256-байтового (100Н) префикса сегмента программы (PSP), а рабочая область в памяти начинается с адреса PSP + 100Н. DEBUG отображает значения флагов следующим образом:

Перепол-нение

OF

Направ-ление

F

Прерыва-ние

IF

Знак

SF

Нуль

ZF

Вспомог. перенос

AF

Четность

PF

Перенос

CF

1

0

OV

NV

DN

UP

EI

DI

NG

PL

ZR

NZ

AC

NA

PE

PO

CY

NC

Ссылка на память может задаваться в виде сегмент:смещение, например, DS:120, или в виде только смещения, например, 120. Можно также напрямую обращаться к адресам в памяти, например, 40:17, где 40[0]Н – адрес начала сегмента, а 17Н - смещение. Сегмент данных для программ типа .ЕХЕ начинается с адреса DS:0, а для программ типа .СОМ – с DS:100.

DEBUG воспринимает все вводимые числа как шестнадцатеричные, т.е. вводить завершающую букву Н не нужно. Клавиша F1 воспроизводит последнюю команду по одной букве за нажатие, a F3 – целиком. Кроме того, DEBUG не различает строчные и заглавные буквы.

Далее в алфавитном порядке перечислены команды DEBUG.

A (Assemble)

Транслирует ассемблерные команды в машинный код. Операция используется для написания и тестирования маленьких программ на ассемблере и для изучения небольших фрагментов кода. Адрес начала кода по умолчанию – CS:100H. Формат команды: а [адрес], где адрес по умолчанию – 100Н.

DEBUG поддерживает следующие возможности:

  • определение элементов данных в программах с помощью DB и DW;

  • операнд в квадратных скобках, например, [12Е], указывает адрес (смещение) в памяти;

  • оператор PTR можно использовать для указания байта или слова, например, INC BYTE PTR[12E].

Можно применять все виды косвенной адресации с использованием регистров, например, [BP+DI] или 25[ВХ].

Ниже приведен пример создания маленькой ассемблерной программы из пяти инструкций. Вводить нужно только инструкции; DEBUG указывает адрес сегмента кода (показанный здесь в виде хххх:) и смещения, начиная со 100Н:

А (или А 100) <Enter> ;Начать ввод с адреса

хххх:0100 MOV CX,[10D] <Enter> ;Прочитать в СХ значение из DS:10D хххх:0104 ADD CX,1A <Enter> ;Прибавить к содержимому СХ

;непосредственное значение

хххх:0107 MOV [10D],СХ <Enter> ;Поместить содержимое СХ в DS:10D хххх:010В JMP 100 <Enter> ;Вернуться к началу программы xxxx:010D DW 2500 <Enter> ;Определение элемента данных по

;адресу DS:10D

<Enter> ;Завершение ввода

С учетом размера PSP DEBUG устанавливает IP равным 100Н, и инструкции программы начинаются с этого адреса. Последнее нажатие <Enter> (два <Enter> подряд) указывает DEBUG, что ввод программы завершен. Теперь можно при необходимости использовать команды U (Unassemble) для просмотра машинного кода или Т (Trace) для наблюдения за выполнением программы.

Можно заменять любые введенные команды или элементы данных, при условии, что новые инструкции или элементы будут иметь ту же длину. Например, чтобы заменить инструкцию ADD, расположенную по адресу 104Н, на SUB, введите

А 104 <Enter>

хххх:0104 SUB CX,1A <Enter> <Enter>

При повторном исполнении программы значение в IP будет продолжать увеличиваться. Для занесения в IP значения 100Н используйте команду R (Register). Для выхода используйте команду Q.

С (Compare)

Сравнивает содержимое двух областей памяти. По умолчанию используется регистр DS. В команде можно указывать длину сравниваемых участков или диапазон адресов:

1. С <начальный_адрес_1> L<длина> <начальный_адрес_2>

Пример команды, сравнивающей 20Н байтов, начиная с адреса DS:050, с байтами, начинающимися с DS:200:

С 050 L20 200 ;Сравниваем 20Н байт

2. С <началъный_адрес_1> <конечный_адрес_1> <начальный_адрес_2>

Пример команды, сравнивающей байты от DS:050H до DS:070H с байтами, начиная с DS:200:

С 050 070 200 ;Сравниваем диапазоны

Операция выводит на дисплей адреса и содержимое несовпадающих байтов.

D (Display или Dump)

Выводит на экран содержимое области памяти в шестнадцатеричной и ASCII-формах. Регистр по умолчанию – DS. Эту команду также можно использовать, указывая длину или диапазон:

1. d [<начальный_адрес> [L<длина>]]. Можно указывать начальный адрес с необязательной длиной. Длина по умолчанию – 80Н (128) байт. Вот несколько примеров:

D 200 ;Вывести 80Н байт, начиная с адреса DS:200H

D ;Вывести 80Н байт, начиная с адреса конца

;поcледней выведенной области

D CS:150 ;Вывести 80Н байт, начиная с адреса CS:150H

D DS:20 L5 ;Вывести 5 байт, начиная с адреса DS:20H

2. D [началъный_адрес конечный_адрес] .

Пример:

D 300 32С ;Вывести байты, начиная с 300Н, и заканчивая 32СН

Е (Enter)

Позволяет вводить в память данные или инструкции машинного кода. Регистр по умолчанию – DS, формат команды – е <адрес> [<список>]. Команда предоставляет две возможности:

1. Заменять байты на указанные в списке, как показано ниже:

Е 105 13 ЗА 21 ;Ввести три байта, начиная с адреса DS:105H

Е CS:211 21 2А ;Ввести два байта, начиная с адреса CS:211H

Е 110 `anything` ;Ввести строку символов, начиная с адреса DS:110H

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

2. Последовательно редактировать байты. Введите адрес, где расположен байт, который вы хотите просмотреть:

Е 12С ;Просмотреть содержимое байта DS:12CH

Операция будет ожидать ввода с клавиатуры. Введите один или несколько байтов в шестнадцатеричной форме, разделяя их пробелами, начиная с DS:12CH.

F(Fill)

Заполняет область памяти значениями из списка. Регистр по умолчанию -DS. Команду можно использовать как с длиной, так и с диапазоном:

1. F <начальный_адрес> L<длина> '<данные>'.

Например:

F 210 L19 `Help!` ;Используем длину 19Н (25) байт

2. F <начальный_адрес> <конечный__адрес> '<данные>'.

Например:

F 210 229 ‘Help!’ ;Используем диапазон от 210Н до 229Н

Обе команды заполняют ячейки памяти, начиная с адреса DS:210H байтами, содержащими повторения строки “Help!”.

G (Go)

Выполняет отлаженную программу на машинном языке, вплоть до указанной точки останова (breakpoint). Обязательно убедитесь, что IР содержит корректный адрес для исследуемого участка кода (некорректный адрес может привести к непредсказуемым результатам). Кроме того, устанавливайте точки останова только в своих программах, а не в модулях программ операционной системы или BIOS. Программа будет при необходимости вызывать требуемые обработчики прерываний и останавливаться в ожидании, например, ввода с клавиатуры. Регистр по умолчанию – CS. Формат команды:

G [=<начальный_адрес>] <адрес_останова> [<адрес_останова> ...]

Начальный адрес указывать необязательно. Можно указывать до десяти точек останова. Команда G 11А требует выполнить программу, начиная с адреса, заданного в IР, и заканчивая адресом 11АН.

H (Hexadecimal)

Вычисляет сумму и разность двух шестнадцатеричных величин, указанных как н <значение_1> <значение_2>. Например, команда Н 14F 22 выведет в качестве результата 171 (сумму) и 12D (разность).

Соседние файлы в предмете Системное программное обеспечение