Инфоурок / Информатика / Другие методич. материалы / Лабораторная работа по Системному программированию «Знакомство с программой разработки и отладки программ на языке Ассемблера Debug»
Обращаем Ваше внимание: Министерство образования и науки рекомендует в 2017/2018 учебном году включать в программы воспитания и социализации образовательные события, приуроченные к году экологии (2017 год объявлен годом экологии и особо охраняемых природных территорий в Российской Федерации).

Учителям 1-11 классов и воспитателям дошкольных ОУ вместе с ребятами рекомендуем принять участие в международном конкурсе «Законы экологии», приуроченном к году экологии. Участники конкурса проверят свои знания правил поведения на природе, узнают интересные факты о животных и растениях, занесённых в Красную книгу России. Все ученики будут награждены красочными наградными материалами, а учителя получат бесплатные свидетельства о подготовке участников и призёров международного конкурса.

ПРИЁМ ЗАЯВОК ТОЛЬКО ДО 21 ОКТЯБРЯ!

Конкурс "Законы экологии"

Лабораторная работа по Системному программированию «Знакомство с программой разработки и отладки программ на языке Ассемблера Debug»

Такого ещё не было!
Скидка 70% на курсы повышения квалификации

Количество мест со скидкой ограничено!
Обучение проходит заочно прямо на сайте проекта "Инфоурок"

(Лицензия на осуществление образовательной деятельности № 5201 выдана ООО "Инфоурок" 20 мая 2016 г. бессрочно).


Список курсов, на которые распространяется скидка 70%:

Курсы повышения квалификации (144 часа, 1800 рублей):

Курсы повышения квалификации (108 часов, 1500 рублей):

Курсы повышения квалификации (72 часа, 1200 рублей):
библиотека
материалов

Методические указания к выполнению лабораторных работ по МДК 01.01 «Системное программирование»

для специальности 09.02.03 «Программирование в компьютерных системах»

Лабораторная работа №1

Тема: «Знакомство с программой разработки и отладки программ на языке Ассемблера Debug»

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

Ход работы:

  1. Изучить теоретическую часть

  2. Выполнить задание в соответствии с указаниями

  3. Ответить на контрольные вопросы

  4. Предъявить преподавателю результаты работы: проект и исходный код

  5. Оформить отчет в соответствии с ходом работы

Теоретическая часть:

DEBUG – это системная программа, позволяющая выполнять просмотр и изменение состояний процессора и памяти компьютера, побайтное тестирование и побайтную обработку дисковых файлов, что обеспечивает возможность выполнения отлаживаемых программ небольшими порциями. При этом программа выполняется под "наблюдением" отладчика.

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

Запуск отладчика

Чтобы запустить отладчик, в командной строке Windows (Меню Пуск – Выполнить) вводится команда debug (см. рис. 1).

hello_html_m4381ddcb.png

Рис. 1. Диалог "Запуск программы debug"

После нажатия кнопки "OK" диалога запуска отладчик загружается в память машины и переходит в режим ожидания ввода команды.

Команды программы DEBUG

DEBUG – это программа, работающая по принципу "команда – действие", т.е., чтобы произвести некоторую операцию отладчик должен получить соответствующую команду. В качестве сигнала о готовности принять команду, отладчик посылает на экран стандартный запрос – дефис (-).

Для управления процессом отладки в DEBUG применяется набор команд, список которых можно получить, введя команду помощи (символ "Вопрос"). Окно отладчика, в котором выведен список поддерживаемых команд, приведено на рис. 2.


Рис. 2. Окно программы DEBUG

Общими замечаниями по вводу команд отладчика является следующее:

–  все команды начинаются с буквы, заглавной или строчной;

–  большая часть команд требует введения дополнительных параметров, часть из которых является необязательными;

–  если два подряд расположенных параметра являются числами, то они разделяются пробелом или запятой (в противном случае параметры можно не отделять один от другого);

–  все числа должны вводиться в шестнадцатеричном представлении;

–  некоторые команды принимают в качестве параметра адрес, который может вводиться в двух формах: полный логический адрес – два шестнадцатеричных числа, записанные через двоеточие (первое число – сегментная компонента логического адреса, второе число – смещение) и короткий адрес – одно шестнадцатеричное число (смещение);

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

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

–  (A)SSEMBLE – ассемблирование;

–  (U)NASSEMBLE – дизассемблирование;

–  (E)NTER – ввод данных в память;

–  (D)UMP – вывод содержимого участка памяти на экран;

–  (R)EGISTER – просмотр и изменение содержимого регистров;

–  (T)RACE – пошаговое выполнение программы;

–  (N)AME – задание имени файла программы;

–  (L)OAD – загрузки файла в память;

–  (W)RITE – запись области памяти в файл;

–  (Q)UIT – выход из отладчика.

Перечисленные команды представляют для нас наибольший интерес. Рассмотрим их подробнее.

Команда ассемблирования
(перевод мнемокода ассемблера в машинный код)

Отладчик DEBUG можно использовать для введения операторов ассемблера непосредственно в память машины. Команду ASSEMBLE можно использовать при составлении коротких программ на ассемблере, а также при внесении изменений в существующие программы. Эта команда позволяет вводить мнемокод ассемблера непосредственно в память, избавляя от необходимости транслировать (ассемблировать) программу. Вводимый текст не может включать метки перехода в чистом виде.

При введении команды, необходимо набрать "а" или "A" и, через пробел, необязательный параметр – адрес первой команды загружаемой программы. Если указан короткий адрес, то адрес сегмента выбирается из регистра CS. Если адрес не задан вообще, то машинный код будет помещаться в память, начиная с того места, где закончилась обработка предыдущей командой ASSEMBLE. Если после старта отладчика команда вводится в первый раз и в командной строке отсутствует начальный адрес, то размещение машинного кода производится с адреса CS:0100.

После введения команды ассемблирования на экране появляется начальный адрес. Это сигнал на введение первой команды программы. Если команда введена без ошибок, на экран выдается адрес следующей команды и отладчик опять переходит в режим ожидания. В случае ошибки отладчик обозначает ее месторасположение. Если введены все команды программы, то нажимается Enter – команда ASSEMBLE заканчивает работу и возвращает управление отладчику.

Пример ассемблирования небольшой программы:

-a 0976:0100

0976:0100 MOV AL,2A

0976:0102 MOV DI,0200

0976:0105 MOV CX,001D

0976:0108 CLD

0976:0109 REPNZ STOSB

0976:010B MOV AL,24

0976:010D STOSB

0976:010E PUSH ES

0976:010F POP DS

0976:0110 MOV DX,0200

0976:0113 MOV AH,09

0976:0115 INT 21

0976:0117 INT 20

0976:0119 <---- Нажимается Enter

-

Команда дизассемблирования
(перевод машинного кода в мнемокод ассемблера)

Команда UNASSEMBLE служит для перевода машинного кода на язык ассемблера. При введении команды необходимо набрать "u" или "U" и, через пробел, необязательные параметры – начальный адрес обрабатываемого кода, конечный адрес обрабатываемого кода или его размер.

В командной строке UNASSEMBLE можно не указывать начальный адрес обрабатываемого кода. Если указан короткий адрес, то адрес сегмента выбирается из регистра CS. Если адрес не задан вообще, то машинный код обрабатывается с того места, где закончилась обработка предыдущей командой UNASSEMBLE. Если после старта отладчика команда вводится в первый раз и в командной строке отсутствует начальный адрес, то обработка машинного кода производится с адреса CS:0100.

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

Другой вариант задания обрабатываемого участка памяти – задание его начального адреса и размера. Чтобы отличить размер от короткого конечного адреса перед ним вводится символ "L".

Если размер участка памяти, обрабатываемой командой UNASSEMBLE, не определен, то по умолчанию длина обрабатываемого участка равна 32 байтам.

Результатом выполнения команды дизассемблирования является листинг программы, сгруппированный в три колонки. В листинге слева (первая колонка) указывается полный логический адрес команды. Затем (вторая колонка) – значение составляющих команду байтов в машинном коде. В третьей колонке находится соответствующая этому коду инструкция ассемблера.

Пример дизассемблирования небольшой программы, введенной в предыдущем примере:

-u CS:0100 L19

0976:0100 B02A MOV AL,2A

0976:0102 BF0002 MOV DI,0200

0976:0105 B91D00 MOV CX,001D

0976:0108 FC CLD

0976:0109 F2 REPNZ

0976:010A AA STOSB

0976:010B B024 MOV AL,24

0976:010D AA STOSB

0976:010E 06 PUSH ES

0976:010F 1F POP DS

0976:0110 BA0002 MOV DX,0200

0976:0113 B409 MOV AH,09

0976:0115 CD21 INT 21

0976:0117 CD20 INT 20

-

Команда ввода данных в память

Ввод данных осуществляется с помощью команды ENTER. Эта команда позволяет побайтно корректировать содержимое памяти. Команда состоит из буквы e (или E) и адреса первого байта корректируемого блока. Если указан короткий адрес, то адрес сегмента выбирается в регистре DS.

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

Проиллюстрируем работу ENTER на следующем примере:

-e DS:0000 20 2A 44 41 54 41 20 'IS' 20 48 45 52 45 2A 20

Команда вводит 16 значений. Данные последовательно заполняют память (побайтно), начиная с адреса DS:0000. Четырнадцать байтов занимают числа в шестнадцатеричном формате, два байта отводятся под символьную константу 'IS'.

Команда ENTER может использоваться для отображения и, в случае необходимости, корректировки значения конкретного байта. В этом случае команда состоит из буквы e (или E) и следующего за ней адреса. При введении команды на экране появляется адрес байта и его значение:

-e DS:0000

0958:0000 20.

При нажатии на клавишу пробела на экране появляется значение следующего байта:

-e DS:0000

0958:0000 20. 2A.

Значение байта можно изменить. Для этого вводится новое шестнадцатеричное число. Однако символьные переменные в этом случае вводить нельзя.

Чтобы завершить выполнение команды, нажимается Enter. Появление дефиса (-) – стандартного запроса отладчика, свидетельствует о его готовности принять следующую команду.

Команда вывода содержимого участка памяти на экран

Команда DUMP (d или D) служит для отображения на экране содержимого участка памяти. Полученный кусочек памяти – дамп, представляет собой последовательность значений байтов в шестнадцатеричном представлении, а также – в коде ASCII:

-d

0958:0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0958:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0958:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0958:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0958:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0958:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0958:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0958:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

└─────┘└──────────────────────────────┘└─────┘

Адрес Значения в шестнадцатеричном виде, в виде символов

Числа в первом столбце, разделенные двоеточием – это полный логический адрес памяти, следующие 16 столбцов – значения, последовательно содержащиеся в памяти, начиная с этого адреса (в шестнадцатеричном виде), и, наконец, строка из 16 символов – символьное представление этих значений.

Значения, не имеющие символьного представления в коде ASCII, обозначаются символом "точка". В рассмотренном примере изображены только точки, поскольку в коде ASCII не существует печатных символов со значением 00. Дамп отображает содержимое 128 последовательно расположенных байтов. В приведенном выше примере начальный адрес дампа – 0958:0100, конечный – 0958:017F.

Если вводить команду "d" не указывая параметров, DEBUG будет последовательно выводить по 128 байтов памяти. То есть начальный адрес дампа будет на единицу превышать конечный адрес дампа, полученного при введении предыдущей команды "d". Если команда "d" вводится первоначально, то дамп выводится, начиная с адреса, по которому был загружен обрабатываемый файл.

Команда DUMP может использоваться с параметрами, которые задают начальный адрес дампа и его размер. Использование параметров аналогично использованию параметров в команде UNASSEMBLE. За тем исключением, что, если начальный адрес дампа задан в коротком формате, то сегментная компонента адреса выбирается из регистра DS.

Команда просмотра и изменения содержимого регистров

Команда REGISTER (r или R) выводит на экран и корректирует значения регистров и флагов состояния процессора. Эта команда также выдает информацию о следующей выполняемой команде:

-r

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0958 ES=0958 SS=0958 CS=0958 IP=0100 NV UP DI PL NZ NA PO NC

0958:0100 0000 ADD [BX+SI],AL DS:0000=CD

-

С помощью "r" можно изменить значение регистра. В этом случае в командной строке указывается его имя. Значение регистра выводится на экран. Теперь можно вводить новое число. Чтобы сохранить старое значение регистра, нажмите Enter.

-r CX

CX 0000

:245D

-r

AX=0000 BX=0000 CX=245D DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0958 ES=0958 SS=0958 CS=0958 IP=0100 NV UP DI PL NZ NA PO NC

0958:0100 0000 ADD [BX+SI],AL DS:0000=CD

-

Команда "rf" выводит на экран флаги состояния процессора. Получив значения флагов, их можно изменить. Для этого вводится одно или несколько новых значений.

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

Таблица 1

Мнемонические обозначения состояний флагов


Флаг

Установлен

Сброшен

Переполнение (есть/нет)

OV

NV

Направления (увеличение/уменьшение)

