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
               (
geocities.com/gusdelact)