Этот вопрос закрыт для ответов, так как повторяет вопрос Как процессор распознает длину команды?
@daniil14056

Как процессор знает сколько байт занимает команда машинного кода?

Некоторые команд могут 1 байт занимать другие больше, как машина определяет сколько байт нужно считать, и раcдекодить.
В ассемблере есть номера строк, и команда на строке, а что это в Машином коде, их же там нету, тогда как процессор знает сколько их просчитать. Может часть первых битов определяет сколько байтов нужно посчитать.
90                                                NOP           ;;//  почему  процессор к примеру 90 D9 05 B0
D9 05 B0 08 1E 01                      dword ptr ds:[11E08B0h]  
011E0879 DD 5D BC                   qword ptr [ebp-44h]  
 011E087C 8B 05 44 23 D0 03    mov         eax,dword ptr ds:[3D02344h] //  Console.WriteLine("SSS "+r)
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@none7
Инструкции x86 разбросаны довольно хаотично по числовому диапазону, не говоря уже про их длину, но самому процессору намного проще декодировать инструкции, чем программам. Он просто имеет внутри дерево, если старший бит первого байта инструкции равен 0 одна ветвь, иначе другая. Так по ветвям он спускается и например доходит до инструкции 01010b (push reg) и вот он уже знает, что длина этой инструкции 5 бит + 3 бита аргументов. И может даже сразу запустить найденную инструкцию, если это какой-нибудь i286. И всё за 1 такт.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pfg21
ex-турист
первое машинное слово команды попадает в декодер команд, и уже декодер команд распознает, что делать с остальными словами.
в современом многостадийном декодере это происходит задолго до ее выполнения. поэтому задержек нет.
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
Нет никакого лёгкого метода определить, считай что чистый хардкод длинны команды.
Вот видит он 8B 05, значит дальше идёт адрес.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы