Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторые работы / Метод указ к лаб 2-Орг-я ЭВМ.doc
Скачиваний:
28
Добавлен:
10.12.2013
Размер:
89.09 Кб
Скачать

Методические указания к выполнению лабораторной работы 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/.

    1. Повторить Инструкцию по работе с программой – отладчиком TD (см. файл с тем же именем).

  1. Порядок выполнения работы:

    1. Запустите отладчик TD (файл td.exe) с загрузкой в его память учебной программы a1.exe. Можно запустить отладчик TD (td.exe) из MS DOS или WINDOWS не загружая файл a1.exe, но в этом случае в меню уже запущенной программы td.exe надо через опцию OPEN найти и открыть a1.exe

    2. Вспомнить элементы рабочего экрана программы- отладчика td.exe на примере программы a1.exe.

    3. Выполните следующие задания с загруженной в память TD программой a1.exe, помня, что все изменения, вводимые в ячейки и регистры, сохраняются лишь на один прогон программы. Так что не бойтесь экспериментировать с содержимым окон TD!

      1. Найдите выделенную (текущую) команду в сегменте кодов окна CPU.

      1. Определите в h-кодах полные указатели на сегмент кодов, сегмент данных, сегмент стека программы a1.exe, используя окно регистров и окно CPU с текстом программы на языке Assembler.

      2. Определите в h-кодах и b-кодах содержимое ячейки памяти по адресу CS:0005h. Указать команду, включающую этот байт.

      3. Определите полный указатель седьмой команды программы и h-код ее инструкции.

      4. Укажите в h-кодах и b-кодах содержимое регистров DX на начало трассировки.

      5. Объясните,какое значение имеют флаги S, C, P, Z и почему.

      6. Объясните, на сегмент с каким адресом указывают содержимое регистров DS и ES до начала трассировки?

      7. Определите, содержимое какого сегмента ( его тип и адрес) выводится в нижнее окно памяти до начала трассировки?

    1. Изучите текст программы а1.asm, выведенный в окне CPU TD. (этот текст приведен в методичке ниже). Постарайтесь понять смысл программы. Но даже если не все поймете здесь, выполнение последующих действий с TD нацелено именно на изучение каждой команды.

    1. Исполните в TD программу a1.exe в режиме трассировки с целью уяснения алгоритма исполнения каждой команды:

2.5.1. Сначала исполните только фрагмент программы для сохранения в стеке нужного ОС полного указателя на начало EXE-файла программы и загрузки сегментных регистров адресами сегментов текущей программы - это 5 первых команд. Для выполнения каждой команды нажимать клавишу [F7], После исполнения первых 5-ти команд выведите в нижнее окно рабочего экрана программы td.exe содержимое сегмента данных с адресом сегмента, указанном в регистре DS. В этом сегменте находятся исходные данные программы a1.exe.. Найдите в окне исходные данные программы. Переведите эти данные в h-коды и b-коды. Определить их ASCII- коды по таблице в Теме 1 Уч. пособия.

      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

    1. Вернитесь на начало программы a1.exe не выходя из TD, используя для этого меню FILEOPEN. Прогоните программу в том же режиме трассировки при необходимости еще несколько раз и выполните анализ нескольких команд. Теперь вы должны понять назначение программы a1.exe. Докажите это: сформулируйте текст задания на программу.

    2. Вновь вернитесь на начало программы a1.exe через меню FILEOPEN. Прогоните программу в том же режиме трассировки и приведите экран программы TD.exe сначала в первом, а затем в последнем циклах программы a1.exe после исполнения 12-той (двенадцатой) команды. Опишите все найденные Вами различия.

    3. Выделите последнюю команду (ret или retf) программы a1.exe и исполните программу без трассировки, т.е. по одному нажатию клавиши [F9]. Найдите или выведите в нижнее окно рабочего экрана программы td.exe результат работы программы как новое одержимое сегмента данных. Сделайте выводы о корректности работы программы.

    4. Выполните полный письменный анализ одной команды по алгоритму, приведенному в п. 2.5.3. настоящей лаб. работы.. Номер по порядку команды для анализа в файле a1.exe (номер варианта задания) выбрать равным порядкомому номеру студента в журнале группы - от первого до пятнадцатого (15) включительно. Студенты, имеющие номера в журнале, начиная с шестнадцатого (16), берут для анализа команды, начиная с предпоследней, т.е. с команды loop again и далее - назад, к началу программы. Например, студент с номером 17 берет команду inc di, а с с номером 18 - inc bx.