Как инструкции и данные хранятся в памяти?

945
Netasd

Я отлаживаю программу на C #, и представление дизассемблирования показывает это:

0x006E2813 pop ebx
0x006E2814 pop esi

Таким образом pop ebx, хранится в 1 байте (в одном адресе), но как это может быть, так как popсама инструкция имеет размер 1 байт?

Или он показывает только данные ( ebx), так где хранятся инструкции?

-4

1 ответ на вопрос

0
grawity

how can that be since the pop instruction itself is 1 byte large?

It's encoded to different bytes depending on which register it uses. pop ebx is 0x5B, pop esi is 0x5E. There are many websites and manuals documenting the x86 instruction encoding.

Язык ассемблера обычно использует байты в качестве операндов для хранения «непосредственных» значений, значений, которые являются ячейкой памяти, или значений, которые указывают на нее. Регистры не живут в памяти, и x86 не имеет достаточно регистров, чтобы сделать использование даже 8-битного байта полностью эффективным для обращения к регистру (у вас было бы много потерянных битов), поэтому имеет смысл кодировать их как часть инструкции. LawrenceC 9 лет назад 1

Похожие вопросы