Шестнадцатеричные значения регистров?x86 - PullRequest
4 голосов
/ 30 сентября 2010
MOV DL,AL

"MOV DL" = B2

Но каково значение шестнадцатеричного байта для AL? Где они перечислены?

Я только что понял, что это должен быть другой код операции! Кто-нибудь может указать мне правильное направление?

Ответы [ 3 ]

18 голосов
/ 30 сентября 2010

Из Руководства разработчика ПО для архитектуры Intel, том 2: Справочное руководство по набору инструкций , таблица 3-1. Регистрация кодировок, связанных с номенклатурой + rb, + rw и + rd, стр. 3-3:

AL = 0 AX = 0 EAX = 0
CL = 1 CX = 1 ECX = 1
DL = 2 DX = 2 EDX = 2
BL = 3 BX = 3 EBX = 3
AH = 4 SP = 4 ESP = 4
CH = 5 BP = 5 EBP = 5
DH = 6 SI = 6 ESI = 6
BH = 7 DI = 7 EDI = 7

Чтобы ответить на ваш вопрос («ага, замечательно. Мне трудно найти список инструкций для перемещения регистров в регистры. Можете ли вы пролить свет?»):

Сначала приведем немного рыбы: (для 8-битных регистров)

8a c0        mov     al, al
8a c1        mov     al, cl
8a c2        mov     al, dl
8a c3        mov     al, bl
8a c8        mov     cl, al
8a c9        mov     cl, cl
8a ca        mov     cl, dl
8a cb        mov     cl, bl
8a d0        mov     dl, al
8a d1        mov     dl, cl
8a d2        mov     dl, dl
8a d3        mov     dl, bl
8a d8        mov     bl, al
8a d9        mov     bl, cl
8a da        mov     bl, dl
8a db        mov     bl, bl

А вот как начать ловить рыбу:

В руководстве по набору инструкций Intel найдите инструкцию MOV на стр. 3-402. Вы найдете таблицу, в которой перечислены различные разновидности инструкции MOV, начиная с:

88 /r MOV r/m8,r8 Move r8 to r/m8
89 /r MOV r/m16,r16 Move r16 to r/m16
89 /r MOV r/m32,r32 Move r32 to r/m32
8A /r MOV r8,r/m8 Move r/m8 to r8
8B /r MOV r16,r/m16 Move r/m16 to r16
8B /r MOV r32,r/m32 Move r/m32 to r32

Обратите внимание, как наша рыба выше использует код операции 8A. Как вы можете догадаться, r8 - это 8-битный регистр, а r / m8 может быть либо 8-битным регистром, либо байтом из памяти. Также обратите внимание, как доступны различные коды операций MOV для 16- и 32-разрядных регистров и значений (r16, r32). На страницах с 3-2 по 3-5 объясняются различные типы аргументов, которые вы можете указать в инструкции MOV.

Но, вы можете сказать, это не говорит вам достаточно о том, как построить следующие байты в инструкции. Для этого посмотрите раздел 2.1 - Общий формат инструкции, начиная со страницы 2-1. Инструкции x86 могут состоять из последовательностей длиной до 6 байтов: префиксы, код операции, ModR / M, SIB, смещение и непосредственные значения. Наши инструкции по перемещению регистра просты и включают только код операции (8A) и байт ModR / M.

Разбивка байта ModR / M документирована в разделе 2.4, а также во всеобъемлющих таблицах на страницах с 2-5 по 2-6. Вы обнаружите, что байт ModR / M может кодировать регистр источника и назначения. Например, для перехода от AL к DL вы будете использовать значение D0 ModR / M, дающее инструкцию 8A D0.

2 голосов
/ 30 сентября 2010

Читать "Intel® 64 и IA-32 Архитектуры Руководство разработчика программного обеспечения Том 2А: Справочник инструкций, A-M "

1 голос
/ 30 сентября 2010

Вы найдете все коды операций в некоторых хороших таблицах для x86 на http://www.sandpile.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...