- •Содержание
- •Введение
- •Варианты заданий:
- •Лабораторная работа №2 Вариантыпример отчетак содержанию
- •Варианты заданий:
- •Лабораторная работа №3 Вариантыпример отчетак содержанию
- •Варианты заданий к лабораторной работе №3
- •Лабораторная работа №4 Вариантыпример отчетак содержанию
- •Варианты заданий лабораторной работы №4
- •41. В прямоугольной матрице обменять первый столбец с последним.
- •Оценка результатов практикик содержанию
- •Рекомендованная литература
- •Отладка программы в среде отладчикаTd к содержанию
- •Разбор внутреннего представления командк содержанию
- •Примеры разбора команд
- •1. Команды с регистровой адресацией
- •2.Команды с прямой адресацией
- •3. Арифметические команды с непосредственной адресацией
- •4. Команда mov с непосредственной адресацией
- •5. Команды с использованием аккумулятора
- •6. Команды условного перехода (с относительной адресацией)
- •7. Команды безусловного перехода (с относительной адресацией)
- •8. Команда вызова подпрограммы (с относительной адресацией)
- •9. Команда завершения цикла (с относительной адресацией)
- •10. Команды с косвенной адресацией
- •Міністерство освіти і науки
- •Пример отчета по лабораторной работе №1к лаб. Раб.№1
- •Пример отчета по лабораторной работе №2к лаб. Раб.№2
- •Пример отчета по лабораторной работе №3к лаб. Раб.№3
- •Пример отчета по лабораторной работе №4к лаб. Раб. №4
Разбор внутреннего представления командк содержанию
Общая структура двухоперандных команд с прямой, регистровой и косвенной адресацией:
7 0 7 6 5 3 2 0
┌────────────┬───┬───┐ ┌─────┼─────┼─────┐ ┌ ─ ─ ┐ ┌ ─ ─ ┐
│ КОП │ d │ w │ │ mod │ reg │ r/m │ displ disph
└────────────┴─┬─┴─┬─┘ └──┬──┴───┬─┴─┬───┘ └ ─ ─ ┘ └ ─ ─ ┘
бит направления │ │ режим │ │ │ смещение адреса
────────────────┘ │ ──────┘ │ │
бит слова │ поле определения │ │ поле определения
───────────┘ второго операнда │ │ первого операнда
─────────────────┘ └───────────────────
КОР – код операции
W=1, если операнд слово
W=0, если байт
d=1, - передача результата в МП (т.е. результат запоминается в регистре)
d=0, - передача результата из МП (т.е. результат запоминается в памяти)
Пример:
ADD AX,B AX:=AX+B -> результат в МП - d=1
ADD B,BX B:=B+BX -> результат в память - d=0
ADD AX,BX AX:=AX+BX -> результат в МП - d=1
Условное обозначение ОР1 и ОР2 не согласуются с мнемоникой:
Мнемоника: КОП ОР1 , ОР2
/ \
может быть 1-й или 2-й операнд
Таблица. 1 Определение первого операнда в постбайте.
┌─────┬────────────────────────────────────────────────────────┐
│ r/m │ mod │
│ ├───────────┬──────────────┬───────────────┬─────────────┤
│ │ 00 │ 01 │ 10 │ 11 │
│ │ │ │ ├───────┬─────┤
│ │ │ │ │ w=0 │ w=1 │
├─────┼───────────┼──────────────┼───────────────┼───────┼─────┤
│ 000 │ (BX)+(SI) │ (BX)+(SI)+D8 │ (BX)+(SI)+D16 │ AL │ AX │
│ 001 │ (BX)+(DI) │ (BX)+(DI)+D8 │ (BX)+(DI)+D16 │ CL │ CX │
│ 010 │ (BP)+(SI) │ (BP)+(SI)+D8 │ (BP)+(SI)+D16 │ DL │ DX │
│ 011 │ (BP)+(DI) │ (BP)+(DI)+D8 │ (BP)+(DI)+D16 │ BL │ BX │
│ 100 │ (SI) │ (SI)+D8 │ (SI)+D16 │ AH │ SP │
│ 101 │ (DI) │ (DI)+D8 │ (DI)+D16 │ CH │ BP │
│ 110 │ (D16) * │ (BP)+D8 │ (BP)+D16 │ DH │ SI │
│ 111 │ (BX) │ (BX)+D8 │ (BX)+D16 │ BH │ DI │
└─────┴───────────┴──────────────┴───────────────┴───────┴─────┘
* исключение - прямая адресация.
Если MOD=11 то адресация регистровая.
Каждому регистру можно присвоить свой номер. Второй операнд задается полем REG, т. е. это всегда номер регистра. Значение этого поля определяется последними 2-мя колонками.
Если MOD<>11, то первый операнд находится в памяти.
Каждый квадрат таблицы определяет способ вычисления исполнительного адреса, например, ЕА=(BX)+(DI)+d16 -> r/m=001, mod=10
ЕА – исполнительный адрес, беззнаковая величина.
D8 или D16 это знаковое смещение адреса, которое содержится в команде и как компонент участвует в вычислении исполнительного адреса EA. Например
EA = (BP) + (DI) + D16
Компоненты адреса – BX,DI,d16 – знаковые величины, однако после их сложения с ЕА получается беззнаковая величина, иначе – ошибка.
С другой стороны, EA является смещением относительно начала сегмента.
Колонки MOD = 00,01,10 имеют регулярную структуру. Нарушение только в одном квадрате:
r/m = 110 , MOD = 00, что соответствует прямой адресации.
Двухоперандная команда, в которой второй операнд непосредственный
7 0 7 0
┌───────┬──┬─┐ ┌───┬────┬─────┐ ┌ ─ ─ ─┐ ┌ ─ ─ ┐ ┌─────┐ ┌ ─ ─ ┐
│ KOP │S │W│ │mod│ kop│ r/m │ dispL dispH │dataL│ dataH
└───────┴──┴─┘ └───┴────┴─────┘ └ ─ ─ ─┘ └ ─ ─ ┘ └─────┘ └ ─ ─ ┘
Бит направления d в данной команде не нужен, т.к. результат помещается только на место первого операнда. Поэтому биты s,w определяют формат второго операнда.
┌──
│ *0, один байт данных dataL
sw=│ 01, два байта данных dataL dataH
│ 11, один байт данных, при выполнении команд расширяется до слова
Add bx,5h
│ └────────────────┐
└─────────┐ │
┌──────┬─┬─┐ ┌──┬─────┬───┐ ┌─────┐
│ kop │0│1│ │11│ кор │011│ │00 05│
└──┬───┴─┴─┘ └──┴──┬──┴───┘ └──┴──┘
│ s w mod │ r/m data
└───────┬────────┘
код операции
Команда MOV наиболее часто используется в программах, и специально для нее предложены дополнительные форматы (без пост-байта):
Mov reg,data
┌───────┬──┬───┐ ┌─────┐ ┌ ─ ─ ┐
│ KOP │W │reg│ │dataL│ dataH
└───────┴──┴───┘ └─────┘ └ ─ ─ ┘
└ любые 8,16 разрядные
Формат двухоперандных команд с аккумулятором
Аккумулятор целесообразно использовать чаще при записи программы, т.к. для него реализован спец. укороченный формат без post-байта
┌───────┬─┐ ┌─────┐ ┌ ─ ─ ┐
│ KOP │W│ │dataL│ dataH
└───────┴─┘ └─────┘ └ ─ ─ ┘
Формат команд перехода (условный, безусловный переход, loop, call)
┌───────┐ ┌───────┐
│ KOП │ │ disp │
disp – смещение метки относительно следующей команды. Различные команды перехода отличаются только величиной disp. Условные переходы и loop могут иметь только disp8 – короткие переходы. Безусловный переход будем рассматривать disp8 (короткий) или disp16 (внутрисегментный), хотя существуют еще 3 типа безусловного перехода. call может иметь disp16 или disp32 (межсегментный переход – вызов дальней процедуры).
адрес М2 033Fh
адрес команды -0325h
--------------------
disp = 001Ah - в disp заносится мл. байт