2013-09-23 2 views
0

Пример: у процессора есть x регистры и y бит кодировки команд используется для ссылки на операнды регистров. Сколько регистров может быть указано в одной команде? Архитектура неизвестна.Как зависит размер регистра и кодировка/операнды?

Есть ли общее решение для этого?

ответ

3

Этот вопрос уже достаточно обобщен - вам нужно закодировать, какие регистры вы хотите, чтобы инструкция работала (используя x86 в качестве примера, mov eax, ebx нуждается в 2 из всех регистров, доступных в этой архитектуре, inc ecx нуждается в одном).

У вас есть x регистров, поэтому вам понадобится бит log2 (x) для кодирования каждого из них. Поскольку для этого вам разрешено использовать только y бит, и вы можете кодировать в большинстве регистров пол (y/log2 (x)) одну команду.

(Ну, если у вас есть запасные биты вы все равно можете использовать их для частичного кодирования чего-то, но это, вероятно, не то, что речь идет тестирование ...)

+0

Так, если общее количество регистров, например, 8: log2 (8) = 3 бита для каждого регистра. И у битов 8, поэтому макс: этаж (8/log2 (8)) = 2 Как вы знаете, как использовать для этого двоичный логарифм и пол? Спасибо – Bullen

+1

, так как биты двоичные, n бит может кодировать 2^n элементов, поэтому обратный - log2. Пол состоит в том, что если у вас есть дополнительные 2 бита, вы не можете закодировать третий регистр. Однако вы можете использовать их для кодирования чего-то еще (например, для режима адресации памяти или масштаба и т. Д.). Но эти вещи специфичны для архитектуры, вопрос был общим. – Leeor

+0

Чтобы решить этот тип вычислений правильным образом (не зависит от архитектуры) Сделайте log2 по числу регистров, чтобы узнать, сколько бит каждого регистра имеет размер, это обратное значение 2^n, например, например, в 8 регистр регистра: 2^8 = 256 и log2 (256) = 8 Использовать пол (количество регистров/log2 (бит кодировки команд), чтобы получить максимальные регистровые операнды в одной команде. Если пол отнят 8/log2 (8) = 8/3 (или 2.666 ...) Сложное время для понимания «лишних 2 бит» Спасибо – Bullen

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