1. Un sistema operativo mas que ser definidio simplemente como un administrador de recursos de hardware y software (como procesos, memoria, disco, E/S), se puede definir desde distintas perspectivas: + Desde la persepectiva de la arquitectura del kernel, que es un conjunto de algoritmos y estructuras de datos para manipular los distintos tipos de informacion para procesos, memoria, disco, IPCs, E/S, comunicaciones + Desde la perspectiva de un desarrollador que necesita pedir servicios al kernel, el sistema operativo es un conjunto de servicios que ofrece atraves de una biblioteca o API. + Desde la perspectiva de un administrador del sistema operativo, el sistema operativo otorga una serie de parametros para que pueda ser configurado a las necesidades del usuario y afinado para un mejor trabajo, ademas de subir servicios o procesos orientados a cubrir funcionalidades otorgadas por el sistema operativo (servicios de almacenamiento, despliegue grafico, comunicaciones, servicios de red) + Desde la perspectiva de un usuario, contiene una serie de herramientas para poder interactuar con el sistema operativo, tipicamente es un shello o un ambiente de trabajo grafico. 2. 1 word = 2 bytes La organizacion de la memoria de un programa es Codigo - donde almacena el codigo maquina que va ejecutando Datos - donde almacena las variables globales y constantes que utiliza Pila - donde almacena las variables locales y parametros de una funcion. 3. Uso generico AX (1 word) o AH (1 byte) y AL (1 byte) BX (1 word) o BH (1 byte) y BL (1 byte) CX (1 word) o CH (1 byte) y CL (1 byte) DX (1 word) o DH (1 byte) y DL (1 byte) De apuntadores IP - siguiente instruccion a ejecutar (1 word) SP - apuntador de la pila (1 word) BP - apuntador para manejar parametros de una funcion (1 word) SI - source index (1 word) DI - data index (1 word) De segmento CS - codigo (1 word) DS - dato (1 word) SS - stack o pila (1 word) ES - (1 Word) FLAGS (1 word) El CPU contiene un registro denominado FLAGS o palabra de condicion del programa 4. Un programa ensamblador queda dividido en 3 secciones, datos, pila y cdigo. En cada seccin se indican una serie de instrucciones, con el siguiente formato IDENTIFICADOR OPERACION OPERANDO COMENTARIO El identificaro es una etiqueta La operacin define datos o instrucciones ensamblador El operando son los valores con los que opera la operacion Comentario, dado con un ; DD AX, var ; sumar el contenido de una palabra de la memoria var al registro AX AND BX,[BP+6] ; hacer un AND BX con la palabra en memoria en la direccion BP+6 CMP AX,1 ; comparar AX con 1 DEC [BP-4] ; decrementar una unidad a palabra en memoria en la direccion BP-4 INC SI ; incrementar una unidad al contenido del registro SI JE etiqueta ; saltar a etiqueta si la operacion de comparacion es igual (cero en FLAG:SF) JL etiqueta ; saltar a etiqueta si la comparacion anterior fue menor (JG,JNE existen) LOOP etiqueta ; restar 1 de CX; si es distinto de cero saltar a etiqueta MOV AX,var ; mover el contenido de var a AX MOVB AX,VAR ; pasar el contenido del byte de la memoria var a AX POP var ; descargar una palabra de la pila y colocarla en var PUSH BX ; meter el registro BX en la pila REP ; repetir siguiendo la instruccion hasta que CX sea 0 CLI ; desactivar interrupciones (eliminar las seales de interrupcion) STI ; activar las interrupciones (fija la seal de interrupcion) IRET ; regresa desde la interrupcion, descargando PC,CS,PSW CALL _rutina ; llamada al procedimiento _rutina RET ; retornar de la llamada al procedimiento La pila se usa para manejar RUTINAS los parametros de entrada, sus variables locales y guardar aquellos registros del CPU que necesisten salvarse , asi como la direccion de retorno cuando concluya la rutina. Las instrucciones ensamblador relacionadas son PUSH, POP, CALL, RET 5. +) Se debe definir una funcion en ensamblador. Si el nombre en C es X, en ensamblador es _X +) Los registros BP, SI y DI deben ser guardados en la pila. En el caso de SI y DI se usen, se debe aplicar esta regla. BP SIEMPRE se debe salvar. Primero se debe guardar BP, luego SI y DI. Esto se debe a que los procedimientos en C asumen que BP, DI y SI no cambian. +) El registro BP es la referencia de parametros y variables locales dentro de la funcin. En la entrada de la funcin, el valor actual de BP es guardado en la pila (via un push) y el valor de SP se mueve a BP. Se conoce que BP es el apuntador al "stack frame" o "contexto de la pila" y la organizacin de memoria se ve de la siguiente manera (suponiendo que se guardo DI y SI) + La direccion de retorno esta en BP+2 (BP corrido 2 bytes) + Para accesar los parametros se debe tomar desde BP+4. C guarda los parametros en orden inverso, el ultimo parametro se apila primero y el primero hasta el final (esto permite implantar funciones de parametros variables). Es decir los parametros se toman con BP mas un corrimiento (offset) positivo + Para accesar las variables locales debe tomar bp-x,donde x queda definido segun el tipo de dato y el orden de declaracion de las variables; es decir BP mas un offset negativo + El valor de retorno se deposita en el registro AX (cuando es de 1 o 2 bytes) o en AX y DX (cuando es de 4 bytes) 6. El sistema PC tiene en ROM una serie de rutinas para controlar el hardware del sistema, denominado BIOS (Basic Input Output System, sistema b�ico de entrada y salida). Contiene un conjunto de procedimientos de lectura y escritura de bloques del disco, escritura de caracteres en la pantalla y otra E/S. Para poder comunicarse con el BIOS se necesita usar una interrupcin de software. La instruccion ensamblador que se utiliza es INT, dando el numero de interrupcion del BIOS y llenando los registros necesarios para que pueda aplicar la funcion del BIOS 7. Para ensamblar tasm programa.asm Para compilar tcc -c programa.c Para enlazar tcc -oejecutable programaC.obj programaASM.obj