- Teniendo en cuenta que los registros tienen 16 bits, lo que traigo desde memoria son 1 o 2 bytes?
- De qué forma están organizadas las direcciones de memoria?, o sea, cuando me refiero a una "dirección de memoria", me estoy refiriendo a la dirección de 1 byte? o eso depende de la arquitectura del procesador?
- En el caso de que estas direcciones correspondan a un solo byte, hay posibilidad de leer, en el ejemplo de una arquitectura de 16 bits, un solo byte desde memoria o al hacer MOV siempre te trae 2 bytes contiguos?
Re: Direccionamiento de memoria
Hola,
Creo que lo que estas preguntando depende de la arquitectura. Te contesto las preguntas para Intel 8086:
Teniendo en cuenta que los registros tienen 16 bits, lo que traigo desde memoria son 1 o 2 bytes?
En 8086 depende, podes traer un byte como 2 bytes.
Por ejemplo: MOV AX, [dir]
ahí estas trayendo 2 bytes dado que Ax es de dos byte.
Si pones MOV AL, [dir]
ahí estas trayendo 1 byte dado que AL es la parte baja del registro Ax siendo de 1 byte.
Lo mismo al revés,
Si haces MOV [dir], AX. Estas moviendo Ax de 2 bytes a la dirección dir. Que como cada palabra de memoria es de 1 byte, lo almacena en la dirección dir y dir + 1. En el byte de la dirección dir pone la parte baja y en el byte de la dirección dir + 1 pone la parte alta (Little Endian).
Si haces MOV [dir], AL. moves el byte contenido en Al a la dirección dir.
Ahora bien cuando no queda bien definido si queres mover un byte o una palabra a memoria por ejemplo.
MOV [dir], 0 ahí no se sabe si queres mover el byte 0 a la dirección dir, o dos byte a la dirección dir. Por esto existen BYTE PTR y WORD PTR.
Si la instrucción es MOV BYTE PTR [dir], 0, se mueve un byte.
Si la instrucción es MOV WORD PTR [dir], 0, se mueve dos byte.
De qué forma están organizadas las direcciones de memoria?, o sea, cuando me refiero a una "dirección de memoria", me estoy refiriendo a la dirección de 1 byte? o eso depende de la arquitectura del procesador?
En Intel 8086 si tenes una dirección de memoria y traes una palabra vas a traer lo que esta en esa dirección de memoria y en la consecutiva. Si traes un byte vas a traer el byte al cual apunta esa dirección. No se si estoy contestando esta pregunta? (creo que no jeje)
En el caso de que estas direcciones correspondan a un solo byte, hay posibilidad de leer, en el ejemplo de una arquitectura de 16 bits, un solo byte desde memoria o al hacer MOV siempre te trae 2 bytes contiguos?
Creo que la respuesta esta en la 1.
Espero haberte ayudado un poco,
Saludos,
Matías.
Re: Direccionamiento de memoria
En Intel 8086 si tenes una dirección de memoria y traes una palabra vas a traer lo que esta en esa dirección de memoria y en la consecutiva. Si traes un byte vas a traer el byte al cual apunta esa dirección. No se si estoy contestando esta pregunta? (creo que no jeje)
Hola Marcelo, como va?
Cada dirección de memoria corresponde a un byte. La pagina 2 en las notas lo induce por como almacena los datos el procesador 8086.
http://eva.fing.edu.uy/file.php/195/presentaciones/presentacion8086-1de2.pdf
Una forma de verlo es la siguiente: Mira las instrucción Push, esta hace SP = SP - 2, hace lugar, restando 2 a la dirección ósea tomando dos bytes de la memoria y después escribe en esa dirección un elemento que estrictamente tiene que ser de 2 byte.
Mismo te vas a encontrar arreglos que empiezan en la dirección SI(o cualquier otra) y para recorrerlos tenes que ir sumando de a dos, el elemento 0 esta en SI, el 1 esta en SI + 2....
Te recomiendo que te bajes emu8086, es un simulador de assembler donde podes escribir el código, correrlo, ver las flags, el stack y la memoria. Te corrige errores de sintaxis y además podes ver si anda bien lo que hiciste.
Saludos
Cuando te movés en la memoria en 8086 de avanzas de a bytes, entonces en X+1 accedes a FB y FF.
Saludos, Gonzalo