Лекция Соболевой
| Вид материала | Лекция | 
| СодержаниеСдвиговые операции Команды передачи управления Код команды RET числоRETN Регистровая адресация Непосредственная адресация Прямая адресация Косвенная адресация | 
- Лекция Соболевой, 659.2kb.
- Элективный курс по правоведению для 9 класса «Символика Российского государства», 86.61kb.
- «Социальная стратификация и социальная мобильность», 46.19kb.
- Программа по русскому языку по системе Л. В. Занкова. Урок обучения грамоте. Знакомство, 19.7kb.
- Первая лекция. Введение 6 Вторая лекция, 30.95kb.
- Лекция Сионизм в оценке Торы Лекция Государство Израиль испытание на прочность, 2876.59kb.
- Текст лекций н. О. Воскресенская Оглавление Лекция 1: Введение в дисциплину. Предмет, 1185.25kb.
- Собрание 8-511 13. 20 Лекция 2ч режимы работы эл оборудования Пушков ап 8-511 (ррэо), 73.36kb.
- Концепция тренажера уровня установки. Требования к тренажеру (лекция 3, стр. 2-5), 34.9kb.
- Лекция по физической культуре (15. 02.; 22. 02; 01. 03), Лекция по современным технологиям, 31.38kb.
Сдвиговые операции
|  Команда: | SAR приемник, счетчик | 
|  Назначение: | Арифметический сдвиг вправо | 
|  Команда: | SAL приемник, счетчик | 
|  Назначение: | Арифметический сдвиг влево | 
|  Команда: | SHR приемник, счетчик | 
|  Назначение: | Логический сдвиг вправо | 
|  Команда: | SHL приемник, счетчик | 
|  Назначение: | Логический сдвиг влево | 
|  Процессор: | 8086 | 

Рис. 7. Сдвиговые операции
|  Команда: | SHRD приемник, источник, счетчик | 
|  Назначение: | Сдвиг повышенной точности вправо | 
|  Команда: | SHLD приемник, источник, счетчик | 
|  Назначение: | Сдвиг повышенной точности влево | 
|  Процессор: | 80386 | 

Рис. 8. Сдвиги двойной точности
|  Команда: | ROR приемник, счетчик | 
|  Назначение: | Циклический сдвиг вправо | 
|  Команда: | ROL приемник, счетчик | 
|  Назначение: | Циклический сдвиг влево | 
|  Команда: | RCR приемник, счетчик | 
|  Назначение: | Циклический сдвиг вправо через флаг переноса | 
|  Команда: | RCL приемник, счетчик | 
|  Назначение: | Циклический сдвиг влево через флаг переноса | 
|  Процессор: | 8086 | 

Рис. 9. Циклические сдвиги
Команды передачи управления
|  Команда: | JMP операнд | 
|  Назначение: | Безусловный переход | 
|  Процессор: | 8086 | 
В зависимости от типа перехода различают:
-  переход типа short (короткий переход) — если адрес перехода находится в пределах от –127 до +128 байт от команды JMP; 
 
-  переход типа near (ближний переход) — если адрес перехода находится в том же сегменте памяти, что и команда JMP; 
 
-  переход типа far (дальний переход) — если адрес перехода находится в другом сегменте. Дальний переход может выполняться и в тот же самый сегмент, если в сегментной части операнда указано число, совпадающее с текущим значением CS; 
 
-  переход с переключением задачи — передача управления другой задаче в многозадачной среде. Этот вариант будет рассмотрен в главе, посвященной защищенному режиму. 
 