DN

UP

Прерывания (разрешение/запрещение)

EI

DI

Знака (минус/плюс)

NG

PL

Нуля (да/нет)

ZR

NZ

Дополнительного переноса (да/нет)

AC

NA

Паритета (чет/нечет)

PE

PO

Переноса (да/нет)

CY

NC


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

-rf

NV UP DI PL NZ NA PO NC -OV NG CY <- Подчеркнутое вводит пользователь

-r

AX=0000 BX=0000 CX=245D DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0958 ES=0958 SS=0958 CS=0958 IP=0100 OV UP DI NG NZ NA PO CY

0958:0100 CD20 INT 20

-

Команда пошагового выполнения программы

Команда TRACE (t или T) – трассировка осуществляет пошаговое выполнение программы в машинном коде. При трассировке после выполнения каждой команды производится останов работы программы и на экран выводятся регистры и флаги состояния процессора. Полученная картинка аналогична картинке, получаемой с помощью команды REGISTER. Разница заключается только в том, что при введении TRACE перед появлением картинки, выполняется одна команда отлаживаемой программы.

Проиллюстрируем работу TRACE на примере нашей программы. Если она не загружена в память, то запустим DEBUG и введем:

-e CS:0100 B0 2A BF 00 02 B9 1D 00 FC F2 AA B0 24

-e CS:010D AA 06 1F BA 00 02 B4 09 CD 21 CD 20

-

Чтобы узнать адрес программы, введем команду REGISTER:

-r

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0976 ES=0976 SS=0976 CS=0976 IP=0100 NV UP DI PL NZ NA PO NC

0976:0100 B001 MOV AL,2A

-

При введении "t" выполняется команда по адресу CS:IP. После этого на экран выводятся регистры и флаги состояния:

-t

AX=002A BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0976 ES=0976 SS=0976 CS=0976 IP=0102 NV UP DI PL NZ NA PO NC

0976:0102 BF0002 MOV DI,0200

-t

AX=002A BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0200

DS=0976 ES=0976 SS=0976 CS=0976 IP=0105 NV UP DI PL NZ NA PO NC

0976:0105 B91D00 MOV CX,001D

-

В командной строке TRACE можно указать адрес выполняемой команды. В этом случае после t набирается знак равенства (=) и нужный адрес. Если указан короткий адрес, то адрес сегмента выбирается из регистра CS:

-t=0100

AX=002A BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0200

DS=0976 ES=0976 SS=0976 CS=0976 IP=0102 NV UP DI PL NZ NA PO NC

0976:0102 BF0002 MOV DI,0200

-

В этом случае выполнена команда по адресу CS:0100. Адрес следующей команды находится в регистрах CS:IP. Он равен 0976:0102.

Одной командой TRACE можно одновременно трассировать несколько команд отлаживаемой программы. Для этого при введении "t" просто указывается их количество. После выполнения каждой команды на экране появляется картинка с содержимым регистров и флагов состояния. При заполнении экрана новые данные выводятся в нижней его части, сдвигая данные в верхней части за пределы экрана. Чтобы остановить движение данных вдоль экрана, нажимаются клавиши Ctrl-NumLock. Чтобы возобновить движение, нажимается любая клавиша.

При нажатии Ctrl-C трассирование прекращается и на экране появляется стандартный запрос отладчика.

Пример:

-t6

AX=002A BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0200

DS=0976 ES=0976 SS=0976 CS=0958 IP=0105 NV UP DI PL NZ NA PO NC

0976:0105 B91D00 MOV CX,001D


AX=002A BX=0000 CX=001D DX=0000 SP=FFEE BP=0000 SI=0000 DI=0200

DS=0976 ES=0976 SS=0976 CS=0958 IP=0108 NV UP DI PL NZ NA PO NC

0976:0108 FC CLD


AX=002A BX=0000 CX=001D DX=0000 SP=FFEE BP=0000 SI=0000 DI=0200

DS=0976 ES=0976 SS=0976 CS=0958 IP=0109 NV UP DI PL NZ NA PO NC

0976:0109 F2 REPNZ

0976:010A AA STOSB


AX=002A BX=0000 CX=001C DX=0000 SP=FFEE BP=0000 SI=0000 DI=0201

DS=0976 ES=0976 SS=0976 CS=0958 IP=0109 NV UP DI PL NZ NA PO NC

0976:0109 F2 REPNZ

0976:010A AA STOSB


