2011-05-04 17 views
8

Por lo que he leído sobre mov, copia el segundo argumento en el primer argumento. Entonces, ¿qué hace esto?mov instrucción en ensamblado x86

 
movl 8(%ebp), %edx 

Se copia lo que está en EDX para el primer parámetro de la función (ya que un desplazamiento de 8 de ebp es un parámetro)?

Siento que lo que realmente significa es mover el primer parámetro al registro edx, pero leí en la Wikipedia que es al revés?

Respuesta

15
movl 8(%ebp), %edx 

se encuentra en "AT & T sintaxis"; en esta sintaxis, la fuente viene primero y el destino la segunda. Entonces sí, tu creencia es correcta. La mayoría de la documentación usa la "Intel Syntax", que tiene el orden inverso. Esta es una fuente de considerable confusión para las personas que no están familiarizadas con el ensamblaje x86.

En Intel sintaxis, su instrucción se escribiría:

mov edx, [ebp + 8] 

nota la ausencia de % antes de que los nombres de los registros, y el uso de corchetes en lugar de paréntesis, para la dirección, y la falta de un l sufijo en la instrucción. Estos son obsequios para saber qué forma de ensamblaje estás mirando.

+0

¿Cuál es el motivo para tener 2 dilectos de montaje diferentes? Como ha notado, esta puede ser una fuente común de confusión para los recién llegados, ya que usan convenciones completamente diferentes. – greatwolf

+0

@Victor T .: la sintaxis de Intel es lo que Intel especificó originalmente; La sintaxis de AT & T es una adaptación de una sintaxis de ensamblaje de Bell Labs destinada a ser utilizada en múltiples plataformas. –

+0

@Stephen: hay un error con Intel Synax. Debe haber 'mov [ebp + 8], edx' :) –

Cuestiones relacionadas