Архитектура ЭВМ. Архитектура
Скачать 392.83 Kb.
|
Преобразование исходного модуля программы в машинных кодах в исполняемый модуль типа COM 8. С помощью команды trans <имя файла>.txt ↵ запустите программу трансляции TRANS, которая преобразует коды ко- манд МП86, представленные в виде ASCII-символов, в последовательность двоичных кодов команд, образующих COM-файл программы. Выполнение и отладка исполняемого модуля программы c помощью турбоотладчика TD 9. С помощью команды td <имя файла>.com ↵ запустите отладчик TD для работы с созданным COM-файлом программы. Отладчик загрузит в память исполняемый модуль типа COM с адреса 100h, причем коды программы и данных разместятся в одном сегменте кода ем- костью 64Kбайт. После загрузки отладчик выдаст на экран монитора окно процессора CPU. 10. Нажав ENTER, снимите марку отладчика. На экране изобразится окно отладчика CPU, состоящее из 5 подокон: кодового сегмента, содер- жащего коды программы; регистров микропроцессора; регистров флажков; сегмента стека и сегмента данных. Клавишей F5 увеличите/уменьшите ок- но CPU. Двойной рамкой и находящимся в подокне маркером выделено активное подокно (или окно). Переход из одного подокна в другое произ- водится нажатием клавиши Tab или Shift-Tab. Можно перейти в подокно, нажимая Shift и одну из клавиш перемещения курсора. Находясь в подокне, можно, нажав Alt-F10, войти в локальное подменю и с помощью его команд изменить содержимое регистров памяти. Нажав F10, можно войти в главное меню отладчика и воспользоваться его коман- дами для управления выполнением программы. Выход из меню произво- дится клавишей Esc. 15 Ниже рассматриваются основные команды отладчика для отладки про- грамм с помощью окна процессора CPU. 11. Нажав клавишу Tab, перейдите в подокно регистров. Подведите мар- кер к регистру DX, введите код 30 и нажмите ENTER . Тем самым вы вве- ли в DX операнд N=0030h. (При вводе 16-ричных кодов необходимо, что- бы 1-й символ начинался с цифры, например 0FFFF.) 12. Перейдите в подокно сегмента данных. Нажав Alt-F10, вызовите для данного подокна локальное меню. Выберите в нем команду GOTO и нажмите ENTER. Далее введите с клавиатуры начальный адрес данных ds:500 ↵ . Убедитесь в том, что маркер выделяет в подокне памяти байт с адресом 500, а затем введите с клавиатуры коды 60 00 0F0 0FF ↵ . Тем са- мым вы ввели в память операнды K=+60 и R=-10. Можно вводить данные в память в формате слова. Для этого с помощью команды Ctrl-D войдите в подменю локального меню и задайте в нем фор- мат WORD – слово. Затем введите с клавиатуры необходимый операнд, например 60 по адресу 500. Отметим, что Ctrl-D – это активная клавиша команд Alt-F10; Display as. Далее при работе с окнами отладчика будем в основном использовать ак- тивные клавиши, нажимая Ctrl в сочетании с первой буквой команды ло- кального меню. 13. Перейдите в подокно кода. В нем изображаются дизассемблирован- ные команды выполняемой программы, причем текущая команда помеча- ется стрелкой. Для управления выполнением программы используют сле- дующие основные команды, вызываемые активными клавишами: F7 Выполнение одной команды F8 Выполнение одной команды с пропуском вызовов F9 Запуск программы в автоматическом режиме F4 Выполнение команд до точки останова Ctrl-F2 Установка программы в исходное состояние F2 Установка/отмена точки останова Нажимая последовательно F7, выполните программу по шагам до команды NOP. При этом следите за содержимым регистров МП и памяти, убедитесь в правильности полученного результата. 14. (Данный пункт выполнять необязательно). Нажав Ctrl-F2, установи- те программу в исходное состояние. Обратите внимание, что указатель от- мечает первую команду программы. Перезагрузите исходные данные (см. пп. 11-12). С помощью маркера выделите 3-ю команду программы и нажмите F2 – таким образом вы задали точку останова. Аналогичным об- разом установите точку останова на команде NOP. Для выполнения про- граммы до 1-й точки останова нажмите F9 (или F4). Далее выполните про- грамму по шагам, последовательно нажимая F7. 16 15. Нажав Ctrl-F2, установите программу снова в исходное состояние. Перезагрузите исходные данные (см. пп. 11-12). С помощью маркера и ко- манды F2 отметьте точки останова. Маркером выделите команду програм- мы ADD AX,0120 и замените ее с клавиатуры на команду ADD AX,0420 и нажмите ENTER. Тем самым вы установили так называемую “заплату”. Выполните модифицированную программу в пошаговом режиме. Работа с главным меню и окнами отладчика Ранее были рассмотрены основные команды отладчика, вызываемые активными клавишами. В общем случае управление отладкой можно про- изводить через главное меню отладчика. Это меню содержит позиции, ука- занные в верхней части экрана: File (файлы), View (просмотр), Run (вы- полнение) и другие. Вход в главное меню производится с помощью кла- виши F10 и выбора необходимой позиции. Вызов новых окон, например памяти (DUMP) или регистров (REGISTERS), производится через позицию View. 16. Выведите на экран окно памяти, для чего выполните команду F10; View; Dump; ENTER. Работа в этом окне аналогична подокну данных окна CPU. 17. Нажав Ctrl-F5, установите режим перемещения и изменения разме- ров текущего окна. Нажимая клавиши перемещения курсора, переместите окно. Этими же клавишами можно изменить размеры окна, если держать нажатой клавишу Shift. Завершается этот режим нажатием клавиши EN- TER. 18. Командой F10; View; Registers на экран окно регистров Registers. 19. Нажимая последовательно F6, можно перейти из одного окна в дру- гое. Двойной рамкой или находящимся в ней маркером выделяется актив- ное окно. Командой Alt-F3 текущее окно удаляется. Ошибочно удаленное окно можно восстановить командой Alt-F6. Удалите все окна, кроме окна CPU. 20. Для выхода из отладчика нажмите Alt-X. 21. Разработайте для заданного варианта программу вычисления выра- жения в машинных кодах МП86 и по аналогии с пп. 1-20 введите ее в ЭВМ и выполните. Исходные данные и результат представьте в ДК. 1.11. Содержание отчета 1. Программа вычисления заданного выражения с представлением ис- ходных данных в ДК. Распределение ячеек памяти для данных и програм- мы. 2. Трасса отлаженной программы. 17 Лабораторная работа 2 ФОРМАТЫ КОМАНД И РЕЖИМЫ АДРЕСАЦИИ МП i8086 2.1. Цель работы Изучение форматов команд и режимов адресации МП i8086, отработка навыков работы с отладчиком TD. 2.2. Форматы команд МП i8086 Полный перечень команд дается в приложении. Длина команд МП i8086 варьируется от одного до шести байт. В пер- вых (одном или двух) байтах команды находятся код операции КОП и ука- зание режима адресации. На рис. 2.1 приведен наиболее общий формат двухоперандной команды (3-й и 4-й байты необязательны). Второй байт команды называют еще постбайтом. 7 2 1 0 7 6 543 210 7 0 7 0 К О П DW mod reg r/m d i s p L d i s p H К О П команды Смещение Рис. 2.1. Формат двухоперандной команды В КОП имеются следующие однобайтные поля. Бит W определяет операцию с байтом (W=0) или словом (W=1). Бит D показывает, чем является регистр reg: операндом-источником (D=0) или операндом-получателем (D=1). Если на код операции команды отводится два байта (например, рис. 2.1), то во втором байте имеются двухбитное поле режима адресации mod и трехбитное поле r/m. В зависимости от значения mod поле r/m опре- деляет операнд в POHe МП, если mod =11, или – в памяти, если mod # 11. Для mod=11 адрес регистра МП, в котором размещен операнд, указы- вается полем r/m в соответствии с табл. 1.1. Если mod=11, а D=1, то общий формат двухоперандной команды (рис.2.1) трансформируется в двухбайтную команду типа “регистр – ре- гистр”. На рис. 1.7 приведены форматы таких команд: это команды MOV reg1,reg2; АDD reg1,reg2; SUB reg1,reg2. В них обозначены: reg1=reg; reg2=r/m. В качестве регистра-приемника выбран регистр reg, поэтому D=1. Если mod#1, то эффективный адрес ЕА операнда в памяти вычис- ляется в соответствии с табл. 2.1. 18 Таблица 2.1. Способы вычисления адреса ЕА операнда в памяти mod r/m 00 01 10 000 001 010 011 100 101 110 111 (BX)+(SI) (BX)+(DI) (BP)+(SI) (BP)+(DI) (SI) (DI) disp H,L (BX) (BX)+(SI)+disp L (BX)+(DI)+disp L (BP)+(SI)+disp L (BP)+(DI)+disp L (SI)+disp L (DI)+disp L (BP)+disp L (BX)+disp L (BX)+(SI)+disp H,L (BX)+(DI)+disp H,L (BP)+(SI)+disp H,L (BP)+(DI)+disp H,L (SI)+disp H,L (DI)+disp H,L (BP)+disp H,L (BX)+disp H,L Отметим, что для mod=00 и r/m=110 смещением disp H.L задается 16- битный эффективный адрес ЕА операнда в памяти. Если mod=01, то третий байт команды содержит 8-битное смещение dispL, которое при вычислении ЕА автоматически расширяется со знаком до 16 бит. Если mod=10, то 3-й и 4-й байты команды содержат 16-битное смещение disp H,L. В однооперандных командах с постбайтными режимами адресации отсутствует однобитное поле D, а на месте поля reg размещается расшире- ние поля КОП. Формат двухоперандной команды с непосредственным операндом по- казан на рис. 2.2. 7 2 1 0 7 6 5 3 2 1 0 7 0 7 0 7 0 7 0 К О П S W mod КОП r/m disp L disp H data L data H К О П команды Смещение Операнд-константа Рис. 2.2. Формат двухоперандной команды с непосредственным операндом Назначение полей mod и r/m в этой команде сохраняется таким же, как и для команды, приведенной на рис. 2.1 Бит S совместно с битом W (поле S:W) определяют размер непосред- ственного операнда: Х0 – один байт данных data L, S:W= 01 – два байта (слово) данных data H, data L, 11 – один байт данных data L, который расширяется до16 бит со знаком Операнд-константа является всегда источником. Микропроцессор i8086 имеет в своем составе команды специального формата, которые позволяют сократить постбайт в часто используемых командах. Это команды пересылки в регистр и операций с аккумулятором 19 АХ (или AL) и непосредственным операндом. На рис.1.7 приведены спе- циальные (укороченные) форматы команд: MOV reg,data ; MOV acc,[EA] ; ADD асc,data ; MOV [EA],acc ; SUB acc,data Следует отметить, что при трансляции ассемблерных команд ассем- блер всегда выбирает более короткий формат транслируемой команды. 2.3. Режимы адресации Большинство команд МП86, за исключением команд передачи це- почки байт, имеет тип “регистр – регистр”, “регистр – память” и “память – регистр”. Это означает, что его команда адресует максимум два операнда и что не допускается одновременная адресация двух ячеек памяти. Как видно из табл. 2.1, МП имеются все основные режимы адресации, характерные для современных процессоров: регистровая, непосредствен- ная, прямая (абсолютная), косвенная регистровая, базовая, индексная и не- которые их модификации. 1. РЕГИСТРОВАЯ АДРЕСАЦИЯ. Этот способ адресации кодируется в 1-м байте или постбайте команды и определяет, что операнд находится в одном из регистров МП. 2. НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ. Операнд содержится в са- мой команде и имеет длину 8 или 16 бит. С помощью команды (рис. 2.2) можно загрузить константу как в РОН, так и в память. Вместе с тем следу- ет отметить, что МП86 не имеет команды загрузки непосредственного операнда в сегментные регистры. 3. ПРЯМАЯ АДРЕСАЦИЯ. В команде содержится двухбайтный эф- фективный адрес ЕА операнда, размещенный вслед за 1-м байтом коман- ды (специальный укороченный формат) или за постбайтом, если mod=00, a r/m=110. На рис. 1.7 приведен ряд примеров кодирования команд с непосред- ственной и прямой адресацией данных для специальных (укороченных) форматов. Ниже, в табл. 2.2, даны примеры кодирования команд со стан- дартными форматами, приведенными на рис. 2.1 и 2.2, для регистровой, непосредственной и прямой адресации. Последовательность этих команд образует программу вычисления выражения M=K+N–R +120 (см. п. 1.7 ла- бораторной работы 1). 20 Таблица 2.2. Вариант программы вычисления выражения М=К +N –R+120 Адрес команды Код ко- манды Мнемоника Комментарий CS: 0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E 010F 0110 2B 16 02 05 03 16 00 05 81 C2 20 01 89 16 04 05 90 SUB DX,[0502H] ADD DX,[0500H] ADD DX,0120H MOV [0504H],DX NOP DX ← N – R DX ← N – R + K DX ← N – R + K +120 M ← DX Как видно, данная программа содержит меньшее число команд, одна- ко ее длина в числе байт одинакова с программой, приведенной в табл. 1.2 и реализующей ту же задачу (см. лаб. работу 1). 4. КОСВЕННАЯ РЕГИСТРОВАЯ АДРЕСАЦИЯ. Режим регистровой косвенной адресации задается в постбайте с помощью поля mod=00 и поля r/m=100, 101 или 111, определяющего адрес регистров SI, DI или ВХ, где хранится 16-битный эффективный адрес операнда. Пример 2.1. Команда MOV DX,[BX] пересылки в регистр DX содер- жимого ячейки сегмента данных, адрес которой указан в регистре BX Код команды Мнемоника Операция КОП DW 100010 1 1 00 010 111 mod DX r/m MOV DX,[BX] DX ← M[BX] Пример 2.2. Команда MOV [SI],AX 10001001 00000100 MOV [SI],AX M[SI] ← AX 21 5. БАЗОВАЯ АДРЕСАЦИЯ. При базовой адресации (называемой так- же адресацией по базе или адресацией типа “база + смещение”) эффектив- ный адрес операнда является суммой значений смещения и содержимого регистров ВХ или ВР: (BX) 8-битное смещение disp L EA= + (BP) 16-битное смещение disp H,L Напомним, что регистр базы ВР позволяет обращаться по умолчанию только к сегменту стека. Базовый регистр указывает на начало структуры, а требуемый элемент адресуется с помощью смещения (расстояния) от базы. Следующие команды эквивалентны: MOV АН,[ВХ+4]; MOV АН,4[BX]; MOV AH,[BX]+4. Любая из них реализует передачу в АН байта памяти с адресом EA, рав- ным сумме содержимого ВХ со смещением 4: AН ← М[ВХ] +4 6. ИНДЕКСНАЯ АДРЕСАЦИЯ. Эффективный адрес ЕА вычисляется как сумма: (DI) 8-битное смещение disp L EA= + (SI) 16-битное смещение disp H,L Смещение определяет фиксированный начальный адрес массива, а значение в DI (или SI) – номер элемента в массиве. Следующие команды эквивалентны: MOV BL,[10+SI]; MOV BL,10[SI]; MOV BL,10+[SI]. По существу режимы базовой и индексной адресации МП К1810 оди- наковы. Они задаются в постбайте полем mod=01, 10 для r/m=110, 111 (ба- зовая адресация) и для г/m=100, 101 (индексная адресация). Пример 2.3. Команда MOV BH,[10H+DI] Код команды Мнемоника Операция КОП DW 100010 1 0 01 110 101 mod BH r/m 00010000 MOV BH,[10H+DI] BH ← M[10+DI] 22 7. БАЗОВАЯ ИНДЕКСНАЯ АДРЕСАЦИЯ. Эффективный адрес равен сумме: (BX) (SI) 8-битное смещение disp L EA= + + (BP) (DI) 16-битное смещение dispH,L С помощью базовой индексной адресации возможно обращение к элементам двумерного массива. Приведем несколько примеров: MOV AX,[BX+DI+4]; ADD DX,[BX+SI+6]; ADD ВХ,[ВХ]+[DI+б]. 8. ОТНОСИТЕЛЬНАЯ АДРЕСАЦИЯ. Применяется в командах услов- ных и безусловных переходов для вычисления адреса ЕА команды, к кото- рой осуществляется переход. Формат команд коротких переходов с отно- сительной адресацией имеет вид: 7 0 7 0 К О П Смещение disp L Эффективный адрес ЕА вычисляется как сумма 8-битного смещения, находящегося в команде, и текущего значения указателя команд ЕА=(IР)+<8-битное смещение в ДК>. Следовательно, этот режим обеспе- чивает передачу управления в диапазоне -128 +127 байт oт текущей ко- манды. Адрес текущей команды IP=IP+2, так как все команды управления с относительной адресацией двухбайтные. Отрицательное смещение озна- чает переход назад. Смещениев команде представляют в дополнительном коде ДК. Пример 2.4. Код команды JNZ MM1 Адрес команды Код ко- манды Мнемоника Операция EA IP IP+2 0200 0201 0202 0203 0204 0205 0206 - 05 20 01 75 FA 90 MM1: ADD AX,1204 JNZ MM1 NOP ;IP ← (IP + 2) + FB ;если FZ=0 ;Следующая ;команда Чтобы определить ДК смещения dispL для команды JZN 200, необхо- димо вначале найти <Смещение dlsp L>=ЕА – (IP+2). 23 Для нашего примера <Смещение disp L>=200–(204+2)=–6, где ЕA=200 – эффективный адрес команды, к которой осуществляется переход (это команда с меткой MM1); (IP)=204 – это адрес команды перехода JNZ MM1. ДК[–6]=FА. 2.4. Программа сложения многобайтных BCD-чисел Программа (табл.2.3) реализует сложение многобайтных десятичных BCD-чисел из массивов с начальными адресами ADR1=500, ADR2=510. Сумма формируется с адреса ADR3=520. Длина массива 4 байта. Таблица 2.3. Программа сложения многобайтных BCD-чисел Адрес ко- манды Код ко- манды Мнемоника команды Операция CS:0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E 010F 0110 0111 0112 0113 0114 0115 0116 0117 0118 B9 04 00 BE 00 00 F8 8A 84 00 05 12 84 10 05 27 88 84 20 05 46 49 75 EF 90 MOV CX,0004H MOV SI,0000H CLC RR1: MOV AL,500H[SI] ADC AL,510H[SI] DAA MOV 520H[SI],AL INC SI DEC CX JNZ RR1 NOP ;CX ← 4 ;SI ← 0 ;CF ← 0 ;Сложение ;BCD-чисел ;Коррекция 24 Адреса данных Данные Комментарии DS: 0500 0501 0502 0503 0510 0511 0512 0513 0520 0521 0522 0523 37 21 79 25 02 66 98 56 39 87 77 82 X=25792137 Y=56986602 X+Y=82778739 2.5. Варианты заданий 1. Вычислить Z=2X+Y, где X, Y – многобайтные BCD-числа. Число байт 3 (варианты 1-10 повышенной сложности). 2. Вычислить Z=X+Y+R, где X, Y, R – многобайтные числа в ASCII- формате. Число байт 4. 3. Найти в массиве двухбайтных знаковых чисел максимальное число. Длина массива 16 байт. 4. Вычислить Z=X-2Y, где X, Y – многобайтные числа в ASCII-формате. Число байт 4. 5. Вычислить Z=X-Y-R, где X, Y, R – многобайтные числа. Число байт 4. 6. Найти в массиве двухбайтных знаковых чисел минимальное число. Длина массива 32 байта. 7. Дана матрица однобайтных чисел размером 4х5. Составить програм- му подсчета количества положительных элементов матрицы. 8. Дана матрица двухбайтных чисел размером 3х4. Составить програм- му подсчета количества отрицательных элементов матрицы. 9. Дано N произвольных чисел. Сформировать их в массивы отрица- тельных и положительныхчисел. 10. Дана матрица однобайтных чисел размером 4х5. Подсчитать число элементов, значения которых < 10. 11. Переслать содержимое одной области памяти в другую.Число слов в массиве 10. 12. Переслать содержимое одной области памяти в другую.Числобайт в массиве 12. 13. Сложить 8 двухбайтных чисел со знаком, размещенных в памяти. 14. Сложить 10 однобайтных чисел со знаком, размещенных в памяти. 15. Сложить 6 BCD-чисел, размещенных в памяти. |