Obligatorio 1
-
Upload
ernesto-dufrechou -
Category
Documents
-
view
218 -
download
0
Transcript of Obligatorio 1
-
8/17/2019 Obligatorio 1
1/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
Arquitectura deComputadores 2
aboratorio !
"ocumentaci#n dea $oluci#n Implementada
Integrantes C.I.
"u%rec&ou asca' (rnesto )*+0,*-20.-Almeida Rodrígue/' Alberto (mmanuel )* 2 *20).0Fune/ 1utierre/' uan (rnesto *3-+*),3.)
Informe Obligatorio 1. Pagina 1 de 8
-
8/17/2019 Obligatorio 1
2/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
Introducción1.1 Introducción
El propósito de este documento es brindar una descripción general del Diseño
de la solución implementada para resolver el problema planteado en el primer
laboratorio de Arquitectura de Computadores 2.
1.2 Estructura del documento
El documento esta dividido en dos partes, la introducción y la descripción de la
solución. Esta ltima esta subdividida en dos partes, que son las partes A y !
del obligatorio.
2 Descripción de la "olución Implementada
2.1 #arte A$a solución de la parte A del obligatorio %ue resuelta en base a la re%erencia &
'ttp())***.osdever.net)tutorials)brunmar)tutorial+ &.p'p brindada por los
pro%esores del curso en la letra del mismo. De todas maneras la solución es
e-plicada a continuación.
2.1.1 !ootloader bootloader.asm/El bootloader tiene como %uncion principal cargar desde la imagen de dis0ett los sectores
correspondientes al 0ernel y pasar a modo protegido para luego ceder el control a la rutina main
de dic'o 0ernel. Esta parte muestra un pseudocódigo de nuestra solución. $os comentarios
indican lo que se debe 'acer en el código real.
Pseudocódigo:
Informe Obligatorio 1. Pagina 2 de 8
http://www.osdever.net/tutorials/brunmar/tutorial_03.phphttp://www.osdever.net/tutorials/brunmar/tutorial_03.php
-
8/17/2019 Obligatorio 1
3/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
Usar instrucciones de 16 bits; // modo real [BITS 16]
Poner rutina en la dir 0 !"00; // #onde la BI$S comien%a a correr al comen%ar &e'etir
&eset dis(ette; // Se utili%a la int 0 1) con el reg *+ en 0
+asta ,ue no -a.a error; // Si reg * 0 -ubo error
&e'etir
seteo 'ar2metros; // indico cuantos sectores se 3an a cargar . donde
cargar sectores; // se utili%a la misma int 0 1) con el reg *+ en 04-
+asta ,ue no -a.a error; // Si reg * 0 -ubo error
#es-abilitar interru'ciones; //cli
"argar gdt; //lgdt
5odo 'rotegido; // el bit 0 de "&0 en 1 . un m' Usar instrucciones de )4 bits; // modo real [BITS )4]
#S7SS 710-;
8SP7 90000-; // to'e del stac(
Saltar a e ecutar main ; // m' 0
-
8/17/2019 Obligatorio 1
4/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
en que posición se encuentra el cursor como para posicionarlo, se debe especi%icar primero a
que registro indicando el :ndice 1; o 13/ se va a modi%icar o leer y luego se lo lee o escribe.
Esto se 'ace mediante los puertos -&D; y -&D3 respectivamente. El registro :ndice 1; es el
byte mas signi%icativo de la posición del cursor y el 13 el menos signi%icativo.
-
8/17/2019 Obligatorio 1
5/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
2.2 #arte !En esta parte se utili ó el bootloader de la parte A con muc'os agregados para soportar las4 5
interrupciónes, as: como cumplir con el resto de los requerimientos. =ambi@n %ueron utili adas
las bibliotecas antes mencionadas. En esta sección se comentar> acerca de los agregados del
bootloader y la %orma en que se solucionó el problema de mane5ar el cronómetro con dos
interrupciones.
2.2.1 bootloader.asm
Estructura(
=enemos tres ="" s =as0 "tate "egment/ uno para el main, uno para la rutina de atención a la6
interrupción del timer y otro para la rutina del teclado. El ="" es el lugar donde la C# salva el
conte-to de la tarea que esta e5ecutando para darle la C# a otraB entre otras cosas guarda el
I# instrucción pointer/ el D", C", "" y el registro de %lags. Cada ="" es accesible mediante un
="" descriptor en la D= eneral Descriptor =able/.7 6
#ara el main se de%inió un segmento de código que ocupa toda la memoria y uno de datos que
tambi@n comien a en la posición y se e-tiende 'asta la -
-
8/17/2019 Obligatorio 1
6/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
#seudocódigo(
$eer sectores desde dis0etteB ))Como en la parteA
Des'abilitar interrupcionesB ))cli
$evantar gdtB )) lgdt
$evantar idtB ))lidt
#asar a modo protegidoB ))#arte A
Iniciali ación de ="" del timerB
Iniciali ación de ="" del tecladoB
=F 7 indice en la gdt del ="" del main ))ltr
#ermitir interrumpir al timer y el tecladoB )) out -21, %c' 5 5
"altar a e5ecutar main /B ))5mp 4'(1 '
))Creación de las tablas y la %irma de que es un disco booteable
#IC 423 (
Este #IC es a trav@s del cual se indica qu@ interrupciónes de 'ard*are de las que son
enmascarables/ pueden interrumpir. $a C# puede comunicarse con este #IC mediante los
puertos -21 y -2 . El puerto -21 es un registro de 4 bit en donde se indica con un cero si la
interrupción correspondiente a determinado bit esta 'abilitada. En nuestro caso se manda a este
puerto el valor -
-
8/17/2019 Obligatorio 1
7/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
• El timer queda entre la dirección 1 ' y 13 ' porque esta rutina va despu@s del
main / en memoria y adem>s es lo su%iciente mente corto el código para no pasarse
mas all> de la dirección 13 '.
• $as variables globales en la dirección 13 ' son especi%icadas en el lin0er con la
directiva .data, en ambos casos.
• $a base del stac0 del teclado y el timer %ueron considerados en sus respectivos =""
y en el caso del main 'aciendo un mov esp, G '4 5• $a rutina de atención al teclado quedo en la dirección 2 ' por que su segmento
de código %ue asignado en esa posición en el =""/. H no se pasa de la dirección
23 1' porque al igual que el timer es un código reducido.
2.2.2 Futinas de interrupción y mainEl main de la parte ! es igual de simple que el anterior. $a nica di%erencia con el anterior es4 5
que este 'abilita las interrupciones.
Decidimos que el timer sea el nico encargado de imprimir en pantalla el cronometro. El teclado
nicamente de5a en una variable global la tecla presionada su scancode correspondiente a la4 5
ba5ada de la tecla/ cuando esta es una de las teclas validas. En otro caso no modi%ica la variable
global de5>ndola sin actuali ar para que el timer no 'aga nada al respecto. En el caso de las
%lec'as se 'ace una lectura en dos pasos ya que la tecla presionada se lee del puerto -9 con
lectura de un byte mientras que el código de las %lec'as es de dos bytes. De leerse solo la
segunda ve que interrumpe el teclado por una de las %lec'as pudiese con%undirse el 4 y el 2 7 6 7 6
del teclado num@rico con la %lec'a de arriba y aba5o respectivamente. Con esta lectura en dos
pasos usando la bandera %lec'a / logramos respetar que toda tecla que no sea una de las4 5
teclas v>lidas no 'aga nada.
El timer en cada interrupción se %i5a si tiene que actuali ar el cronometro porque se presiono una
tecla o porque se supero los 14 tics que indican que se tenga que incrementar en uno la
cantidad de segundos.
Informe Obligatorio 1. Pagina 7 de 8
-
8/17/2019 Obligatorio 1
8/8
Universidad de la República | Facultad de Ingeniería | Inco | Arquitectura deComputadores 2
2008
#seudocódigo del teclado(Char tecla_oprimida = 0;void teclado()
char aux= in(0x60);inicio:
Si (aux es una tecla valida) Entoncestecla_oprimida = aux;
out(0x20,0x20);iretgoto inicio;
fin_teclado
#seudocódigo del timer(Char tecla_oprimida = 0;Int tic = 0;Boolean pausa = falsevoid timer()
inicio:Si (tecla_oprimida0)
Depende del casoCaso ‘P’
pausa = true;Caso ‘S’
pausa = false;Caso Flecha_arriba
Incrementar cronometro;
Caso Flecha_abajoDecrementar cronometro;Fin_dependeTecla_oprimida = 0;
Fin_si
Si (not pausa) tic++;
Si (tic = 18)Incrementar cronometro;tic:=0
Fin_si
Si (hubo cambios) Borra e imprime nuevo cronometro
out(0x20,0x20);iretgoto inicio;
fin_timer
Informe Obligatorio 1. Pagina 8 de 8