2009-09-09 21 views
10

¿Cuál es el tamaño de cada instrucción asm? Cada instrucción toma cuántos bytes? 8 bytes? Cuatro para el código de operación y Cuatro para el argumento? ¿Qué sucede cuando tienes un opcode y 2 argumentos, en mov, por ejemplo? ¿Tienen un tamaño fijo en la memoria o varían? ¿Tiene EIP algo que ver con esto, su valor siempre se incrementa en uno, siendo totalmente independiente del tipo de instrucción que está pasando?¿Cuál es el tamaño de cada instrucción asm?

Pregunto esto cuando estaba leyendo http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames, me encontré con el hecho de que parece que una instrucción de llamada es equivalente a una instrucción push y jmp.

call MYFUNCTION 
mov my_var, eax 

ser el mismo que

push [eip + 2]; 
jmp MYFUNCTION; 
mov my_var, eax 

Cuando estamos empujando [EIP + 2] en la pila, a qué valor estamos señalando a continuación? A la línea justo al lado de "jmp MYFUNCTION", mov my_var eax, ¿verdad?

ps: MSVC++ señala un error en la primera línea, ya que dice que eip no está definido. Funciona para eax, esp, ebp, etc. ¿Qué estoy haciendo mal?

+0

Esta pregunta no tiene nada que ver con C++, por lo que se eliminó la etiqueta. –

+0

Debe ser push eip + 2, no push [eip + 2]. –

+0

"push eip" no funciona. –

Respuesta

16

El tamaño de una instrucción de máquina depende de la arquitectura del procesador; hay arquitecturas con instrucciones de tamaño fijo, pero obviamente se está refiriendo al IA-32 e Intel 64 y tienen longitudes de instrucción muy variables. El puntero de la instrucción siempre se incrementa por la duración de la instrucción procesada.

Puede descargar el IA-32 and Intel 64 manuals de Intel: contienen casi todo lo que puede saber sobre la arquitectura. Puede encontrar un mapa de código de operación y un formato de conjunto de instrucciones en Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z en las páginas 623 a 768.

+1

Si cada instrucción tiene una longitud diferente, ¿cómo podemos nosotros, o incluso la computadora, saber en memoria qué es una instrucción y ¿Qué es un argumento? Si cada instrucción tuviera el mismo tamaño, la computadora sabría que, digamos, cada 4 bytes correspondía a una instrucción nueva. Pero si su tamaño varía, eso no es cierto. Al final (¡o al principio!) De cada instrucción, ¿hay algún byte especial o algo? Gracias –

+7

Absolutamente. El primer byte incluye suficiente información para determinar si se debe leer un segundo byte y el segundo byte permite determinar si la instrucción tiene un tercer byte y así sucesivamente. Solo eche un vistazo a las tablas de códigos de instrucciones. –

+3

elysium @devoured, los bytes son * especiales * (códigos de operación) que indican instrucciones extendidas. –

2

El tamaño del código de la máquina depende de la arquitectura del procesador.

Por ejemplo, en IA-32, el tamaño de la instrucción varía de 1 a 6 bytes (o más).

+0

Cuando dice que el tamaño de la instrucción varía de 1 a 6 bytes en diferentes computadoras o en la misma computadora, algunas instrucciones son más grandes que otros? –

+1

en la misma computadora, por supuesto. Sí, una instrucción puede estar compuesta de muchos bytes. –

+2

No estoy seguro de lo que quiere decir con "1 a 6 o más", pero las instrucciones x86 pueden tener más de 6 bytes –

Cuestiones relacionadas