AX=002A BX=0000 CX=001B DX=0000 SP=FFEE BP=0000 SI=0000 DI=0202

DS=0976 ES=0976 SS=0976 CS=0958 IP=0109 NV UP DI PL NZ NA PO NC

0976:0109 F2 REPNZ

0976:010A AA STOSB


AX=002A BX=0000 CX=001A DX=0000 SP=FFEE BP=0000 SI=0000 DI=0203

DS=0976 ES=0976 SS=0976 CS=0958 IP=0109 NV UP DI PL NZ NA PO NC

0976:0109 F2 REPNZ

0976:010A AA STOSB

-

Команда задания имени файла программы

Команда NAME (n или N) присваивает имя обрабатываемому файлу. Затем этот файл загружается в память командой LOAD или записывается на диск командой WRITE. (LOAD и WRITE рассматриваются ниже.)

Чтобы идентифицировать файл, наберите "n" и, через пробел – имя файла. Воспользуемся NAME, чтобы присвоить нашей программе имя "mytest.pro":

-n mytest.pro

Команда загрузки файла в память

Загрузка файла в память осуществляется, если в командной строке DEBUG указать имя файла. Другой способ – использование команды LOAD (l или L).

При использовании команды LOAD необходимо специфицировать файл с помощью команды NAME.

В командной строке LOAD можно указать начальный адрес, по которому загружается файл. Если указан короткий адрес, то адрес сегмента выбирается из регистра CS. При отсутствии начального адреса, загрузка производится по адресу CS:0100.

После загрузки отладчик запоминает количество занятой файлом памяти (в байтах) в регистрах BX (старшее слово) и CX (младшее слово).

К примеру, загрузим в память файл "mytest.pro" по адресу CS:0100:

-n mytest.pro

-L

-r

AX=0000 BX=0000 CX=00CF DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0958 ES=0958 SS=0958 CS=0958 IP=0100 NV UP DI PL NZ NA PO NC

0958:0100 2A2A SUB CH,[BP+SI] SS:0000=CD

-

В регистрах BX и CX находится значение 207 (000000CF). Это значит, что файл занял 207 байт. Тот же результат можно получить при введении спецификации файла в командной строке команды старта отладчика ("debug mytest.pro").

Команда записи области памяти в файл

Команда WRITE (w или W) переписывает на диск данные, выбирая их из памяти. При этом спецификация создаваемого файла должна задаваться с помощью команды NAME.

Перед введением команды WRITE в регистры BX и CX записывается размер занимаемой файлом памяти в байтах (шестнадцатеричное число, занимающее 4 байта). Поэтому перед записью необходимо проверить содержимое этих регистров (с помощью REGISTER).

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

Если начальный адрес не указан, то запись производится, начиная с адреса CS:0100.

Команда выхода из отладчика

Чтобы выйти из отладчика и передать управление операционной системе, на его стандартный запрос вводится команда q:

-q


Задание 1. Изучить основные команды, выполнив все примеры (синего цвета).



Задание 2. В соответствии со своим вариантом выполнить задание в debug и проверить результат в ячейках.


  1. MOV BP,200

  2. MOV BP,30

  3. MOV DI,AX

  4. MOV BP,AX

  5. MOV SI,–20

  6. MOV BX,AX

  7. MOV DI,18

  8. MOV SI,AX

  9. MOV SI,40

  10. MOV AX,120



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

  1. Назначение программы DEBUG?

  2. Что означает дизассемблирование?

  3. Какие режимы работы процессора вы знаете?

  4. Как записывается команда ассемблирования?

  5. Какая команда служит для отображения на экране содержимого участка памяти?

  6. Какая команда переписывает на диск данные, выбирая их из памяти?



Самые низкие цены на курсы переподготовки

Специально для учителей, воспитателей и других работников системы образования действуют 50% скидки при обучении на курсах профессиональной переподготовки.

После окончания обучения выдаётся диплом о профессиональной переподготовке установленного образца с присвоением квалификации (признаётся при прохождении аттестации по всей России).

Обучение проходит заочно прямо на сайте проекта "Инфоурок", но в дипломе форма обучения не указывается.

Начало обучения ближайшей группы: 25 октября. Оплата возможна в беспроцентную рассрочку (10% в начале обучения и 90% в конце обучения)!

Подайте заявку на интересующий Вас курс сейчас: https://infourok.ru

Общая информация

Номер материала: ДБ-236173

Похожие материалы