miércoles, 11 de marzo de 2020

1.8 Desplegado de mensajes en el monitor

Desplegado de mensajes en el monitor

MENSAJES EN EL MONITOR

  • Todos los gráficos y el texto que se muestran en el monitor se escriben en la RAM de visualización de vídeo, para después enviarlos al monitor mediante el controlador de vídeo. El controlador de vídeo es en sí un microprocesador de propósito especial, que libera a la CPU principal del trabajo de controlar el hardware de vídeo.
  • Un monitor de pantalla de cristal líquido (LCD) digital directo recibe un flujo de bits digitales directamente desde el controlador de vídeo, y no requiere del barrido de trama.



En este momento podemos comenzar a escribir las verdaderas instrucciones que le indicarán a la computadora que mensaje y como lo va a desplegar. Sugiero que comenzamos por borrar la pantalla. Esto se puede realizar de muy diversas formas, aquí lo haremos usando el BIOS, el cual es un microchip que se encuentra dentro de toda PC y controla las funciones básicas de entrada y salida (Basic Input Output System). 

Lo que haremos es decirle al chip "¡Hey! dime en que modo está trabajando la tarjeta de vídeo", cuando obtengamos la respuesta le diremos: 
"Dile a la tarjeta de vídeo que deje de trabajar en ese modo y que comience a trabajar en el modo de vídeo que me diste".
 Una instrucción rara, pues lo que le estamos ordenando es que deje de trabajar en el modo en el que está trabajando !y que comience a trabajar en ese mismo modo! Así se lo decimos en su propio lenguaje: principio: mov ah, 0fh int 10h mov ah, 0 int 10h .
Lo primero que vemos es una "etiqueta", con ella le damos nombre a un punto dentro del código, si más tarde dentro del programa deseamos repetir esta parte del código solo tenemos que decir "salta a 'principio'" y ya está. 
El primer grupo de instrucciones después de la etiqueta le dicen al BIOS que obtenga la modalidad en la que está trabajando el vídeo. Aquí vemos por primera vez una interrupción (int 10h). Las interrupciones son funciones ya incorporadas dentro del BIOS y del sistema operativo MS-DOS que realizan tareas comunes como leer del disco, mostrar un mensaje en el monitor, o ¡borrar la pantalla!. Enseguida, mediante una función de la interrupción 10h, le decimos que cambie a la misma modalidad de vídeo. Bueno, ahora que la pantalla está limpia, podemos mostrar nuestro mensaje en el monitor. Aquí está el código: lea dx, mensaje_a_mostrar mov ah, 9h int 21h Con la primera instrucción le decimos al procesador "Carga en el registro DX, la dirección de memoria de la variable llamada 'mensaje_a_mostrar'".

 Enseguida le decimos que la despliegue en pantalla con la función 9h de la interrupción 21h. Nuestra tarea está terminada, así que digamosle a la computadora que no hay más instrucciones que procesar. int 20h Las instrucciones están terminadas, pero todavía tenemos que decirle a la computadora que valor va a tener la variable 'mensaje_a_mostrar'. mensaje_a_mostrar db "¡Hola Mundo!$",0 El signo de pesos al final de la cadena, es necesario para que el sistema operativo sepa en donde se acaba la cadena (una cadena es un grupo de caracteres) que va a desplegar. 

Una vez que terminamos con las instrucciones y valores para la máquina, hay que marcar el archivo para que el compilador sepa que ya terminamos de darle instrucciones a la maquina. CODE ENDS end principio ¡Al fin! ¡Llegamos al final! Aquí está el código fuente completo: 
CODE SEGMENT
 ASSUME CS:CODE, DS:CODE, SS:CODE, ES:CODE
ORG 100h 
principio: 
mov ah, 0Fh 
rar db 
"¡Hola Mundo!$",0
 CODE ENDS 
end principio




1.7 Proceso de ensamblado y ligado



Proceso de ensamblado y ligado
1. El programa utiliza un editor de texto para crear un archivo de texto ASCII, conocido como archivo de código fuente.

2. El ensamblador lee el archivo de código fuente y produce un archivo de código objeto, una traducción del programa a lenguaje máquina. De manera opcional, produce un archivo de listado. Si ocurre un error, el programador debe regresar al paso 1 y corregir el programa.

3. El enlazador lee el archivo de código objeto y verifica si el programa contiene alguna llamada a los procedimientos en una biblioteca de enlace.

