КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Косвенная адресация
ДВУХОПЕРАНДНЫЕ КОМАНДЫ
7 0 7 6 5 3 2 0 ┌────────────┬───┬───┐ ┌─────┼─────┼─────┐ ┌ ─ ─ ┐ ┌ ─ ─ ┐ │ КОП │ d │ w │ │ mod │ reg │ r/m │ displ disph └────────────┴─┬─┴─┬─┘ └──┬──┴───┬─┴─┬───┘ └ ─ ─ ┘ └ ─ ─ ┘ бит направления │ │ режим │ │ │ смещение адреса ────────────────┘ │ ──────┘ │ │ бит слова │ поле определения │ │ поле определения ───────────┘ второго операнда │ │ первого операнда ─────────────────┘ └───────────────────
┌──────────────┐ d=0, условное направление ┌───────────────┐ │ │ из МП 1 │ │ │ 2-й ├───────────────────────────>│ 1-й │ │ операнд reg │ │ операнд r/m │ │ │ d=1, условное направление │ │ │ │ в МП │ │ │ │<───────────────────────────┤ │ └──────────────┘ 2 └───────────────┘
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-й операнд
Таблица. Определение первого операнда в постбайте. ┌─────┬────────────────────────────────────────────────────────┐ │ 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, что соответствует прямой адресации.
Код команды MOV X,BP
d w mod reg r/m ┌───────┬───┬───┐ ┌───┬───┬───┐┌─────────┐ - прямой исполнительный │ KOП │ 0 │ 1 │ │ 00│101│110││ disp │ адрес переменной Х └───────┴───┴───┘ └───┴───┴───┘└─────────┘ ЕА = disp
MOD = 00 – косвенная адресация r/m = 100,101,111 EA = (BX) MOV AX,[BX] EA = (SI) ADD AL,[SI] EA = (DI) SUB [DI],BP При косвенной регистровой адресации выполняется обращение к одному из регистров (BX,SI,DI) откуда извлекается прямой адрес операнда в памяти. Команды, использующие косвенную адресацию, всегда адресуются по DS Физический адрес = DS + EA -> адрес в сегменте данных. Косвенная адресация через BP не реализована т.к. имеется [d16] (прямая адресация), однако косвенная адресация через BP моделируется через: EA = (BP) + d8 MOV [BP],AX MOV BX,[BP] Адресация выполняется по умолчанию через регистр SS, физический адрес равен = SS + EA, т. е. выполняется обращение к сегменту стека.
┌─< MOV [BP],AX
│ d w mod reg r/m dispL ┌───────┬───┬───┐ ┌───┬───┬───┐┌─────────┐ │ KOП │ 0 │ 1 │ │ 01│000│110││ 00 │ -> смещение = 0 └───────┴───┴───┘ └───┴───┴───┘└─────────┘ └─> MOV [BP+0],AX
Дата добавления: 2014-01-04; Просмотров: 258; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |