экспертов, мне интересно, преобразование Intel x86 machineCode / AssemblyCode является односторонним или двусторонним?
означает, что ассемблер ---> machineCode и machineCode ---> AssemblyCode оба доступны.
поскольку машинный код x86 различается по размеру (1-15 байт), а код операции варьируется (1-3 байт), как определить, что один код операции равен 1 байт, 2 байт или 3 байт?
и я так и не нашел пример префикса инструкций x86, если здесь 1-байтовый префикс, как определить, что это префикс или код операции?
конечно, assemblyCode ---> machineCode, тождество мнемоники + oprand [w / b] может определить ответ машинного кода путем сопоставления определенной MappingTable.
но, когда процесс обратный:
{bbbbbbbb, bbbbbbbb, bbbbbbbb, // инструкция1
BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, // instruction2
BBBBBBBB, BBBBBBBB // instruction3
}
---->
{BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB, BBBBBBBB}
я не знаю, какие значащие биты или байты определяют, какова длина (какой размер) одной инструкции.
Кто-нибудь скажет мне, как это определить? (Размер кода операции, пример префикса.)
спасибо за помощь.