4. La herramienta cargadora del sistema operativo lee el archivo ejecutable y lo carga en memoria, y bifurca la CPU hacia la dirección inicial del programa, para que éste empiece a ejecutarse.

Edición

Los archivos fuente de código ensamblador deben estar en formato ASCII standard. Para esto puede usarse cualquier editor que permita crear archivos sin formato.

Ensamblado

El ensamblado se lleva a cabo invocando al MASM. Este puede ser invocado, usando una línea de comando, de la siguiente manera: MASM archivo [,[objeto][,[listado][,[cross]]]]][opciones][;] Dónde: Objeto.- Es el nombre para el archivo objeto. Listado. - Nombre del archivo de listado de ensamblado. cross. Es un archivo de referencias cruzadas.  

Objeto. - Es el nombre para el archivo .OBJ Ejecutable. - Nombre del archivo .EXE Mapa. - Nombre del archivo mapa Librería. - Nombre del archivo biblioteca de rutinas

Ejecución

Para la ejecución del programa simplemente basta teclear su nombre en el prompt de MS-DOS y teclear ENTER. Con esto el programa será cargado en memoria y el sistema procederá a ejecutarlo. 
Resultado de imagen para proceso de ensamblado y ligado

















1.6 Modos de direccionamiento

Modos de direccionamiento

En informática, los modos de direccionamiento son las diferentes maneras de especificar un operando dentro de una instrucción en lenguaje ensamblador.
Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y/o constantes, contenida dentro de una instrucción de la máquina o en otra parte.
No existe una forma generalmente aceptada de nombrar a los distintos modos de direccionamiento. En particular, los distintos autores y fabricantes de equipos pueden dar nombres diferentes para el modo de hacer frente al mismo, o los mismos nombres, a los diferentes modos de direccionamiento.
Además, un modo de direccionamiento que en una determinada arquitectura se trata como un modo de direccionamiento, puede representar la funcionalidad que en otra arquitectura está cubierto por dos o más modos de direccionamiento.

Tipos de direccionamiento

Implícito
En este modo de direccionamiento no es necesario poner ninguna dirección de forma explícita, ya que en el propio código de operación se conoce la dirección de el/los operando/s al (a los) que se desea acceder o con el/los que se quiere operar.

Supongamos una arquitectura de pila, las operaciones aritméticas no requieren direccionamiento explícito por lo que se ponen como: - add - sub ...

Porque cuando se opera con dos datos en esta arquitectura se sabe que son los dos elementos del tope de la pila. Ejemplo de una pila

1 2 3 4 5 6 <- pila top() es 1 ntop() es 2

Donde top() representa el tope de la pila y ntop() el siguiente al tope de la pila y son estos argumentos con los que se opera al llamar a una orden en concreto.
Inmediato
En la instrucción está incluido directamente el operando.
En este modo el operando es especificado en la instrucción misma. En otras palabras, una instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operación especificada en la instrucción. Las instrucciones de modo inmediato son útiles para inicializar los registros en un valor constante.
Cuando el campo de dirección especifica un registro del procesador, la instrucción se dice que está en el modo de registro.
Su valor es fijo, por lo que se suele utilizar en operaciones aritméticas o para definir constantes y variables. Como ventaja, no se requiere acceso adicional a memoria para obtener el dato, pero el tamaño del operando está limitado por el tamaño del campo de direccionamiento.
Las desventajas principales son que el valor del dato es constante y el rango de valores que se pueden representar está limitado por el tamaño de este operando.

Ejemplo: MOV AX,12

Directo o absoluto

El campo de operando en la instrucción contiene la dirección en memoria donde se encuentra el operando.

En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en la memoria y su dirección es dada directamente por el campo de dirección de la instrucción. En una instrucción de tipo ramificación el campo de dirección especifica la dirección de la rama actual.

Si hace referencia a un registro de la máquina, el dato estará almacenado en este registro y hablaremos de direccionamiento directo a registro; si hace referencia a una posición de memoria, el dato estará almacenado en esta dirección de memoria (dirección efectiva) y hablaremos de direccionamiento directo a memoria. Estos modos de direccionamiento tienen una forma muy simple y no hay que hacer cálculos para obtener la dirección efectiva donde está el dato. El tamaño del operando, en el caso del direccionamiento directo a registro, dependerá del número de registros que tenga la máquina; en el direccionamiento directo a memoria, dependerá del tamaño de la memoria.

Ejemplo: MOV A,17H

Indirecto

El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección efectiva del operando.

