2016-04-25 10 views
1

Я новичок в сборке и мой вопрос:x86 - Количество регистров против числа зарезервированных битов

Если машина имеет, например, п регистров. Сколько бит должно быть зарезервировано в инструкции сборки для обращения к каждому из n регистров?

И насколько может функциональный раскол сократить необходимые бит?

+2

Это звучит как домашнее задание, особенно последняя часть. Если вы не можете понять, что это такое, вам действительно нужен кусок бумаги и сесть, чтобы подумать. – DarkDust

+2

Обратите внимание, что ISA x86 не использует инструкции фиксированного размера. Если вас интересуют детали кодирования команд на x86, прочитайте руководство по разработке программного обеспечения Intel (http://www.intel.com/content/www/us/en/processors/architectures-software-developer- manuals.html) (раздел о байтах ModR/M может представлять для вас особый интерес). – Michael

+0

@DarkDust Я просто следую учебнику, и мне интересно, как они получают наименьшее количество бит. – ethane

ответ

4

Нет универсального ответа на этот вопрос. Очевидно, вам понадобится для большинства бит, чтобы сохранить количество регистров. Итак, если у вас 12 регистров, вам понадобится 4 бита (2^4 == 16).

Но набор инструкций может обрабатывать некоторые регистры по-разному (например, иметь инструкции, которые неявно адресуют только конкретный регистр, см. LOOP для x86). Таким образом, у процессора может быть 9 регистров, но поскольку к нему можно получить доступ только с помощью специальной инструкции, вам потребуется всего 3 бита для адресации остальных 8. Кроме того, некоторые инструкции могут допускать только определенное подмножество регистров, что также уменьшает количество биты, необходимые для их устранения (например, инструкция позволяет работать только с регистрами 0-3).

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

+0

'loop' или' movsb' будет лучшим примером. 'rep' не является отдельной инструкцией и может применяться только к нескольким другим insns. Что вы имели в виду, говоря, что некоторые коды операций могут обращаться только к ограниченным регистрам? Вы говорите о 64-битном режиме без префикса REX? Я не могу придумать пример, где у вас ограниченный выбор регистра, который закодирован в меньшем количестве бит, чем обычно. (В отличие от 16-разрядных режимов адресации, и что 'esp/rsp' не может быть индексным регистром в режимах 32/64 бит адресации.) –

+0

@PeterCordes: Вы правы,« цикл »- гораздо лучший пример. Обновил мой ответ. Что касается ограниченных регистров: мой ответ касается общих (так же теоретических) конструкций ЦП, хотя я слабо помнил, что были инструкции с такими ограничениями в 8086 и/или M68000; пытаясь найти их, кажется, я ошибся. Семейство x86 также не использует окна регистрации, BTW. – DarkDust

+1

Вы должны вынуть «некоторые коды x86 сделать это», потому что это неправильно. Остальная часть вашего ответа хорошая (и я не был downvoter), и ясно, что вы не говорите о x86 в остальной части. Если вы ищете примеры, некоторые архитектуры (ARM, IIRC, но я не уверен) имеют инструкции, которые используют два регистра, а вторая команда неявно является нечетным/четным партнером явного reg (переключает низкий бит, вместо добавления 1). Для специальных регистров: MIPS имеет 32 регистра GP, а HI и LO - результат полного умножения (32x32b => 64b), хороший пример для вашего 8 + 1. –