русс | укр

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

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

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

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


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

Колонка кода операции


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


Колонка "Код операции" приводит полный объектный код, генерируемый для каждой формы команды. Где это возможно, коды приводятся в шестнадцатиричной байтовой записи, в последовательности их расположения в памяти. Определения элементов, помимо шестнадцатиричных байтов, следующие:

/цифра (цифра от 0 до 7) указывает на то, что байт ModR/M команды использует только операнд r/m (регистр или память). Поле reg содержит цифру, представляющую собой расширение кода операции команды.

/r: указывает на то, что байт ModR/M команды содержит и операнд регистра, и операнд r/m.

cb, cw, cd, cp: 1-байтовое (cb), 2-байтовое (cw), 4-байтовое (cd) или 6-байтовое (cp) значение, следующее за кодом операции, используемое для задания смещения кода и возможно, нового значения регистра кодового сегмента.

ib, iw, id: 1-байтовый (ib), 2-байтовый (iw) или 4-байтовый (id) непосредственный операнд команды, следующий за кодом операции, байтами ModR/M или SIB. Код операции определяет, является ли данный операнд значением со знаком. Все слова и двойные слова представлены таким образом, что первым следует младший байт.

+rb, +rw, +rd: Код регистра, от 0 до 7, складываемый с шестнадцатиричным байтом, находящимся слева от знака плюс, образуя единый байт кода операции. Коды:

rb rw rd AL = 0 AX = 0 EAX = 0 CL = 1 CX = 1 ECX = 1 DL = 2 DX = 2 EDX = 2 BL = 3 BX = 3 EBX = 3

rb rw rd AH = 4 SP = 4 ESP = 4 CH = 5 BP = 5 EBP = 5 DH = 6 SI = 6 ESI = 6 BH = 7 DI = 7 EDI = 7

+i: Используется в командах с плавающей точкой, когда один из операндов - это ST(i) из стека регистров модуля операций с плавающей точкой процессора (FPU). Число i (которое может быть в диапазоне от 0 до 7) складывается с шестнадцатиричным байтом, находящимся слева от знака плюс, образуя единый байт кода операции:

26.2.2.2 Колонка "Команда"



Колонка "Команда" дает синтаксис оператора команды в том виде, в котором этот оператор записывается в программе на ASM386. Ниже приводится список символических имен, используемых для представления операндов в операторах команды:

rel8: относительный адрес в диапазоне 128 байтов от 128 байтов до конца команды до 127 байтов после конца команды.

rel16, rel32: относительный адрес в пределах того же кодового сегмента, что и ассемблируемая команда. rel16 применяется с командами с атрибутом размера операнда, равным 16 битам; rel32 применяется с командами с атрибутом размера операнда, равным 32 битам.

ptr16:16,ptr16:32: дальний указатель, обычно установленный на кодовый сегмент, отличный от сегмент текущей команды. Запись 16: 16 указывает на то, что значение указателя состоит из двух частей. Значение слева от двоеточия это 16-битовый селектор или значение, предназначенное для регистра кодового сегмента. Значение справа от двоеточия соответствует смещению в пределах сегмента назначения. ptr16:16 используется, когда атрибут размера операнда команды равен 16 битам; ptr16:32 используется в случае 32-битового атрибута.

r8: один из байтовых регистров: AL,CL,DL,BL,AH,CH,DH или BH.

r16: один из регистров размером в слово: AX,CX,DX,BX,SP,BP,SI или DI.

r32: один из регистров размером в двойное слово: EAX,ECX,EDX, EBX,ESP,EBP,ESI или EDI.

imm8: непосредственное значение байта. imm8 это число со знаком в диапазоне от -127 до +127, включительно. Для команд, в которых imm8 комбинируется с операндом размером в слово или двойное слово, непосредственное значение расширяется по знаку, образуя слово или двойное слово. Старший байт слова заполняется самым старшим битом непосредственного значения.

imm16: непосредственное значение размером в слово, используемое для команд, атрибут размера операнда которых равен 16 битам. Это число в диапазоне от -32768 до +32767, включительно.

imm32: непосредственное значение размером в двойное слово, используемое для команд, атрибут размера операнда которых равен 32 битам. Это число в диапазоне от +2147483647 до -2147483648, включительно.

r/m8: однобайтовый операнд, представляющий собой либо содержимое байтового регистра (AL, BL, CL, DL, AH, BH, CH, DH), либо содержимое байта в памяти.

r/m16: операнд регистра-слова или операнд памяти, используемый в командах, атрибут размера операнда которых равен 16 битам. Регистры-слова это AX, BX, CX, DX, SP, BP, SI, DI. Содержимое памяти находится по адресу, получаемому при вычислении исполнительного адреса.

r/m32: операнд регистра-двойного слова или операнд памяти, используемый в командах, атрибут размера операнда которых равен 32 битам. Регистры-слова это EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI. Содержимое памяти находится по адресу, получаемому при вычислении исполнительного адреса.

m8: байт памяти, адресуемый DS:SI или ES:DI (используется только строковыми командами).

m16: слово памяти, адресуемое DS:SI или ES:DI (используется только строковыми командами).

m32: двойное слово памяти, адресуемое DS:SI или ES:DI (используется только строковыми командами).

m16:16, m16:32: операнд памяти, содержащий дальний указатель, составленный из двух чисел. Число слева от двоеточия соответствует селектору сегмента указателя. Число справа от двоеточия соответствует его смещению.

m16&32, m16&16, m32&32: операнд памяти, состоящий из пар элементов данных, размеры которых обозначены слева и справа от символа амперсанда (&). Все режимы адресации памяти разрешены, операнды m16&16 и m32&32 используются командой BOUND для получения операнда, содержащего верхнюю и нижнюю границы для индексов массивов. m16&32 используется командами LIDT и LGDT для получения слова, которым загружается поле границы, и двойного слова, которым загружается поле базы соответствующих регистров таблиц дескрипторов - глобальной и прерываний.

moffs8, moffs16, moffs32: (смещение в памяти) - простая переменная памяти типа BYTE, WORD или DWORD, используемая некоторыми вариантами команды MOV. Фактический адрес задается простым смещением относительно базы сегмента. В команде байт ModR/ M не используется. Число, указанное в moffs, обозначает размер, определяемый атрибут размера адреса команды.

Sreg: сегментный регистр. Назначения битов сегментных регистров: ES=0, CS=1, SS=2, DS=3, FS=4 и GS=5.

m32real, m64real, m80real: (соответственно) - операнды памяти - действительные числа с плавающей точкой одинарной, двойной и расширенной точности.

m16int, m32int, m64int: (соответственно) - операнды памяти - целочисленного типа word, short и long с плавающей точкой.

mNbyte: N-байтовый операнд памяти с плавающей точкой. ST или ST(0): старший элемент стека регистров FPU. ST(i): i-й элемент от вершины стека регистров FPU (i =0...7).

26.2.2.3 Колонка "Число тактовых циклов"

Колонка "Число тактовых циклов" задает примерное число тактовых циклов, за которое выполняется команда. Вычисления тактовых циклов производятся исходя из следующих предположений:

  • При доступе к данным или командам происходит кэш-пападание (нахождение искомого в кеше).
  • Цель команды перехода находится в кеше.
  • Никакие циклы аннулирования не конкурируют с командой за использование кеша.
  • Трансляция адреса страницы находит совпадение в TLB.
  • Операнды памяти выравнены.
  • Вычисления исполнительного адреса используют один базовый регистр и ни одного индексного регистра, а базовый регистр не является регистром назначения предыдущей команды.
  • Смещение и непосредственное значение не используются одновременно.
  • Во время выполнения не происходит исключений.
  • Задержки при записи в буфер отсутствуют.

Обсуждение потерь быстродействия в случаях, когда эти условия не выполняются, находится в Приложении E. В спецификациях подсчета тактовых циклов используются следующие символические имена:

  • n представляет число повторений.
  • m представляет число компонентов следующей выполняемой команды, где все смещение целиком (если оно имеется) считается за один компонент, все непосредственные данные в команде (если они имеются) считаются за один компонент, и каждый другой байт команды и префикс(ы) также считаются за один компонент.
  • pm= представляет собой счетчик тактовых циклов, работающий, когда команда выполняется в защищенном режиме. pm= не задается, когда число циклов одинаково для защищенного режима и режима реальных адресов.

Когда во время выполнения команды генерируется исключение, а обработчик этого исключения находится в другой задаче, время выполнения команды увеличивается на число тактовых циклов, требуемых для переключения задачи. Этот параметр зависит от нескольких факторов:

  • Типа TSS, используемого для представления новой задачи (TSS центрального процессора i486 или TSS 80286.)
  • От того, находится ли текущая задача в режиме V86.
  • От того, находится ли новая задача в режиме V86.
  • От того, произошло ли кеша-попадание при попытке доступа.
  • От того, используется ли шлюз задачи, или же шлюз прерывания/ловушки.

В Таблице 26-5 приводятся значения времени на переключение задачи для исключений, предполагая попадание в кеш и использование шлюзов задачи. Полное описание см. в Приложении Е.

26.2.2.4 Колонка "Описание"

Колонка "Описание", расположенная после колонки "Число тактовых циклов" содержит краткое описание разных форм команды. В разделах "Работа команды" и "Описание" содержится более подробная информация о работе команды.



<== предыдущая лекция | следующая лекция ==>
Байты ModR/M и SIB | Работа команды


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


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

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

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


 


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

 
 

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

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