Si hace referencia a un registro de la máquina, la dirección de memoria (dirección efectiva) que contiene el dato estará en este registro y hablaremos de direccionamiento indirecto a registro; si hace referencia a una posición de memoria, la dirección de memoria (dirección efectiva) que contiene el dato estará almacenada en esta posición de memoria y hablaremos de direccionamiento indirecto a memoria.

La desventaja principal de este modo de direccionamiento es que necesita un acceso más a memoria que el directo. Es decir, un acceso a memoria para el direccionamiento indirecto a registro y dos accesos a memoria para el direccionamiento indirecto a memoria; por este motivo este segundo modo de direccionamiento no se implementa en la mayoría de las máquinas.

Ejemplo: MOV A,@17H

Indirecto recursivo

Unos pocos sistemas como el PDP-6 o el PDP-10 tenían la posibilidad de direccionamiento indirecto recursivo. Tal dirección de memoria indirecta tenía un campo de registro para indexación y posiblemente un otro bit indirecto, de modo que el proceso de direccionamiento indirecto con indexación podría teóricamente repetirse cualquier número de veces hasta que se encontrara una dirección sin un bit indirecto en la cadena.

Absoluto
El campo de operando contiene una dirección en memoria, en la que se encuentra la instrucción. Y no se cancela.

De registro
Sirve para especificar operandos que están en registros.
En este modo, los operandos están en registros que residen dentro de la CPU.

Indirecto mediante registros
El campo de operando de la instrucción contiene un identificador de registro en el que se encuentra la dirección efectiva del operando.

En este modo el campo de la dirección de la instrucción da la dirección en donde la dirección efectiva se almacena en la memoria. El control localiza la instrucción de la memoria y utiliza su parte de dirección para acceder a la memoria de nuevo para leer una dirección efectiva. Unos pocos modos de direccionamiento requieren que el campo de dirección de la instrucción sea sumado al control de un registro especificado en el procesador. La dirección efectiva en este modo se obtiene del siguiente cálculo:

Dir. efectiva = Dir. de la parte de la instrucción + Contenido del registro del procesador...

De desplazamiento
Combina el modo directo e indirecto mediante registros.

De pila
Se utiliza cuando el operando está en memoria y en la cabecera de la pila.
Este direccionamiento se basa en las estructuras denominadas Pila (tipo LIFO), las cuales están marcados por el fondo de la pila y el puntero de pila (*SP). El puntero de pila apunta a la última posición ocupada. Así, como puntero de direccionamiento usaremos el SP.
El desplazamiento más el valor del SP nos dará la dirección del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajara con la cima de la pila.
Como es un modo de direccionamiento implícito, solo se utiliza en instrucciones determinadas, las más habituales de las cuales son PUSH (poner un elemento en la pila) y POP (sacar un elemento de la pila).
Este tipo de direccionamiento nos aporta flexibilidad pero por el contrario, es mucho más complejo que otros tipos estudiados más arriba.

Relativo a un registro base
Consiste, al igual que el indirecto a través de registro, en calcular la dirección efectiva (EA, effective address) como la suma del contenido del registro base y un cierto desplazamiento (offset) que siempre será positivo. Esta técnica permite códigos reentrantes y acceder de forma fácil y rápida a posiciones cercanas de memoria. Este modo de direccionamiento es muy usado por los ensambladores cuando se llaman a las funciones (para acceder a los parámetros almacenados en la pila).

Relativo a un registro índice
Es similar al direccionamiento relativo a un registro base, excepto que es el contenido del registro índice el que indica el desplazamiento que se produce a partir de una dirección de memoria que se pasa también como argumento a la orden que utiliza este modo de direccionamiento. Aunque en esencia son dos modos equivalentes. La EA se calcula como la suma del contenido del registro índice y una dirección de memoria.

Indexado respecto a una base
Se trata de una combinación de los dos anteriores y consiste en calcular la dirección efectiva como:

Relativo al contador de programa
Consiste en direccionar una posición de memoria usando como registro base al contador de programa (PC), el funcionamiento es análogo al direccionamiento respecto a registro base con la salvedad de que, en este caso, el offset puede ser también negativo.

Indexado con autoincremento/autodecremento
Es un modo de direccionamiento análogo al indexado, explicado anteriormente.
La única diferencia es que permite un incremento o decremento de la dirección final o el registro índice según los siguientes casos:
Indexado con autopreincremento: Incrementa el registro índice primero (se incrementa un valor, según el tamaño del objeto direccionado) y luego calcula la EA al igual que el direccionamiento indexado.
Indexado con autoposincremento: Calcula la dirección efectiva y después incrementa esta.
Indexado con autopredecremento: Decrementa el registro índice y después calcula la dirección efectiva.
Indexado con autoposdecremento: Calcula la dirección efectiva y después decrementa esta.
Instrucción de salto con direccionamiento absoluto
Consiste en cargar en el PC el valor que se especifica, por ejemplo: jmp 0xAB ----> Carga 0xAB en PC

Instrucción de salto con direccionamiento relativo
Es parecida a la especificada anteriormente la diferencia es que el salto es relativo al PC, pongamos un ejemplo: supongamos que PC vale = 0x0A, si nosotros interpretamos la instrucción jr +03, saltaremos tres posiciones posteriores a PC (también podría ser -03 y serían posiciones anteriores). Pero, ¡cuidado! si esa instrucción estaba en la posición 0x0A la dirección de PC a incrementar será la inmediatamente posterior (ya que PC se incrementa automáticamente después de leer la instrucción), por lo que quedaría:

PC = 0x0B ---> nuevo PC = 0x0B+0x03 = 0x0E, con lo que el PC quedaría como 0x0E.


