Duda teorica respecto a intel 8086

Duda teorica respecto a intel 8086

de Sebastian Herrera Recondo -
Número de respuestas: 4

Buenas, tengo una consulta que me surgió escuchando el teórico. 

Respecto al uso de word ptr, tenia entendido que Intel 8086 direccionaba de a byte y los accesos a memoria siempre traían 1 byte, esto es correcto? En el caso de que no sea así y se puedan traer 2 bytes de memoria (que entiendo es para lo que serviría el word ptr) se estarian trayendo 2 direcciones de memoria consecutivas? Digamos si se pide traer 16 bits de la direccion fisica 0x12345h, se estaria trayendo el byte guardado en 0x12345h y el byte guardado en 0x12346h ?


Muchas gracias

En respuesta a Sebastian Herrera Recondo

Re: Duda teorica respecto a intel 8086

de Federico Rivero -

Estimado,

Las instrucciones que acceden a memoria pueden hacerlo en modos de 8 o 16 bits (1 o 2 bytes). El modo queda determinado si hay algún registro interviniendo en la operación. Por ejemplo, la instrucción:

mov AL, ES:[40]  

Es de 8 bits porque se está moviendo desde a memoria a un registro de 8 bits. Ahora, la siguiente instrucción:

cmp [BX + 4], CX  

Es de 16 bits, porque se está comparando memoria con un registro de 16 bits. Las directivas byte ptr y word ptr solo intervienen cuando hay ambigüedad, es decir, cuando no aparecen registros en la instrucción (porque un registro ya te define el modo), el único ejemplo que les aparece es cuando se trabaja con memoria vs inmediato, por ejemplo:

ADD ES:[SI], 4 

Esa instrucción podría indicar tanto agregar 4 al byte apuntado por ES:[SI], o agregar 4  a la palabra de 16 bits que inicia en ES:[SI]. Para desambiguar, se debe usar byte ptr o word ptr.

ADD word ptr ES:[SI], 4  , por ejemplo.

En caso de que la instrucción sea de 16 bits, efectivamente funciona como vos decís, se trabaja con el byte apuntado por la instrucción (en el caso anterior ES;[SI]), y el byte siguiente (ES:[SI + 1]). Como x86 es little endian, el primero es el byte bajo de la palabra y el segundo el byte alto. 

Avisame si algo no se entiende :)


Saludos,
Federico

En respuesta a Federico Rivero

Re: Duda teorica respecto a intel 8086

de Nicolás Adriano Mayora Roth -
Buenas Federico,

Con respecto a lo ultimo que escribiste: por ejemplo, la instruccion MOV AX, ES:[20] deja el byte ubicado en ES:[20] en AL y ES:[21] en AH?

Un saludo,
Nicolás