Этот вопрос уже достаточно обобщен - вам нужно закодировать, какие регистры вы хотите, чтобы инструкция работала (используя x86 в качестве примера, mov eax, ebx
нуждается в 2 из всех регистров, доступных в этой архитектуре, inc ecx
нуждается в одном).
У вас есть x регистров, поэтому вам понадобится бит log2 (x) для кодирования каждого из них. Поскольку для этого вам разрешено использовать только y бит, и вы можете кодировать в большинстве регистров пол (y/log2 (x)) одну команду.
(Ну, если у вас есть запасные биты вы все равно можете использовать их для частичного кодирования чего-то, но это, вероятно, не то, что речь идет тестирование ...)
Так, если общее количество регистров, например, 8: log2 (8) = 3 бита для каждого регистра. И у битов 8, поэтому макс: этаж (8/log2 (8)) = 2 Как вы знаете, как использовать для этого двоичный логарифм и пол? Спасибо – Bullen
, так как биты двоичные, n бит может кодировать 2^n элементов, поэтому обратный - log2. Пол состоит в том, что если у вас есть дополнительные 2 бита, вы не можете закодировать третий регистр. Однако вы можете использовать их для кодирования чего-то еще (например, для режима адресации памяти или масштаба и т. Д.). Но эти вещи специфичны для архитектуры, вопрос был общим. – Leeor
Чтобы решить этот тип вычислений правильным образом (не зависит от архитектуры) Сделайте log2 по числу регистров, чтобы узнать, сколько бит каждого регистра имеет размер, это обратное значение 2^n, например, например, в 8 регистр регистра: 2^8 = 256 и log2 (256) = 8 Использовать пол (количество регистров/log2 (бит кодировки команд), чтобы получить максимальные регистровые операнды в одной команде. Если пол отнят 8/log2 (8) = 8/3 (или 2.666 ...) Сложное время для понимания «лишних 2 бит» Спасибо – Bullen