В команде, как правило, содержатся не сами операнды, а информация объект адресах ячеек памяти или регистрах, в которых они находятся.
Код команды можно представить состоящим из нескольких полей, каждое из которых имеет свое функциональное назначение.
В общем случае команда состоит из:
- Ш операционной части (содержит код операции);
- Ш адресной части (содержит адресную информацию о местонахождении обрабатываемых данных и месте хранения результатов).
В свою очередь, эти части, что особенно характерно для адресной части, могут состоять из нескольких полей.
Структура команды определяется составом, назначением и расположением полей в коде префикс код операции modR/M SIB смещение непосредственный операнд mod reg R/M Scale Index Base.
Кроме поля кода операции все остальные поля являются необязательными, т. е. в одних командах могут присутствовать, а в других нет.
Префикс.
Префиксы делятся на четыре группы:
- * блокировки и повторения:
LOCK.
REPNZ.
REP.
префикс.
- (только для строковых инструкций)
- (только для строковых инструкций)
- * переопределения сегмента:
- 02Eh CS:
- 036h SS:
- 03Eh DS:
- 026h ES:
- 064h FS:
- 065h GS:
- * переопределения размеров операндов:
- 066h
- * переопределение размеров адреса:
Если используется более одного префикса из той же самой группы, то действие команды не определено и по-разному реализовано на разных типах процессоров.
Префикс переопределения размера операндов используется в 16-разрядном режиме для манипуляции с 32-битными операндами и наоборот. При этом он может стоять перед любой командой, например, 0×66:CLI будет работать! А почему бы и нет? Интересно, но отладчики этого не учитывают и отказываются работать. То же относится и к дизассемблерам, к примеру IDA Pro:
seg000:0100 start proc near.
seg000:0100 db 66h.
seg000:0100 cli.
seg000:0102 db 67h.
seg000:0102 sti.
seg000:0104 retn.
· Понятия:
Рабочий цикл — это строгая последовательность рабочих процессов (тактов), периодически повторяющихся в каждом цилиндре.
Рабочий такт — это часть рабочего цикла.