|  Команда: | Jcc метка | 
|  Назначение: | Условный переход | 
|  Процессор: | 8086 | 
Таблица 7. Варианты команды Jcc
| Код команды | Реальное условие | Условие для CMP | 
| JA JNBE | CF = 0 и ZF = 0 | если выше если не ниже или равно | 
| JAE JNB JNC | CF = 0 | если выше или равно если не ниже если нет переноса | 
| JB JNAE JC | CF = 1 | если ниже если не выше или равно если перенос | 
| JBE JNA | CF = 1 и ZF = 1 | если ниже или равно если не выше | 
| JE JZ | ZF = 1 | если равно если ноль | 
| JG JNLE | ZF = 0 и SF = OF | если больше если не меньше или равно | 
| JGE JNL | SF = OF | если больше или равно если не меньше | 
| JL JNGE | SF <> OF | если меньше если не больше или равно | 
| JLE JNG | ZF = 1 и SF <> OF | если меньше или равно если не больше | 
| JNE JNZ | ZF = 0 | если не равно если не ноль | 
| JNO | OF = 0 | если нет переполнения | 
| JO | OF = 1 | если есть переполнение | 
| JNP JPO | PF = 0 | если нет четности если нечетное | 
| JP JPE | PF = 1 | если есть четность если четное | 
| JNS | SF = 0 | если нет знака | 
| JS | SF = 1 | если есть знак | 
|  Команда: | JCXZ метка | 
|  Назначение: | Переход, если СХ = 0 | 
|  Процессор: | 8086 | 
|  |  | 
|  Команда: | JECXZ метка | 
|  Назначение: | Переход, если EСХ = 0 | 
|  Процессор: | 80386 | 
|  Команда: | LOOP метка | 
|  Назначение: | Цикл | 
|  Процессор: | 8086 | 
|  Команда: | LOOPE метка | 
|  Назначение: | Цикл, пока равно | 
|  Команда: | LOOPZ метка | 
|  Назначение: | Цикл, пока ноль | 
|  Команда: | LOOPNE метка | 
|  Назначение: | Цикл, пока не равно | 
|  Команда: | LOOPNZ метка | 
|  Назначение: | Цикл, пока не ноль | 
|  Процессор: | 8086 | 
|  Команда: | CALL операнд | 
|  Назначение: | Вызов процедуры | 
|  Процессор: | 8086 | 
|  Команда: | RET число RETN число RETF число | 
|  Назначение: | Возврат из процедуры | 
|  Процессор: | 8086 | 
|  Команда: | INT число | 
|  Назначение: | Вызов прерывания | 
|  Процессор: | 8086 | 
|  Команда: | IRET IRETD | 
|  Назначение: | Возврат из обработчика прерывания | 
|  Процессор: | 8086 | 
|  Команда: | INT3 | 
|  Назначение: | Вызов прерывания 3 | 
|  Процессор: | 8086 | 
|  Команда: | INTO | 
|  Назначение: | Вызов прерывания 4 при переполнении | 
|  Процессор: | 8086 | 
|  Команда: | BOUND индекс, границы | 
|  Назначение: | Проверка выхода за границы массива | 
|  Процессор: | 80186 | 
|  Команда: | ENTER размер, уровень | 
|  Назначение: | Вход в процедуру | 
|  Процессор: | 80186 | 
|  Команда: | LEAVE | 
|  Назначение: | Выход из процедуры | 
|  Процессор: | 80186 | 
1.14 Микропроцессор Intel х86. Способы адресации: регистровая, непосредственная, прямая, косвенная.
Регистровая адресация
Операнды могут располагаться в любых регистрах общего назначения и сегментных регистрах. В этом случае в тексте программы указывается название соответствующего регистра, например команда, копирующая в регистр AX содержимое регистра BX, записывается как
mov ax,bx
Непосредственная адресация
Некоторые команды (все арифметические команды, кроме деления) позволяют указывать один из операндов непосредственно в тексте программы, например команда
mov ax,2
помещает в регистр AX число 2.
Прямая адресация
Если известен адрес операнда, располагающегося в памяти, можно использовать этот адрес. Если операнд — слово, находящееся в сегменте, на который указывает ES, со смещением от начала сегмента 0001, то команда
mov ax,es:0001
поместит это слово в регистр AX. В реальных программах обычно для задания статических переменных используют директивы определения данных, которые позволяют ссылаться на статические переменные не по адресу, а по имени. Тогда, если в сегменте, указанном в ES, была описана переменная word_var размером в слово, можно записать ту же команду как
mov ax,es:word_var
В таком случае ассемблер сам заменит слово «word_var» на соответствующий адрес. Если селектор сегмента данных находится в DS, имя сегментного регистра при прямой адресации можно не указывать, DS используется по умолчанию. Прямая адресация иногда называется адресацией по смещению.
Адресация отличается для реального и защищенного режимов. В реальном режиме (так же как и в режиме V86) смещение всегда 16-битное, это значит, что ни непосредственно указанное смещение, ни результат сложения содержимого разных регистров в более сложных методах адресации не могут превышать границ слова. При программировании для Windows, для DOS4G, PMODE и в других ситуациях, когда программа будет запускаться в защищенном режиме, смещение не может превышать границ двойного слова.
Косвенная адресация
По аналогии с регистровыми и непосредственными операндами адрес операнда в памяти также можно не указывать непосредственно, а хранить в любом регистре. До 80386 для этого можно было использовать только BX, SI, DI и BP, но потом эти ограничения были сняты и адрес операнда разрешили считывать также и из EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP (но не из AX, CX, DX или SP напрямую — надо использовать EAX, ECX, EDX, ESP соответственно или предварительно скопировать смещение в BX, SI, DI или BP). Например, следующая команда помещает в регистр AX слово из ячейки памяти, селектор сегмента которой находится в DS, а смещение — в BX:
mov ax,[bx]
Как и в случае прямой адресации, DS используется по умолчанию, но не во всех случаях: если смещение берут из регистров ESP, EBP или BP, то в качестве сегментного регистра используется SS. В реальном режиме можно свободно пользоваться всеми 32-битными регистрами, надо только следить, чтобы их содержимое не превышало границ 16-битного слова.
