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


    Source: geocities.com/gusdelact/cib5122003

               ( geocities.com/gusdelact)