C-a-r-o
Profesor del Modulo A
~* Queda prohibido no sonreír...
Ing. en Sistemas
Facultad Regional Buenos Aires
Mensajes: 230
Agradecimientos dados: 11
Agradecimientos: 1 en 2 posts
Registro en: Feb 2012
|
RE: [Aporte] Arquitectura Final 10/12/2014 Resuelto y explicado.
Holaa,
Consulta, en el ejercicio de la práctica que dice "Considerando el valor actual del registro CX indique cuantas veces la instrucción LOOP decrementa el registro hasta que se sale de la estructura repetitiva", el resultado no debería ser 9 en vez de 10?
Guiándome justamente del ejemplo que se adjunta en https://en.wikibooks.org/wiki/X86_Assemb...structions el ejemplo es con 5, y el resultado le da que lo tiene que decrementar 5 veces.
(10-12-2014 21:21)zogar escribió: Acabo de aprobar con un 9 hace 1 hora, y como se lo debo al foro, acá va todo lo que me acuerdo, explicado.
Si hoy no aprobaba, iba a actualizar LA GLORIA, con los finales de este año, pero bueno, ahora tengo que estudiar otra materia para la semana que viene. Voy a subir todo lo que tenga que hice para practicar y no este en el foro.
Basicamente para estudiar, me leí el libro de Quiroga dos veces y el de Angulo una. Solo las unidades que toman en el final, la parte de compuertas y numeros no. Y en Angulo lo de Benchmark y Pentium Pro y esas cosas raras tampoco. Esta es la segunda vez q voy a rendir, así q ya venia cargadito.
Hagan foco en: Segmentación, Paginación, Caché, Memoria Ram, Dispositivos de Entrada Salida, Interrupciones y Excepciones, Registros de proposito general, Registros EFlags, Registros de Segmentos, Registros de Punteros, Modos de Direccionamiento
Para angulo les tiro los capítulos:
4.5
5 todo menos el 5.6
6.2.1 a 6.2.4
7 todo, especialmente incapie en 7.3 7.4. el 7.5 no.
El 8 , 9 y 10 a full, recontra a full.
El 11 es bastante parecido al de quiroga, pero es re imporante.
El 14 a full.
EL 17 una idea de todo
El 19.4.1 y 19.4.2 esos dos a full.
Practica:
A1)
Dec es decrementar 1 el acumulador que nos indique como dato, en este caso CL se refiere a la parte baja, osea, a las ultimas 2 letras en hexa, si fuese CX en este caso seria lo mismo.
Entonces incremento Cx en 1 y queda BX=0009.
A2)
La dirección segmentada se forma como SS : SP (Stack Segment:Stack Pointer), y recordemos que a medida q se van cargando elementos en la pila esta va de FFFF decrementandose.
En la gloria esta:
Lugar vacío de la pila: SS : SP = SSx16 + SP
Último elemento de la pila: SS : SP+1 = SSx16+SP+1
Como pedia la segmentada no hacia falta hacer la cuenta. Si pide la física si tienen q hacer la cuenta.
Queda: 0090 : 4532
A3)
Sub es resta, osea vamos a hacer Bx-Cx.
Lo primero que tenemos que ver es cual es el Nro q representan ambos en entero signado.
Lo importante es el primer bit, si es 0 es positivo, si es 1 es negativo.
En este caso Bx es positivo y Cx tambien. En binario seria... Bx: 0000 1011 0000 1010 CX:0000 0000 0000 1010
Yo hice la cuenta en decimal, así que pasé ambos numeros a decimal, resté y despues el resultado a hexa nuevamente.
Tengan en cuenta q si alguno de los dos tenia un 1 en el primer bit, ese bit no forma parte del número, pq es el q indica el signo.
Bx=2826 Ax=10 2826-10 = 2816 entonces es 0B00 en hexa.
A4)
LOOP es Decrementar CX y saltar si es distinto a cero. Es para hacer un ciclo fijo. Se usa como LOOP <Etiqueta> . Donde salta a etiqueta mientras CX no sea cero.
Con esto en mente, si CX vale 10, para llegar a 0 le faltan 10.
Dejo links que explican esto:
Cita:loop arg
The loop instruction decrements ECX and jumps to the address specified by arg unless decrementing ECX caused its value to become zero. For example:
mov ecx, 5
start_loop:
; the code here would be executed 5 times
loop start_loop
http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow
B1y2) La trampita acá era FORMATO PALABRA, hay q recordar que palabra: 16 bits, doble palabra 32bits, cuadruple 64.
Si sabes eso... facil...
0000 0000 0000 0001 En Hexa 0001
Para punto flotante tenemos 1.0 la coma tenemos q correrla hasta q qde un 1 adelante, en este caso no tenemos q correr nada así q la mantisa es 0+127 y la característica son todos ceros pq el 1 de adelante no cuenta. Entonces qda 0011 1111 1000 0000 0000 0000 0000 0000. En Hexa.. 3F800000
C1)
El número es la posición en la tabla de interrupciones IDT
En el libro de Quiroga entre las Pags 162 y 168 nos explica q los códigos de instrucción es como que estan "mapeados" entonces los primeros X bits representan la operación los X bits siguientes el operando 1 y los otros bits el operando 2.
Entonces leyendo todo eso, te das cuenta q digamos... hay una parte que es fija y otra q cambia del código de instrucción. El 02 del código representa el 2.
Infiriendo el código para INT 3 va a ser CD03
C2)
La respuesta es que el procesador va a ir a la dirección que le indique la tabla que tiene mapeada las interrupciones.
Pq cada interrupción tiene un procedimiento especifico cuya dirección se encuentra en la tabla.
C3)
Lo que tenemos q ver acá es cuantos bytes ocupa la instrucción, en este caso son dos bytes.
Entonces, el puntero se va en la AB55:0103 y vuelve con 2 bytes más pq es lo que ocupa la instrucción anterior.
Seria... 0583:0105
Recuerden q el primer numero es CS y el segundo es el IP. El segmento es el mismo, solo aumenta el IP.
Muy similar al punto A2 pero en vez del puntero a pila, va el puntero de instrucción.
Si pidiese la física, ya saben, agregar cero (o mult 16 en decimal) y sumar.
La teoria está comentada en el mensaje 6 de este tema.
http://www.utnianos.com.ar/foro/tema-apo...#pid405284
|
|