
- •Замковец с.В. Левин н.А. Попкова е.Я. Архитетура микропроцессоров
- •Удк 681.3.06
- •Классификация микропроцессоров по архитектуре
- •Архитектура микропроцессоров 80х86
- •2.1. Используемые типы данных
- •2.2. Регистры микропроцессоров
- •2.3. Режимы адресации
- •2.4. Управление стеками
- •2.5. Сегментная организация памяти
- •Система команд микропроцессоров
- •3.2.Команды передачи данных
- •Команды двоичной арифметики
- •Команды десятичной арифметики
- •Логические команды
- •Команды сдвигов
- •Команды обработки бит и байт
- •Команды обработки цепочек
- •Команды передачи управления
- •3.9.1. Команды условных переходов
- •3.9.2 Команды безусловных переходов
- •3.9.3 Команды вызова подпрограмм
- •3.9.4 Команды возврата из подпрограмм
- •4. Прерывания
- •4.1. Прерывания в реальном режиме
- •Защита по привилегиям
- •5.1. Определение уровней привилегий
- •Вычисления с плавающей запятой
- •6.1. Форматы чисел с плавающей запятой
- •6.3. Регистры сопроцессора
- •Mmx архитектура
- •7.1. Форматы представления данных
- •7.2. Арифметика с насыщением
- •7.3. Mmx регистры
- •7.4. Система команд mmx
- •1. Классификация микропроцессоров по архитектуре ... 8
- •2. Архитектура микропроцессоров 80х86 ………………...10
3.9.2 Команды безусловных переходов
Команда безусловного перехода с общей мнемоникой JMP имеет 5 различных форм, которые различаются расстоянием назначения от текущей команды и способом задания назначения целевого адреса.
В коротком (short) переходе двухбайтная команда JMP содержит во втором байте смещение, которое интерпретируется как знаковое целое. При выполнении этой команды значение смещения прибавляется с расширением знака к содержимому регистра EIP/IP и полученное значение соответствует адресу команды, выполняющейся после команды JMP. Диапазон смещений составляет от –128 до +127. Если смещение положительное, то осуществляется переход вперед, а если отрицательное – то назад.
Команда прямого внутрисегментного перехода (near) аналогична предыдущей, но эта команда содержит полное смещение, размер которого составляет 16 или 32 разряда. Смещение по-прежнему считается знаковым целым числом, которое прибавляется к содержимому регистра EIP. При выполнении этой команды управление передается в любую точку текущего кодового сегмента.
В команде косвенного внутрисегментного перехода, которая имеет следующий вид
JMP reg/mem
адрес перехода также ограничен текущим сегментом кода, однако этот адрес содержится в регистре или ячейке памяти и при выполнении этой команды содержимое регистра или ячейки памяти загружается в регистр EIP. Размер смещения составляет 16 или 32 разряда.
Команда прямого межсегментного перехода (far) содержит непосредственный операнд, являющийся указателем целевой команды. Этот операнд состоит из 16-разрядного селектора, который загружается в регистр CS, и 16- или 32-разрядного смещения, загружаемого в регистр EIP.
Команда косвенного межсегментного перехода (far) адресует в памяти полный 32- или 48-разрядный указатель селектор:смещение, при этом селектор загружается в регистр CS, а смещение – в регистр EIP.
3.9.3 Команды вызова подпрограмм
Команда вызова подпрограммы (процедуры) CALL передает управление с автоматическим сохранением в стеке адреса возврата, т.е. адреса команды, находящейся после команды CALL. Как команда безусловного перехода JMP, вызов подпрограммы может быть внутрисегментным и межсегментным. В первом случае вызываемая подпрограмма находится в текущем сегменте кода (тип near), и в этом случае как адрес возврата в стеке необходимо сохранить только содержимое регистра EIP. Во втором случае подпрограмма находится в другом кодовом сегменте (тип far) и в стеке необходимо сохранить содержимое регистров CS и EIP.
Команда CALL имеет такие же формы, как и команда JMP; отсутствует только короткая ( типа short ) форма. При выполнении команды CALL displ 16/32 осуществляется декремент регистра ESP, в стек включается содержимое регистра EIP, а смещение, указанное величиной displ 16/32 и рассматриваемое как знаковое число, прибавляется к содержимому регистра EIP. По полученному адресу процессор и осуществляет обращение к первой команде вызываемой процедуры.
При выполнении команды CALL mem/reg осуществляется внутрисегментный косвенный вызов подпрограммы. Источником адреса является содержимое либо регистра, либо ячейки памяти.
Команда прямого межсегментного вызова CALL addr позволяет вызывать подпрограмму, находящуюся в любой области адресного пространства памяти. Операнд addr содержит как новое содержимое кодового сегментного регистра, так и величину смещения, записываемую в регистр EIP. При выполнении этой команды осуществляются следующие действия:
осуществляется декремент регистра ESP;
- в адресуемую регистрами SS и ESP ячейку памяти записывается содержимое регистра CS;
осуществляется декремент регистра ESP;
в адресуемую регистрами SS и SEP ячейку памяти записывается содержимое регистра EIP;
в регистр CS заносится новое значение, которое берется из операнда addr;
в регистр EIP заносится новое значение, которое берется из операнда addr.
При выполнении команды CALL mem осуществляется косвенный межсегментный вызов подпрограмм через память. Текущее значение регистров CS и EIP запоминается в стеке, после чего из адресуемой ячейки памяти слово (или двойное слово) загружается в регистр EIP, а следующее слово – в регистр CS.