Можно ли использовать 8-разрядные регистры (al, ah, bl, bh, r8b
) в режимах индексированной адресации в x86-64? Например:
mov ecx, [rsi + bl]
mov edx, [rdx + dh * 2]
В частности, это позволит использовать нижние 8-битные регистры в качестве смещения 0-255, что может быть полезно для некоторых ядер.
Я налил в руководства Intel, и они не являются явными в этом вопросе, но все примеры, которые они приводят, имеют только 32-разрядные или 64-разрядные базовые и индексные регистры. В 32-битном коде я видел только 16 или 32-битные регистры. Глядя на детали кодирования mod-r/m и SIB, также кажется, что он указывает на "нет", но достаточно сложный с достаточным количеством угловых случаев, что я не уверен, что правильно понял.
Меня больше всего интересует поведение x86-64, но, конечно, если это возможно в 32-битном режиме, я бы только хотел узнать.
Как дополнительный вопрос слишком мал и связан с тем, чтобы заслужить еще одну запись - могут использоваться 16-битные регистры для базы или индекса? Например, mov rax, [rbx + cx]
. Мое расследование указывало на тот же ответ, что и выше: вероятно, нет.