Direccionamiento paginado
En el paginado la memoria se encuentra actualmente dividida en páginas (bloques de igual longitud).
Para obtener las direcciones se necesita:
Indicador de página (IP): en un registro específico o de propósito general de la máquina.
Dirección de la palabra (DP): en el campo CD de la instrucción.
Así, concatenando ambas partes se obtiene la dirección completa.
El problema viene cuando queremos referenciar un dato al que no podemos acceder de forma relativa (p.e. porque los registros base no puedan alcanzar dicha posición aun con el direccionamiento absoluto. Sin embargo, sólo una pequeña parte de la memoria se puede acceder (64 kilobytes, si el desplazamiento es de 16 bits).
El desplazamiento de 16 bits puede parecer muy pequeño en relación con el tamaño de la memoria de los equipos actuales (esta es la razón por la 80386 se expandió a 32 bits). Podría ser peor ya que: los servidores IBM System/360 sólo tienen un signo de 12 bits de desplazamiento. Sin embargo, el principio de localización se aplica en un corto espacio de tiempo, la mayoría de los elementos de datos que un programa quiere acceder están bastante cerca uno del otro.
Este modo de direccionamiento está estrechamente relacionado con el modo de direccionamiento absoluto.

Ejemplo 1: Dentro de una subrutina, un programador estará principalmente interesados en los parámetros y las variables en los atributos del objeto actual.



miércoles, 4 de marzo de 2020

Interrupciones y llamadas de servicio al sistema

Interrupciones y llamadas de servicio al sistema


¿ Qué es una interrupción?

Una interrupción es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente.
Las interrupciones son un método del que disponen los dispositivos e incluso los procesos para hacer notar a la CPU la aparición de alguna circunstancia que requiera su intervención.
De este modo, los dispositivos pueden provocar que la CPU deje por el momento la tarea que estaba realizando y atienda la interrupción. Una vez atendida, seguirá con su labor anterior
Las interrupciones pueden ser producidas por Hardware o por Software
Las interrupciones por Hw son producidas por un dispositivo y viajan por el mismo bus del sistema.
Las interrupciones por Sw son producidas por medio de la ejecución de una operación especial que se conoce como "llamada al sistema" (system call) o por errores producidos dentro de un proceso, también conocidas como excepciones.
Hay muchos tipos de interrupciones y pare cada uno de estas existe una rutina en el sistema de operación que le da servicio. Los sistemas de operación actuales permiten a los dispositivos tales como E/S o reloj del sistema interrumpir el CPU asíncronamente
Dentro de un computador
Cuando una computadora se encuentra realizando un proceso este puede interrumpirse por cualquiera de las dos causas siguientes:

1.- Que se haya presentado una causa que impida que siga adelante un trabajo o un programa que no haya terminado:

En este caso las interrupciones pueden darse:

Por Software: quiere decir que la interrupción se hace por medio de una instrucción del Sistema operativo que demanda la detención del proceso o por una instrucción del programa mismo que demanda la acción de otro dispositivo.
Por Hardware: se refiere a interrupciones provocadas por la acción de algún elemento físico ya sea por una falla, por requerirlo el circuito, por falta de energía eléctrica u otra causa que impida la continuación de un programa dado algunas de estas fallas pueden ser manejadas por el sistema operativo ya sea por normalizar el proceso o para indicar al operador la causa de la interrupción.

2.- Es que haya llegado el fin lógico de un programa o de un trabajo: en este caso el sistema operativo debe retirar el control al programa que ha terminado de introducir una nueva tarea si se tiene alguna espera esta interrupción no representa un mayor problema ya que solo puede darse cuando el programa que se encuentra en proceso demanda a través de una instrucción su propio fin.

Llamada al sistema.
Llamadas que ejecutan los programas de aplicación para pedir algún servicio al SO.
Llamadas al sistema no bloqueantes: son aquellas llamadas en las que, si lo que se solicita no está disponible, el proceso no se queda bloqueado, sino que devuelven un valor especial indicando la condición de información no disponible
Llamadas al sistema bloqueantes: la aplicación se bloquea a la espera del resultado. Si un hilo hace una llamada bloqueante, todos los hilos se bloquearán. Si hace una llamada no bloqueante, los demás hilos podrán seguir ejecutando.
¿Como se mandan las llamadas al sistema?
Se activa una interrupción  ejecutando una operación especial conocida  "Llamada al sistema"
Esta se lanza cuando:
Una aplicación de usuario solicita un servicio del sistema operativo.
Proporciona los medios para que un programa de usuario pida al so que realice tareas reservadas del so en nombre del programa de usuario.

Una llamada al sistema se invoca de diversas maneras dependiendo de la funcionalidad proporcionada por el procesador subyacente.

Se trata de un método usado por un proceso para solicitar la actuación del so.

Normalmente una llamada al sistema toma la forma de una excepción que efectúa una transferencia a una posición específica en el vector de interrupción.


Tipos de llamadas al sistemas

Control de procesos

Terminar (end), abortar (abort)
cargar (load), ejecutar (execute)
crear procesos (create process o submit job), terminar procesos (terminate process)

fork: inicia un nuevo proceso
exec:el programa se ejecuta obtener atributos del proceso (get process attributes), definir atributos del proceso (set process attributes)
esperar para obtener tiempo (wait time)
esperar suceso (wait event), señalizar suceso (signal event)
asignar y liberar memoria.
llamada al sistema para liberar memoria (dump) (i45)

Administración de archivos

crear archivos (create), borrar archivos (delete)
abrir (open), cerrar (close)
leer (read), escribir (write), reposicionar (reposition)
obtener atributos del archivo, definir atributos del archivo.
move: mover archivos
copy: copiar archivos

Administración de dispositivos

solicitar dispositivo (request), liberar dispositivo (release)
leer (read), escribir (write), reposicionar (reposition)
obtener atributos de dispositivo, definir atributos de dispositivo
conectar y desconectar dispositivos lógicamente.

Mantenimiento de la información

obtener la hora (time) o la fecha (date), definir la hora o la fecha
obtener datos del sistema, establecer datos del sistema
obtener los atributos de procesos, archivos o dispositivos
establecer los atributos de procesos, archivos o dispositivos
Comunicaciones
crear, eliminar conexiones de comunicación
enviar, recibir mensajes
transferir información de estado
conectar y desconectar dispositivos remotos. (i43)

Llamadas al sistema

  • Abrir archivo

  • Crear archivo

  • Proteger archivo

  • Escribir mensaje en consola

  • Terminar en forma anormal

  • Borrar archivo

  • Leer archivo

  • Modificar archivo (i39)

  • CreateProcess de win32

get hostid:
 Cada computadora de red tiene un nombre de host. Un host tiene un identificador de red. Ésta llamada al sistema hace esa traducción (i49)

get processid: 
Cada proceso tiene un nombre de proceso y este nombre se traduce en un identificador mediante el cual el so hace referencia al proceso. Ésta llamada al sistema realiza la traducción


DEFINICIÓN:
Llamadas al sistema: 

                                                                        Interrupciones de hardware y software

miércoles, 5 de febrero de 2020

1.2 El procesador y sus registros internos

1.2 El procesador y sus registros internos 

El procesador es el que se refiere a los diferentes tipos de artículos de sistemas informativos que forma parte de un microprocesador que es parte de un CPU o micro que es el cerebro de la computadora y de todos los procesos informativos desde los más sencillos hasta los más complejos.
Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son direccionables por medio de un nombre.

Tipos de registros:
Registros de segmento.
Registros de propósito general.
Registros de apuntadores.
Registros de banderas.
Registros de Pila.
Registros Indice.

◘ Registros de segmento: Un registro de segmento tiene 16 bits de longitud y facilita un área de memoria para direccionamiento conocida como el segmento actual.
Registro CS: El DOS almacena la dirección inicial del segmento de código de un programa en el registro CS. Esta dirección de segmento, mas un valor de desplazamiento en el registro apuntador de instrucción (IP), indica la dirección de una instrucción que es buscada para su ejecución.

Registro DS: La dirección inicial de un segmento de datos de programa es almacenada en el registro DS. En términos sencillos, esta dirección, mas un valor de desplazamiento en una instrucción, genera una referencia a la localidad de un byte especifico en el segmento de datos.
Registro SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la dirección de inicio del segmento de pila de un programa en le registro SS. Esta dirección de segmento, mas un valor de desplazamiento en el registro del apuntador de pila (SP), indica la palabra actual en la pila que esta siendo direccionada.

Registros ES: Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (índice). Un programa que requiere el uso del registro ES puede inicializarlo con una dirección de segmento apropiada.

Registros FS y GS: Son registros extra de segmento en los procesadores 80386 y posteriores.

◘ Registros de propósito general: Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del sistema. Son únicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte “alta”, y el ultimo byte de la derecha es la parte “baja”. Por ejemplo, el registro CX consta de una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte por su nombre.

Registro AX: El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. También, algunas operaciones generan código mas eficiente si se refieren al AX en lugar de a los otros registros.

Registro BX: El BX es conocido como el registro base ya que es el único registro de propósito general que puede ser índice para direccionamiento indexado. También es común emplear el BX para cálculos.
Registro DX: Es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren uso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y al AX trabajando juntos.

◘ Registros Apuntadores: Los registros SP (apuntador de la pila) Y BP (apuntador de base) están asociados con el registro SS y permiten al sistema accesar datos en el segmento de la pila.

Registro SP: El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de forma automática estos registros.
Registro BP: El BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP.
◘ Registros Indice: Los registros SI y DI están disponibles para direccionamiento indexado y para sumas y restas.

Registro SI: El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI.
Registro DI: El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI.

◘ Registro de Banderas: De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores 8086, y sirven para indicar el estado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que piden comparaciones y aritmética cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la acción subsecuente. En resumen, los bits de las banderas comunes son como sigue:

OF (Overflow, desbordamiento): Indica desbordamiento de un bit de orden alto (mas a la izquierda) después de una operación aritmética.

DF (dirección): Designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres.

IF (interrupción): Indica que una interrupción externa, como la entrada desde el teclado, sea procesada o ignorada.

TF (trampa): Permite la operación del procesador en modo de un paso. Los programas depuradores, como el DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecución de una sola instrucción a un tiempo, para examinar el efecto de esa instrucción sobre los registros de memoria.

SF (signo): Contiene el signo resultante de una operación aritmética (0 = positivo y 1 = negativo).

ZF (cero): Indica el resultado de una operación aritmética o de comparación (0 = resultado diferente de cero y 1 = resultado igual a cero).

AF (acarreo auxiliar): Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmética especializada.

PF (paridad): Indica paridad par o impar de una operación en datos de 8 bits de bajo orden (mas a la derecha).

CF (acarreo): Contiene el acarreo de orden mas alto (mas a la izquierda) después de una operación aritmética; también lleva el contenido del ultimo bit en una operación de corrimiento o de rotación.
Las banderas mas importantes para la programación en ensamblador son O, S, Z y C, para operaciones de comparación y aritméticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores tienen algunas banderas usadas para propósitos internos, en especial las que afectan al modo protegido. Los procesadores 80286 y posteriores tienen un registro extendido de banderas conocido como Eflags.

◘ Registros de PILA: La pila es un área de memoria importante y por ello tiene, en vez de uno, dos registros que se usan como desplazamiento (offset) para apuntar a su contenido. Se usan como complemento al registro y son:

SP (Stack Pointer): Se traduce como puntero de pila y es el que se reserva el procesador para uso propio en instrucciones de manipulado de pila. Por lo general, el programador no debe alterar su contenido.

BP (Base pointer): Se usa como registro auxiliar. El programador puede usarlo para su provecho.
Cabe destacar que estos nombres y tipos de registros son estándar, ya que cada fabricante puede utilizar otros registros que reemplacen a estos o los auxilien, aun así, los fabricantes que usan otros registros tienen la misma función que los anteriormente mencionado.


Mapa mental de lenguaje ensamblador