Pregunta

Estoy aprendiendo asm y aquí está uno de mis (muchos) problemas: Me gustaría cambiar el valor de algún índice de una matriz. Digamos que:

  • % eax contiene mi nuevo valor
  • la parte superior de la pila (es decir, (0)% esp) contiene el índice de la matriz
  • -4 (% ebp) contiene la dirección de la matriz.

He intentado movl %eax, (-4(%ebp),0(%esp),4) pero no funcionó. Peor aún, lanza un error de sintaxis: bobi.s: 15: Error: chatarra `(% ebp), 0 (% esp), 4)' después de la expresión

¿Qué es la sintaxis correcta?

¿Fue útil?

Solución

No hay una sola instrucción de hacer esto en ensamblador x86. Usted tiene que encontrar un registro disponible, lo utilizan para almacenar la dirección de la matriz que se obtiene de -4(%ebp), encontrar otro registro para mantener el 0(%esp) índice, y sólo entonces se hace posible acceder a la celda en la que está interesado en (y en más conjuntos RISC-como, usted todavía necesita añadir estos dos registros juntos antes de poder hacer el acceso a la memoria).

Suponiendo que los registros están disponibles, algo como:

movl -4(%ebp), %ebx
movl 0(%esp), %ecx
movl %eax, 0(%ebx,%ecx,4)

debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top