КАТЕГОРИИ: Архитектура-(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) |
Способы адресации
СПЕЦИАЛЬНЫЕ БЕЗЗНАКОВЫЕ ЗНАКОВЫЕ КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ ВНУТРИСЕГМЕНТНЫЙ ПЕРЕХОД
Предположим, что адрес М2 равен 439Fh. адрес М2 439Fh адрес команды – 0325h -------------------- disp = 407Ah >0 - переход вперед | >127 ┌───────┐ ┌───────┐ │ KOП │ │ 407A │ └───────┘ └───────┘ disp При выполнении этой команды адрес перехода вычисляется аналогично. Переходы вперед выделяются длинные (3 байта), но если переход короткий, то программист указывает: JMP short M2
Используют только короткий переход (-128..127) При выходе за диапазон выдается синтаксическая ошибка.
Аналог в Паскале: if a=0 then goto met
1) CMP A,0; синтаксическая ошибка JZ MET; если адресное расстояние >127
2) иначе CMP A,0 JNZ M1 JMP MET M1: продолжение программы.
Команды условных переходов делятся на: - знаковые - беззнаковые - спец. назначения
┌─────────┬─────────────┬─────────────────────────────────────┐ │Переход │Флаги │ Примечания │ ├─────────┼─────────────┼─────────────────────────────────────┤ │JE/JZ │ ZF │Если равно / Если ноль │ ├─────────┼─────────────┼─────────────────────────────────────┤ │JNE/JNZ │ ┐ZF │Если не равно / Если не ноль │ ├─────────┼─────────────┼─────────────────────────────────────┤ │JG/JNLE │┐ZF&(SF=OF) │Если > / Если не < и не равно │ ├─────────┼─────────────┼─────────────────────────────────────┤ │JGE/JNL │ SF=OF │Если >= / Если не < │ ├─────────┼─────────────┼─────────────────────────────────────┤ │JL/JNGE │ (SF<>OF) │Если < / Если не > и не равно │ ├─────────┼─────────────┼─────────────────────────────────────┤ │JLE/JNG │ZF V (SF<>OF)│Если =< / Если не > │ └─────────┴─────────────┴─────────────────────────────────────┘
┌─────────┬────────────┬──────────────────────────────────────┐ │Переход │Флаги │ Примечания │ ├─────────┼────────────┼──────────────────────────────────────┤ │JE/JZ │ ZF │Если равно / Если ноль │ ├─────────┼────────────┼──────────────────────────────────────┤ │JNE/JNZ │ ┐ZF │Если не равно / Если не ноль │ ├─────────┼────────────┼──────────────────────────────────────┤ │JA/JNBE │ ┐ZF & ┐CF │Если выше / Если не ниже и не равно │ ├─────────┼────────────┼──────────────────────────────────────┤ │JAE/JNB │ ┐CF │Если выше или равно / Если не ниже │ ├─────────┼────────────┼──────────────────────────────────────┤ │JB/JNAE │ CF │Если ниже / Если не выше и не равно │ ├─────────┼────────────┼──────────────────────────────────────┤ │JBE/JNA │ CF V ZF │Если ниже или равно / Если не выше │ └─────────┴────────────┴──────────────────────────────────────┘
┌─────────┬────────────┬──────────────────────────────────────┐ │Переход │Флаги │ Примечания │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JS │ SF │переход по минусу │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JNS │ ┐SF │переход, если знак равен нулю │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JC │ CF │переход по переносу │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JNC │ ┐CF │переход по отсутствию переноса │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JO │ JF │переход по переполнению │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JNO │ ┐OF │переход по отсутствию переполнения │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JP │ PF │переход по паритету │ ├─────────┼────────────┼──────────────────────────────────────┤ │ JNP │ ┐PF │переход по отсутствию паритета │ └─────────┴────────────┴──────────────────────────────────────┘
Команды условного перехода флаги не изменяют! Пример лабораторной работы N2:
┌ │(A^2)*B if A^2 - 5 > 0 y = { 100 if A^2 - 5 = 0 │(A^2)*(B^2) if A^2 - 5 < 0 └
A dw 7 B dw 8 y dw?
mov ax,A imul ax mov cx,ax;A^2 sub ax,5 jz m2 jl m3 mov ax,B; imul cx; >0 jmp short kon; ;-------------------------- m2: mov ax,100; jmp short kon; =0 ;-------------------------- m3: mov ax,B; imul ax; neg ax; <0 add ax,cx; ;-------------------------- kon: mov y,ax ret
Первые ЭВМ имели прямой способ адресации: КОП ОР1 ОР2 При прямой адресации все ко- ┌───────┐ ┌───────┐ ┌───────┐ манды имели бы длину 6 байтов. │ KOП │ │Адр.op1│ │Адр.ор2│ Однако в IBM PC команды имеют └───────┘ └───────┘ └───────┘ длину от 1 до 6 байтов. В мень- 7 0 19 0 19 0 шей степени используются длин- \-------------V--------------/ ные команды. В этом и проявля- 6 байт тся эффективность системы команде. Современные способы адресации имеют следующие цели: определить адреса в командах наименьшим числом бит, вычисление адреса команд, относительно базы а в командах перехода – относительно следующей команды, вычисление адреса операндов на основании выражений, элементы выражений в процессе вычислений изменяются, что позволяет эффективно обрабатывать структурированные типы данных. Большинство способов адресации реализуются с помощью постбайта.
Дата добавления: 2014-01-04; Просмотров: 283; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |