2012-06-26 2 views
1

Мне было интересно, какова максимальная длина инструкции CISC на большинстве современных архитектур CISC?Длина инструкции CISC

Я еще не нашел окончательного ответа, но it is suggested that it's 16 bytes long, в теории.

В видео @ около 15:00 минут, почему говорящий предлагает «теоретически» и почему именно 16 байт?

ответ

3

На практике также. Для x86-64 AMD ограничила допустимую длину инструкции до 15 байтов. После этого декодер команд откажется и сигнализирует об ошибке.

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

Agner Туман описывает проблему:

Исполнительное три, четыре или пять команд одновременно не является необычным. Предел - это не единицы исполнения, которых у нас много, но декодер команд. Длина инструкции может быть от одного до пятнадцати байтов. Если мы хотим одновременно декодировать несколько инструкций, у нас есть серьезная проблема. Мы должны знать длину первой инструкции, прежде чем мы узнаем, где начинается вторая инструкция. Поэтому мы не можем декодировать вторую инструкцию, прежде чем мы расшифруем первую инструкцию. Декодирование является последовательным процессом по своей природе и требует много аппаратного обеспечения, чтобы иметь возможность декодировать несколько инструкций за такт. Другими словами, декодирование инструкций может быть серьезным узким местом, и становится все хуже, чем сложнее коды команд.

Просмотреть всю остальную часть сообщения в блоге here.

+0

Спасибо. Теперь все ясно. – nullpotent

1

Вопросы, что является самой длинной инструкцией в наборе инструкций x86? Ответ: вы можете сформировать действительную инструкцию x86 с бесконечным количеством байтов ! Правильно, вы можете заполнить полное изображение на 64 КБ одной действующей инструкцией. Чтобы быть более конкретным, нет предела длине инструкций 8086. Круто! К сожалению, современные i386-ые варианты времени бросают общую ошибку защиты при попытке декодирования инструкций длиной более 15 байт.

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

Например, вы можете взять безобидный ищет команду:

89 E5    mov %sp,%bp 

И превратить его в действительно длинной инструкции:

66 66 66 66 … 66 66 89 E5    mov %sp,%bp 

Теперь это просто зло ,

http://onlinedisassembler.com/blog/?p=23


EDIT: еще один длинный инструкция без повторяющихся префиксов

В некоторых случаях можно кодировать действительные инструкции, которые превышают традиционные 15-байтовый предел длины. Например:

; 16-bit mode 
    F2 F0 36 66 67 81 84 24 disp32 imm32 = xaquire lock add [ss:esp*1+disp32],imm32 
    F3 F0 36 66 67 81 84 24 disp32 imm32 = xrelease lock add [ss:esp*1+disp32],imm32 

    ; 16-bit mode 
    36 67 8F EA 78 12 84 24 disp32 imm32 = lwpins eax,[ss:esp*1+disp32],imm32 
    36 67 8F EA 78 12 8C 24 disp32 imm32 = lwpval eax,[ss:esp*1+disp32],imm32 
    36 67 8F EA 78 10 84 24 disp32 imm32 = bextr eax,[ss:esp*1+disp32],imm32 

    ; 64-bit mode 
    64 67 8F EA F8 12 84 18 disp32 imm32 = lwpins rax,[fs:eax+ebx+disp32],imm32 
    64 67 8F EA F8 12 8C 18 disp32 imm32 = lwpval rax,[fs:eax+ebx+disp32],imm32 
    64 67 8F EA F8 10 84 18 disp32 imm32 = bextr rax,[fs:eax+ebx+disp32],imm32 

http://www.sandpile.org/x86/opc_enc.htm

+0

Фантастический, мне нравится сайт, и я доволен ответом, поэтому +1;) – nullpotent

+0

Я просто добавил еще один случай, который без необходимости повторять избыточные префиксы, команда по-прежнему длиннее 15 байт –

 Смежные вопросы

  • Нет связанных вопросов^_^