2012-02-08 16 views
17

estoy tratando de entender cómo funciona el lenguaje ensamblador para una clase de arquitectura de micro-ordenador, y yo nos enfrentamos las diferentes sintaxis en los ejemplos:

sub $48, %esp 
mov %eax, 32(%esp) 

¿Qué significan estos códigos? ¿Qué es el operando 32 además del registro esp?

Respuesta

19

Eso no es sintaxis Intel, es AT&T syntax, también llamado GAS syntax.

el prefijo $ es para immidiates (constantes), y el prefijo % es para registros (son * obligatorios **).

* A menos que se especifique la opción noprefix, consulte here & here.

+0

Muchas gracias, yo no sabía dónde buscar este – juliensaad

+1

no se requiere la '%' prefijo si el uso de 'noprefix' Directiva http : //stackoverflow.com/questions/549347/how-to-use-address-constants-in-gcc-x86-inline-assembly –

+0

@ LưuVĩnhPhúc: Interesante, he visto esa directiva antes, probablemente porque está extremadamente mal documentada :(https://sourceware.org/binutils/docs/as/i386_002dVariations.html – Necrolis

1

Como dijo @ Necrolis, está escrito en AT & T sintaxis. Significa:

subtract 48 from the register esp (the stack pointer). 
store the contents of eax to the four bytes starting at (esp + 32). 
0

Esta es AT & sintaxis T para x86. En AT &, T % generalmente denota un registro, mientras que $ se reserva para inmediatos. Si omite el th $, el ensamblador interpretaría el 48 como una dirección.

1

Sí, "32 (% esp)" indica un desplazamiento de 32 desde% esp.

+0

GAS lo llama "Referencias de memoria", documentado en: https://sourceware.org/binutils/docs-2.18/as/i386_002dMemory.html concepto x86 resumido brillantemente en: https://en.wikipedia.org/wiki/X86 #Addressing_modes –

0

Es lo mismo para

sub esp, 48 
mov [esp+32], eax 

en la sintaxis de Intel

+1

Hola - No estoy seguro de que esto realmente responda la pregunta ... ¿cuáles son los $ y%? –

+0

@TarynEast son prefijos para inmigrantes inmediatos y registros como Necrolis han dicho –

+1

Su publicación apareció en la cola de revisión de "baja calidad" ... por no tener suficiente explicación en ella. Mi recomendación se basó en eso ... Siéntete libre de editarlo para decir lo que has dicho antes;) –

Cuestiones relacionadas