русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

JMP - Переход


Дата добавления: 2015-06-12; просмотров: 649; Нарушение авторских прав


-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов ||EB cb JMP rel8 3 Переход короткий ||E9 cw JMP rel16 3 Переход ближний, смещение || относительно следующей команды||FF /4 JMP r/m16 5/5 Переход ближний косвенный ||EA cd JMP ptr16:16 17,pm=19 Переход межсегментный, 4-бай- || товый непосредственный адрес ||EA cd JMP ptr16:16 32 Переход к шлюзу вызова, та же || привилегированность ||EA cd JMP ptr16:16 42+TS Переход через сегмент состоя- || ния задачи ||EA cd JMP ptr16:16 42+TS Переход через шлюз задачи ||FF/5d JMP m16:16 13,pm=18 Переход r/m16:16 косвенный и || межсегментный ||FF /5 JMP m16:16 3 Переход к шлюзу вызова, та же || привилегированность ||FF /5 JMP m16:16 41+TS Переход через сегмент состоя- || ния задачи ||FF /5 JMP m16:16 42+TS Переход через шлюз задачи ||E9 cd JMP rel32 3 Переход ближний, смещение || относительно следующей команды||FF /4 JMP r/m32 5/5 Переход ближний косвенный ||EA cp JMP ptr16:32 13,pm=18 Переход межсегментный, 6-бай- || товый непосредственный адрес ||EA cp JMP ptr16:32 31 Переход к шлюзу вызова, та же || привилегированность ||EA cp JMP ptr16:32 42+TS Переход через сегмент состоя- || ния задачи ||EA cp JMP ptr16:32 43+TS Переход через шлюз задачи ||FF /5 JMP m16:32 13,pm=18 Переход межсегментный, адрес || в двойном слове r/m ||FF /5 JMP m16:32 31 Переход к шлюзу вызова, та же || привилегированность ||FF /5 JMP m16:32 41+TS Переход через сегмент состоя- || ния задачи ||FF /5 JMP m16:32 42+TS Переход через шлюз задачи |----------------------------------------------------------------- Примечание: значения ts задаются следующей таблицей: ----------------------------------------------------------------- | Новая задача Старая задача |------------------------------------------- | к TSS i486 | к TSS 80286 | к TSS VM----------------------------------------------------------------- VM/i486/TSS 80286 | 199 | 180 | 177----------------------------------------------------------------- Работа команды IF команда = относительный переход JMP (* т.е. операнд это rel8, rel16 или rel32 *)THEN EIP <- EUP + rel8/16/32; IF OperandSize = 16 THEN EIP <- EIP AND 0000FFFFH; FI;FI; IF команда = ближний косвенный переход JMP (* т.е. операнд это r/m16 или r/m32 *)THEN IF OperandSize = 16 THEN EIP <- [r/m16 AND 0000FFFFH; ELSE (* OperandSize = 32 *) EIP <- [r/m32; FI;FI; IF (PE = 0 OR (PE = 1 AND VM = 1))(* режим реальных адресов или виртуальный режим 8086 *) AND команда = дальний JMP (* т.е. тип операнда равен m16:16, m16:32, ptr16:16, ptr16:32 *)THEN GOTO РЕЖИМ-РЕАЛЬНЫХ-АДРЕСОВ-ИЛИ-V86 IF тип операнда = m16:16 или m16:32 THEN (* косвенный *) IF OperandSize = 16 THEN CS:IP <- [m16:16; EIP <- EIP AND 0000FFFFH: (* очистка старших 16 битов *) ELSE (* OperanfSize = 32 *) CS:EIP <- [m16:32; FI; FI; IF тип операнда = ptr16:16 или ptr16:32 THEN IF OperandSize = 16 THEN CS:IP <- ptr16:16; EIP <- EIP AND 0000FFFFH: (* очистка старших 16 битов *) ELSE (* OperanfSize = 32 *) CS:EIP <- ptrm16:32; FI; FI;FI; IF (PE = 1 AND VM = 0) (* Защищенный режим, но не режим V86 *) AND команда = дальний JMPTHEN IF тип операнда = m16 или m16:32 THEN (* Косвенный *) Проверить доступ к двойному слову EA; #GP(0) или #SS(0) IF нарушение границы; FI; Селектор назначения не должен быть пустым, ELSE #GP(0); Индекс селектора назначения должен быть в пределах границ дескрипторной таблицы; ELSE #GP(селектор) В зависимости от байта AR дескриптора назначения: GOTO КОНФОРМНЫЙ-КОДОВЫЙ-СЕГМЕНТ; GOTO НЕКОНФОРМНЫЙ-КОДОВЫЙ-СЕГМЕНТ; GOTO ШЛЮЗ-ВЫЗОВА; GOTO ШЛЮЗ-ЗАДАЧИ; GOTO СЕГМЕНТ-СОСТОЯНИЯ-ЗАДАЧИ; ELSE #GP(селектор); (* Недопустимый байт AR в дескрипторе *)FI; КОНФОРМНЫЙ-КОДОВЫЙ-СЕГМЕНТ: DPL дескриптора должен быть <= CPL ELSE #GP(селектор); Сегмент должен присутствовать ELSE #NP (селектор); Указатель команд должен быть в границах кодового сегмента ELSE #GP(0); IF OperandSize = 16 THEN Загрузить CS:EIP из указателя назначения; ELSE Загрузить CS:IP из указателя назначения; FI; Загрузить регистр CS новым дескриптором сегмента; НЕКОНФОРМНЫЙ-КОДОВЫЙ-СЕГМЕНТ: RPL селектора назначения должен быть <= CPL ELSE #GP(селектор); DPL дескриптора должен быть = CPL ELSE #GP(селектор); Сегмент должен присутствовать ELSE #NP (селектор); Указатель команд должен быть в границах кодового сегмента ELSE #GP(0); IF OperandSize = 32 THEN Загрузить CS:EIP из указателя назначения; ELSE Загрузить CS:IP из указателя назначения; FI; Загрузить регистр CS новым дескриптором сегмента; Установить поле RPL для CS равным CPL; ШЛЮЗ-ВЫЗОВА: DPL дескриптора должен быть >= CPL ELSE #GP(селектор шлюза); DPL дескриптора должен быть >= RPL селектора шлюза ELSE #GP(селектор шлюза); Шлюз должен присутствовать ELSE #NP(селектор шлюза); Рассмотрим селектор кодового сегмента в дескрипторе шлюза вызова: Селектор не должен быть пустым ELSE #GP(0) Селектор должен быть в пределах границ его дескрипторной таблицы ELSE #GP(селектор CS) Байт AR выбранного дескриптора должен обозначать кодовый сегмент ELSE #GP (селектор CS) IF не-конформный THEN DPL дескриптора кодового сегмента должен быть = CPL ELSE #GP(селектор CS); FI; IF конформный THEN DPL дескриптора кодового сегмента должен быть <= CPL; ELSE #GP(селектор CS); Кодовый сегмент должен присутствовать ELSE #NP(селектор CS); Указатель команд должен быть в границах кодового сегмента ELSE #GP(0); IF OperandSize = 32 THEN Загрузить CS:EIP из шлюза вызова; ELSE Загрузить CS:IP из шлюза вызова; FI; Загрузить регистр CS новым дескриптором кодового сегмента; Установить поле RPL для CS равным CPL; ШЛЮЗ-ЗАДАЧИ: DPL дескриптора шлюза должен быть >= CPL ELSE #TS(селектор шлюза) DPL дескриптора шлюза должен быть >= RPL селектора шлюза ELSE #GP(селектор шлюза) Шлюз задачи должен присутствовать ELSE #NP(селектор шлюза) Исследовать селектор TSS, заданный в дескрипторе шлюза задачи: Он должен задавать бит Глобальный/Локальный как Глобальный ELSE #GP(селектор TSS) Индекс должен находиться в пределах границы GDT ELSE #GP(селектор TSS) Байт AR дескриптора TSS должен задавать доступный TSS (младшие биты 00001); ELSE #GP(селектор TSS) Сегмент состояния задачи (TSS) должен присутствовать ELSE #NP(селектор TSS) ПЕРЕКЛЮЧЕНИЕ-ЗАДАЧ (без вложенности) на TSS Указатель команд должен находиться в границе кодового сегмента ELSE #GP(0) СЕГМЕНТ-СОСТОЯНИЯ-ЗАДАЧИ: DPL для TSS должен быть >= CPL ELSE #GP(селектор TSS) DPL для TSS должен быть >= RPL селектора TSS ELSE #GP(селектор TSS) Байт AR дескриптора должен задавать доступный TSS (младшие биты 00001) ELSE #GP(селектор TSS) Сегмент состояния задачи (TSS) должен присутствовать ELSE #NP(селектор TSS) ПЕРЕКЛЮЧЕНИЕ-ЗАДАЧ (без вложенности) на TSS Указатель команд должен находиться в границе кодового сегмента ELSE #GP(0); ОписаниеКоманда JMP передает управление в другую точку потока команд, не записываяинформации для выполнения возврата. Ниже описано действие для различных форм команды.Команды перехода с типом назначения r/m16m, r/m32 и r/m32 выполняютближний переход и не влекут изменения значения сегментного регистра. Формы команды перехода JMP rel16 и JMP rel32 складывают смещение с адресомкоманды, следующей за JMP, чтобы определить назначение команды. Форма сrel16 используется, когда атрибут размера операнда команды равен 16 битам(только атрибут размера сегмента 16); форма с rel32 используется, когдаатрибут размера операнда команды равен 32 битам (только атрибут размерасегмента 32). Результат сохраняется в 32-разрядном регистре EIP. В случаеrel16 старшие 16 битов регистра EIP очищаются, и таким образом, получаетсясмещение, размер которого не превышает 16 битов. Формы JMP r/m16 и JMP r/m32 задают регистр или адрес памяти, из котороговыбирается абсолютное смещение в процедуре. Выбранное из r/m смещениеравно 32 битам для атрибута размера операнда, равного 32 битам (r/m32),или 16 битам для атрибута размера операнда, равного 16 битам (r/m16). Формы команды JMP ptr16:16 и ptr16:32 используют четырехили шести-байтовыеоперанды в качестве длинных указателей на назначение. Формы JMP m16:16 иm16:32 выбирают дальний указатель из заданного адреса памяти (косвенноеобращение). В режиме реальных адресов или виртуальном режиме 8086 длинныйуказатель обеспечивает 16 битов для регистра CS и 16 или 32 бита длярегистра EIP (в зависимости от атрибута размера операнда). В защищенномрежиме обе формы с длинными указателями проверяют байт прав доступа (AR) вдескрипторе, индексируемом селекторной частью длинного указателя. Взависимости от значения байта AR переход будет осуществлять один изследующих типов передачи управления:- Переход к кодовому сегменту на том же уровне привилегированности.- Переключение задачи. Более подробная информация о передаче управления в защищенном режименаходится в главах 6 и 7. Изменяемые флагиПри переключении задачи изменяются все флаги; если же переключение задачине происходит, то флаги не изменяются. Исключения защищенного режимаДля дальних переходов: #GP, #NP, #SS и #TS, как указано выше.Для ближних прямых переходов: #GP(0), если процедура находится запределами границы кодового сегмента; #AC для невыравненной ссылки к памятипри текущем уровне привилегированности, равном 3. Для ближних косвенных переходов: #GP(0) в случае недопустимогоисполнительного адреса операнда памяти в сегментах CS, DS, ES, FS или GS;#SS(0) в случае недопустимого адреса в сегменте SS; # GP, если полученноекосвенное смещение лежит за границами кодового сегмента; #PF(код сбоя) вслучае страничного сбоя; #AC для невыравненной ссылки к памяти при текущемуровне привилегированности, равном 3. Исключения режима реальных адресовПрерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев; #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3. ПримечанияВсе команды ветвления преобразуются для выборки в 16-байтовые коды,независимо от адреса перехода или возможности кеширования.


<== предыдущая лекция | следующая лекция ==>
Jcc - Переход, если условие перехода удовлетворяется | LAR - Загрузка байта прав доступа


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.052 сек.