- •Методические указания к выполнению лабораторной работы 2
- •Содержимае экрана программы td.Exe сначала в первом, а затем в последнем циклах программы a1.Exe после исполнения 12-той (двенадцатой) команды. Опишите все найденные Вами различия
- •Ответы на контрольные вопросы и выполнение всех заданий п. 3.
- •Архитектура и программирование реального режима микропроцессоров фирмы Intel: Уч. Пособие /Сост. Т.К.Щемелева; Перм. Техн. Ун-т. Пермь,2001. 96 c.
Методические указания к выполнению лабораторной работы 2
Тема: Изучение системы команд языка Ассемблер для IBM PC (2 часа).
Аппаратно-программное обеспечение работы: IBM PC - совместимый компьютер, ОС WINDOWS или MS DOS, программа-отладчик td.exe, исполняемый файл учебной программы a1.exe.
1. Подготовка к работе.
1.1. Повторить по установочной лекции, темам Учебного пособия / 1/ и лекциям 5 и 6:
-
Сегментацию памяти для процессоров IBM PC – тема 3 /1/.
-
Регистры данных и адресов: имена, разрядность, назначение - тема 3 /1/..
-
Типы сегментов памяти, адресацию сегментов и элементов в них - тема 3 /1/.
-
Взаимосвязь между типами сегментов и адресными регистрами тема - 3 /1/..
-
Способы адресации операндов в командах языка Assembler - тема 5 /1/.
-
Основные команды языка Assembler для IBM PC - тема 6 /1/.
-
Повторить Инструкцию по работе с программой – отладчиком TD (см. файл с тем же именем).
-
Порядок выполнения работы:
-
Запустите отладчик TD (файл td.exe) с загрузкой в его память учебной программы a1.exe. Можно запустить отладчик TD (td.exe) из MS DOS или WINDOWS не загружая файл a1.exe, но в этом случае в меню уже запущенной программы td.exe надо через опцию OPEN найти и открыть a1.exe
-
Вспомнить элементы рабочего экрана программы- отладчика td.exe на примере программы a1.exe.
-
Выполните следующие задания с загруженной в память TD программой a1.exe, помня, что все изменения, вводимые в ячейки и регистры, сохраняются лишь на один прогон программы. Так что не бойтесь экспериментировать с содержимым окон TD!
-
Найдите выделенную (текущую) команду в сегменте кодов окна CPU.
-
-
Определите в h-кодах полные указатели на сегмент кодов, сегмент данных, сегмент стека программы a1.exe, используя окно регистров и окно CPU с текстом программы на языке Assembler.
-
Определите в h-кодах и b-кодах содержимое ячейки памяти по адресу CS:0005h. Указать команду, включающую этот байт.
-
Определите полный указатель седьмой команды программы и h-код ее инструкции.
-
Укажите в h-кодах и b-кодах содержимое регистров DX на начало трассировки.
-
Объясните,какое значение имеют флаги S, C, P, Z и почему.
-
Объясните, на сегмент с каким адресом указывают содержимое регистров DS и ES до начала трассировки?
-
Определите, содержимое какого сегмента ( его тип и адрес) выводится в нижнее окно памяти до начала трассировки?
-
Изучите текст программы а1.asm, выведенный в окне CPU TD. (этот текст приведен в методичке ниже). Постарайтесь понять смысл программы. Но даже если не все поймете здесь, выполнение последующих действий с TD нацелено именно на изучение каждой команды.
-
Исполните в TD программу a1.exe в режиме трассировки с целью уяснения алгоритма исполнения каждой команды:
2.5.1. Сначала исполните только фрагмент программы для сохранения в стеке нужного ОС полного указателя на начало EXE-файла программы и загрузки сегментных регистров адресами сегментов текущей программы - это 5 первых команд. Для выполнения каждой команды нажимать клавишу [F7], После исполнения первых 5-ти команд выведите в нижнее окно рабочего экрана программы td.exe содержимое сегмента данных с адресом сегмента, указанном в регистре DS. В этом сегменте находятся исходные данные программы a1.exe.. Найдите в окне исходные данные программы. Переведите эти данные в h-коды и b-коды. Определить их ASCII- коды по таблице в Теме 1 Уч. пособия.
-
Вернитесь в окно CPU TD и исполните программу до конца в режиме трассировки. Последней должна быть команда возврата для ОС - ret или retf.
При покомандном прогоне программы научитесь выполнять анализ команды по следующему алгоритму:
-
определить для текущей (выделенной подсветкой) команды код операции, ее исходные данные и ожидаемый результат еще до исполнения команды (до нажатия клавиши [F7]. Если один из операндов размещен в памяти (сегменте), вывести на экран в окно памяти TD содержимое требуемых ячеек и убедиться в том, что исходные данные корректны.;
-
исполнить текущую команду по [F7].
-
найти регистры или ячейки с результатом выполнения команды. Для этого если результат размещен в памяти (сегменте), после исполнения команды вывести в окно памяти TD содержимое требуемого сегмента. и в окнах TD и сравнивая исходные данные результатом уже после исполнения.
-
сравнить для каждой команды ожидаемый и фактический результаты ее исполнения. При расхождении ожидаемого и фактического результата исполнения команды надо подумать над ситуацией. Помните, что регистры, используемые командой, выделяются цветом (обычно белым). Это подсказка для определения ресурсов процессора и памяти, используемых командой.
2.5.3. Научитесь описывать (устно и письменно) результаты исполнения команды в терминах программистской модели компьютера (содержимого регистров микропроцессора и ячеек памяти). Все числовые значения – в H –кодах.
Ниже дан пример описания команды ADD AH,[BX]. Далее слова: “содержимое регистра” и “содержимое ячейки в сегменте” –опускаются, вместо них –только имена регистров и полные указатели ячеек). Символ «→» (стрелка) будет обозначать пересылку (перемещение, загрузку).
Итак, команда ADD AH,[BX] размещена в сегменте кодов по адресу 5620:0011.
1) выполняемая операция – сложение: AH + DS:[BX] → AН. Т. е. первый операнд размещен регистре AH, поэтому он имеет формат байта, второй – в ячейке сегмента данных с полным указателем в DS:[BX]. Сумма по умолчанию сохраняется в регистре AH.
2)до исполнения команды:
например,
значение 08h → AH
0010h → BX
5621h → DS
12h → 5621:0010
3)после исполнения команды:
Т.к. сумма (08h+12h=1аh), то 1AH → AH (в этом примере не путать имя регистра и 16-ричное значение 1А).
0010 в BX
5621h останется в DS
12h →5621: 0010
CS не измениться, но т.к. команда имеет двухбайтовый формат, то 5620:13h → CS: IP
-
Вернитесь на начало программы a1.exe не выходя из TD, используя для этого меню FILE – OPEN. Прогоните программу в том же режиме трассировки при необходимости еще несколько раз и выполните анализ нескольких команд. Теперь вы должны понять назначение программы a1.exe. Докажите это: сформулируйте текст задания на программу.
-
Вновь вернитесь на начало программы a1.exe через меню FILE – OPEN. Прогоните программу в том же режиме трассировки и приведите экран программы TD.exe сначала в первом, а затем в последнем циклах программы a1.exe после исполнения 12-той (двенадцатой) команды. Опишите все найденные Вами различия.
-
Выделите последнюю команду (ret или retf) программы a1.exe и исполните программу без трассировки, т.е. по одному нажатию клавиши [F9]. Найдите или выведите в нижнее окно рабочего экрана программы td.exe результат работы программы как новое одержимое сегмента данных. Сделайте выводы о корректности работы программы.
-
Выполните полный письменный анализ одной команды по алгоритму, приведенному в п. 2.5.3. настоящей лаб. работы.. Номер по порядку команды для анализа в файле a1.exe (номер варианта задания) выбрать равным порядкомому номеру студента в журнале группы - от первого до пятнадцатого (15) включительно. Студенты, имеющие номера в журнале, начиная с шестнадцатого (16), берут для анализа команды, начиная с предпоследней, т.е. с команды loop again и далее - назад, к началу программы. Например, студент с номером 17 берет команду inc di, а с с номером 18 - inc bx.
