Compré el libre de Francisco Charte Ojeda, llamado Lenguaje Ensamblador (El Pequeño) y en general, todo bien, se va entendiendo, pero tengo un pequeño problema, no llego a entender un modo de direccionamiento (estuve buscando por google y todavía lo entiendo peor; será que soy tonto). Es el llamado "Indexado" (me pasa lo mismo con el escalado que es parecido). Ahi explica que se le puede sumar desplazamiento. A que se refiere esto? Un ejemplo del que me muestra es el siguiente:
Código:
MOV AL, [BX+SI+4]
Me podriais explicar que ocurre en este ejemplo? Que es exactamente lo que se transfiere al registro AL?
También os muestro el primer ejercicio práctico que me propone hacer(esto es el resultado, es decir, la solución), por si necesitais un poco más de contexto de código (no es necesario que me lo expliqueis, no os preocupeis):
Código:
#include <stdafx.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
struct Incidencia {
char carretera[8];
short kilometro;
char descripcion[128];
};
Incidencia hoy[] = {
{ "A44", 32, "Nieve"},
{ "A6", 173, "Accidente"},
{ "M30", 8, "Retenciones" }
};
char *via, *problema;
short altura;
__asm {
;EBX apunta al inicio del vector
lea ebx, hoy
; y esi tiene tamaño por elemento
mov esi, SIZE Incidencia
; se recupera puntero a la cadena carretera
lea eax, [ebx+esi*2]
mov via, eax
;se recupera dato 16 bits que indica kilometro
mov ax, [ebx+esi*2+8]
mov altura, ax
; se recupera puntero cadena descripcion
lea eax, [ebx+esi*2+10]
mov problema, eax
}
cout << problema << " a la altura del KM " << altura << " en la " << via << endl;
return 0;
}
Saludos! Gracias de antemano. Se que os he metido un rollazo, pero es que no puedo avanzar y alli me quedaré si alguien no me lo soluciona...