UTNianos

Versión completa: [Arquitectura]Ejercicio assembler Final 29-10-2009
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola gente, tengo dudas con este ejercicio:

Tenemos las siguientes lineas de un programa assembler:

3B45:0103 mov al,[0111]
3B45:0106 mov ah,[0114]

Suponiendo que CS=DS y que en las posiciones de memoria referenciadas encontramos:

3B45:0110 25 31 71 65 93

1. Calcular la dirección efectiva de la primera instrucción [3B450 + 0110]
2. Calcular la dirección efectiva del operando de la segunda instrucción [3B450 + 0114]
3. Decir cual será el valor del acumulador al terminar de ejecutarse la segunda instrucción [93-31]

Lo que está en negrita es de la resolución.
El ítem 1, no sería 3B450 + 0103 ??
El 3 no entiendo porque esa rta.

Si alguien puede ayudar le agradezco! :D
Saludos!!
uh master yo tengo el mismo ejericio en duda ajjajaja y rindo este miercoles!!! ojala alguien conteste XD
Direccion Efectiva:

La direccion segmentada se presenta asi:
[segmento]:[direccion] donde segmento son 2 bytes y direccion son 2 bytes.
La direccion efectiva, es la direccion que el microprocesador debe poner en su BUS de DIRECCIONES para acceder a la ram:
[direccion efectiva] = CS x 16 (base 10) + [direccion]

Multiplicar por 16 en binario es correr el dato 4 bits hacia la izquierda , y en hexadecimal es agregarle un cero al numero.



*)Podemos obtener CS , CS = 0x3B45
*)del enunciado DS = CS , entonces DS = 0x3B45
*)Pasamos las tres direcciones segmentadas del ejercicio a direcciones efectivas


3B45:0103 ( instruccion 1 , 3B45:0103 mov al,[0111] )
dir_efectiva = 0x3B45 x 0x10 + 0103 =
= 0x3B450 + 0103 =
= 0x3B553

3B45:0106 ( instruccion 2 , 3B45:0106 mov ah,[0114] )
dir_efectiva = 0x3B450 + 0106 =
= 0x3B556

3B45:0110
dir_efectiva = 0x3B450 + 0110 =
= 0x3B560




>>>>>>>
1. Calcular la dirección efectiva de la primera instrucción

por lo indicado arriba
RTA 0x3B553

<<<<<<<


*)Tama~no en bytes de cuanto ocupa una instruccion MOV :
Observamos que entre la dir_efectiva de la instruccion 1 y la dir_efectiva de la instruccion 2 hay 3 bytes de separacion.
Es decir mov al,[0111] ocupa 3 bytes y al ser mov ah,[0114] la misma instruccion MOV , inferimos que tambien ocupa 3 bytes.
vemos que el argumento de ambos MOV son 2 bytes que indican direcciones del DS (data segment) , [0111] y [0114]
nos queda un byte para el OPCODE "MOV AL," y "MOV AH,"
Se Infiere en que el primer byte es del opcode y los dos bytes siguientes del operando.


>>>>>>>
2. Calcular la dirección efectiva del operando de la segunda instrucción

dedujimos que el opcode ocupa un byte , y que comienza en la direccion efectiva 0x3B556
por todo lo que puse arriba sabemos que el operando comienza en el 2do byte de la instrccion
RTA 0x3B556+1 = 0x3B557

<<<<<<<<


*)Datos almacenados [esta informacion figura en el enunciado]


3B45:0110 25 31 71 65 93
pasamos cada byte indicado a la direccion efectiva: [la direccion efectiva la calculamos arriba de todo]
0x3B560 25
0x3B561 31
0x3B562 71
0x3B563 65
0x3B564 93




*)La instruccion
mov al,[0111]
Lee de la direccion DS:0111 el byte alli almacenado y lo guarda en el registro AL
Como DS=CS , la direccion efectiva referenciada es:
3B45:0111=0x3B561
Leera el byte de la posicion en RAM 0x3B561 y la almacenara en AL
Por lo tanto queda
AL=0x31

Lo mismo con
mov ah,[0114]
3B45:0114=0x3B564
AH=93


>>>>>>>
3. Decir cual será el valor del acumulador al terminar de ejecutarse la segunda instrucción

AX es el acumulador que tiene 16 bits , los 8 bits mas significativos estan representados por AH y los 8 bits menos significativos estan representados por AL , es decir.
RTA AX=0x9331

<<<<<<<

Si hay algun error en lo que expuse, avisen.
Si quieren respuestas mas rapidas , usen la lista de yaho de Arquitectura.
Saludos.
te hago una pregunta, como sabes tanto? donde lo aprendiste? del secundario? de un libro? porq a mi no me explicaron absolutamente nada de esto, y por mas q me digas como se resuelven, sino entiendo bien el concepto nunca lo voy a sacar.
un abrazo y te felicito por tenerla tan clara!

otra cosa, las respuestas q das vos, son distintas a las q dan la resolucion, q onda eso?
saludos
Como decia TUSAM ... puede fallar...
lo lei nuevamente , y descubri que no interprete el enunciado como el profesor quiso transmitir.
me cito y trato de corregirlo:

alexandermonday escribió:Direccion Efectiva:
>>>>>>>
2. Calcular la dirección efectiva del operando de la segunda instrucción

dedujimos que el opcode ocupa un byte , y que comienza en la direccion efectiva 0x3B556
por todo lo que puse arriba sabemos que el operando comienza en el 2do byte de la instrccion
RTA 0x3B556+1 = 0x3B557

<<<<<<<<

Aca interprete que pedia la ubicacion en la memoria fisisca donde estan los operandos, que NO tiene tanto sentido como calcular donde apunta el operando, que es lo mas interesante. En el caso de la instruccion es donde ira a buscar el byte para asignarlo al registro AH.
Creo que el enunciado deberia ser mas claro, algo asi como:
2. Calcular la dirección efectiva donde apunta el operando de la segunda instrucción
3B45:0106 mov ah,[0114]
Aqui la direccion segmentada es DS:dir , 3B45:0114 , porque DS=CS
dir_efectiva = 0x3B45 x 0x10 + 0x0114 = 0x3B564
RTA 0x3B564




Saludos.
Ale.
alexandermonday, cual es la lista de yahoo de Arquitectura??

Gracias por aportar tus conocimientos y por la buena onda :D

Saludos!
arquitectura_computadoras@gruposyahoo.com.ar
http://ar.groups.yahoo.com/group/arquit ... putadoras/
Email de la jefa de catedra Patricia Quiroga ipquiroga arroba gmail.com
antes que todo gracias por contestar estas dudas y te hago una pregunta, cuando nos dan esto en el ejercicio:

3B45:0110 25 31 71 65 93

esos numeros 25 31 71 65 93 tengo que interpretar que estan en hexadecimal?? eso no me cierra.
osea que cada uno ocupa un byte, y la memoria quedaria asi:
3B45:0110 25
3B45:0111 31
3B45:0112 71
3B45:0113 65
3B45:0114 93
?? esa es mi duda
gracias por responder!
Si, la parte de assembler todo se representa en hexadecimal. al menos que se indique lo contrario.
saludos.
URLs de referencia