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.