инструкция jmp *%eax

В документе для Google Native Client авторы определяют nacljmp как следующие две инструкции:

and   $0xffffffe0, %eax   # Clears the 5 least significant bits in %eax.
jmp   *%eax

Во-первых, я вижу, что они очищают 5 младших битов, чтобы округлить указатель до 32-байтовой границы выравнивания, прежде чем перейти к ней. Возможно, для реализации тегового указателя с использованием младших 5 бит для данных.

Однако что означает звездочка перед %eax?

Я безуспешно искал несколько руководств по сборке x86.


person Community    schedule 12.06.2015    source источник
comment
Возможно, 32-битное содержимое данных адреса памяти указано значением eax?   -  person barak manos    schedule 12.06.2015
comment
@lurker: Да, это косвенный переход, но это *%eax без скобок.   -  person Michael    schedule 12.06.2015


Ответы (1)


jmp *%eax — это синтаксис AT&T для jmp eax, который является одной из форм jmp r/m32. Он перейдет к адресу, содержащемуся в регистре eax:

Перейти рядом, абсолютный косвенный адрес, указанный в r/m32.

Другой формой инструкции перехода того же типа является jmp *(%eax), что соответствует jmp [eax] в синтаксисе Intel. Он перейдет к адресу, хранящемуся в 32-битной ячейке памяти, на которую указывает регистр eax.

person Michael    schedule 12.06.2015