martes, 17 de marzo de 2020

Ensamblador (y ligador) a utilizar.

Ensamblador (y ligador) a utilizar.

Aunque la sintaxis entre ensambladores es parecida, es necesario mencionar que los ejemplos de este manual están hechos para las siguientes herramientas:
Turbo Assembler
Turbo Assembler o TASM es un ensamblador desarrollado por Borland el cual además de permitir ensamblar código MASM (Microsoft Macro Assembler) en su modo de compatibilidad, es capaz de soportar programación orientada a objetos desde la versión 3.0 y de generar código para 16 o 32 bits.
La característica más importante de Turbo Assembler es que es compatible con lenguajes de alto nivel, por ejemplo: Turbo Pascal, Turbo Basic, Turbo C, Turbo C++.
Turbo Linker
Turbo Linker o T-Link es el enlazador (ligador) incluido con Turbo Assembler, el cual se encarga de generar el código ejecutable a partir del código objeto generado por TASM.
Resultado de imagen para Ensamblador (y ligador) a utilizar.

miércoles, 11 de marzo de 2020

Desplegado De Mensajes En El monitor

Desplegado de mensajes en el monitor.

Para poder desplegar un mensaje en el monitor es necesario que el texto a desplegar se escriba en la RAM de visualización de video, para después ser enviado al monitor mediante el controlador de video. El controlador de video es en sí un microprocesador de propósito especial, que libera a la CPU pri
img7.jpg
ncipal del trabajo de controlar el hardware de video.
Para hacer esto se pueden utilizar varios de los servicios con los que cuenta el lenguaje ensamblador, los cuales se describen con detalle en el apéndice A.
Para detener la pantalla y permitir al usuario ver lo que se ha desplegado en la misma se utiliza el servicio 00 de la interrupción 16h.

Ejemplo:
mov dx,65       ->           Asignar el Valor 65 ASCII al registro DX
mov ah,02h     ->           Asignar el valor 02h al registro AH, que corresponde al servicio de                                                             impresión de un caracter.
int 21h          ->           Llamada a la interrupción 21h, de la que se ejecutará el servicio 02h.

Proceso De Ensamblado y Ligado

 Proceso de ensamblado y ligado.

El proceso de ensamblado es el mismo sin importar el ensamblador que se está utilizando, aunque para las explicaciones se utilizara la sintaxis del ensamblador Turbo Assembler el cual fue desarrollado por Borland y el enlazador Turbo Linker.
Al escribir un programa en lenguaje ensamblador es necesario utilizar uimg6.jpgn editor de texto y guardar el archivo con la extensión asm para que sea reconocida por el ensamblador.
Una vez contando con el programa con extensión asm es necesario acceder con la consola a la ubicación del archivo y escribir “TASM Archivo.asm” siendo Archivo el nombre del archivo creado anteriormente, el nombre del archivo no debe superar los 8 caracteres, debe empezar con letra y no debe contener caracteres especiales.
Si el archivo cumple los requisitos entonces el ensamblador producirá un código objeto, el cual es una traducción a código máquina del programa, en caso de que el ensamblador encuentre un error en el programa lo indicará, así como la línea en la que se encuentra ese error.
Después de que se cree exitosamente el código objeto es necesario utilizar el enlazador, para el cual se escribirá en la consola “Tlink Archivo.obj” siendo Archivo el nombre del programa.
La función del enlazador es verificar si existen llamadas a procedimientos  de una librería de enlace, en caso de ser asi copia cualquier procedimiento requerido y lo combina con el código objeto, generando de esta manera un archivo ejecutable con extensión exe.
EJEMPLO
Ejemplo de un programa en ensamblador que previamente ya paso por el proceso de ensamblado y ligado.

Modos De Direccionamiento

Modos de direccionamiento.

Los modos de direccionamiento son las diferentes formas de definir la ubicación de un operando en memoria, para que de esta forma el programa sea capaz de      encontrarlo durante el tiempo de ejecución. Es necesario mencionar que
img5.jpg
al realizar una operación, es posible realizarla entre registros o entre registros y memoria, pero no es posible realizarla entre memoria y memoria.
Los modos de direccionamiento son los siguientes:
Implícito:
Este modo de direccionamiento se utiliza sin declarar ninguna dirección, ya que las operaciones que lo utilizan ya conocen la dirección en la cual se encuentra el operando que se va a utilizar.
Inmediato:
En este modo de direccionamiento se declara directamente el valor del operando en la instrucción.
Ejemplo:
mov ah,02h        ->           El valor del operando (02h) se especifica directamente.
Directo:
En el direccionamiento directo, el operando hace referencia a un dato almacenado en la dirección especificada en la instrucción, la cual puede estar escrita de dos formas, como un registro o como una posición en memoria.
Para utilizar un registro basta con escribir el nombre del registro como operando para la operación, para utilizar una posición en memoria es necesario escribir el valor de la posición entre corchetes [], de esta forma TASM lo interpretara como una dirección y no como un valor.
Ejemplos:
mov ax, bx                          ->           Se establece el dato en la dirección de bx como operando.
mov ax, [021BH]               ->           Se establece el dato en la dirección 021BH como  operando.
Indirecto:
Al utilizar direccionamiento indirecto, el operando se utiliza como una referencia a un dato que se encuentra almacenado en una posición de memoria, para esto el operando debe especificar un registro entre corchetes, el cual contiene la dirección de memoria a la que se desea acceder.
Ejemplo:
mov  bx,[ax]       ->           ax contiene la dirección a la que se desea acceder y este valor se                                                              asigna a bx.
Indexado:
En el direccionamiento indexado el operando hace referencia a una posición en memoria, la cual puede ser expresada utilizando un numero el cual es sumado a un registro que funciona como un índice respecto a la dirección de memoria.
mov ax, [1324h+12]        ->           En este caso 1324h es la dirección base y 12 es el registro                                                                              utilizado como índice.
Relativo:
En el direccionamiento relativo se declara el operando como el valor de un registro entre corchetes, al cual se le aplica un desplazamiento, es decir, se le suma un valor que indicara el desplazamiento a partir de la dirección indicada por el registro.
Ejemplo:
Mov ax,[bx+2]                  ->           En este ejemplo bx contiene la dirección base y 2 es el                                                                                   desplazamiento que se utilizará.
Ejemplo:
Estos son los únicos registros que pueden usarse de modo dual (en 8 o 16 bits) Los registros de la CPU son conocidos por sus nombres propios, que son: 
  • • AX (acumulador)
  • • BX (registro base)
  • • CX (registro contador)
  • • DX (registro de datos)
  • • DS (registro del segmento de datos)
  • • ES (registro del segmento extra)
  • • SS (registro del segmento de pila)
  • • CS (registro del segmento de código)
  • • BP (registro de apuntadores base)
  • • SI (registro índice fuente)
  • • DI (registro índice destino)
  • • SP (registro del apuntador de pila)
  • • IP (registro del apuntador de siguiente instrucción)
  • • F (registro de banderas)
 El registro AX se usa para almacenar resultados, lectura o escritura desde o hacia los puertos. El BX sirve como apuntador base o índice. El CX se utiliza en operaciones de iteración, como un contador que automáticamente se incrementa o decrementa de acuerdo con el tipo de instrucción usada. El DX se usa como puente para el acceso de datos.

miércoles, 4 de marzo de 2020

mapa mental targeta madre


Llamadas a servicios del sistema

Llamadas a servicios del sistema.

Los servicios del sistema son funciones predefinidas, que pueden ser utilizadas en los programas. Por medio de las llamadas a estos servicios es posible que exista la comunicación entre un programa en ejecución y el sistema operativo, las llamadas a servicios se encuimg5.pngentran en manuales de ensamblador y dependen de la arquitectura en la que se esté programando.
Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es interrumpida y sus datos son guardados, en el bloque de control de proceso o PCB (Process Control Block) para poder continuar ejecutándose posteriormente.
Las categorías de las llamadas a servicios son las siguientes:
Comunicaciones:
Esta categoría consta de las acciones relacionadas con mensajes, como es crear la conexión, enviar y recibir mensajes, transferir información de estado y eliminar la conexión.
Control de proceso:
Consta de crear, cargar, ejecutar, abortar y terminar un proceso, así como obtener y establecer atributos, liberar memoria o esperar un suceso.
Manipulación de archivos:
Esta categoría consiste de crear, abrir, leer, obtener atributos, establecer atributos, cerrar y eliminar archivos.
Manipulación de información:
REPORT THIS AD

Acciones que requieren obtener datos del sistema, como por ejemplo la fecha y hora pertenecen a esta categoría.
Manipulación de periféricos:
Cualquier acción que requiera utilizar un periférico, como solicitar, escribir, leer, obtener y establecer atributos y liberar periférico pertenece a esta categoría.

EJEMPLO
Para utilizarlas en ensamblador es necesario cargar datos a los registros adecuados según el servicio a utilizar y después llamar a la interrupción correspondiente, como se puede ver en el siguiente ejemplo:
mov dx,82         ->           Asigna el valor 82 ASCII (Correspondiente a “R”) al registro dx
mov ah,02h      ->           Carga el valor 02h (servicio a utilizar) en el registro ah
int 21h              ->           Inicia la interrupción 21h, revisa el valor en ah y utiliza el servicio                                                                correspondiente, en este caso desplegar el carácter R.

INTERRUPCIONES

1.4 El concepto de interrupciones.

Una interrupción es una instrucción que detiene la ejecución de un programa para darle tiempo de procesador a otro proceso más importante. El utilizar una interrupción en ensamblador permite al procesador llevaimg4r a cabo funciones especiales predefinidas
por ensamblador llamadas servicios, las cuales permiten entre otras cosas el desplegar información. Las interrupciones se separan en dos tipos, que son de DOS (dependientes del sistema operativo) y de BIOS (dependientes del hardware).
Cuando un periférico desea acceder a un recurso, envía un pedido de interrupción al procesador para llamar su atención, los periféricos cuentan con un número de interrupción que se denomina IRQ (Interrupt Request).
Para utilizar una interrupción en ensamblador se utiliza la instrucción int seguida del número de la interrupción, por ejemplo: int 10h.
EJEMPLO:
3
Resultado de imagen para interrupciones lenguajes de interfazPara este ejemplo utilizamos las interrupciones 10h, 21h, que estas primera nos sirven para controlar los servicios de pantalla y el 21h para impresión de símbolos.Para mayor información se pueden consultar las interruciones mas importantes en la siguiente tabla.









segundo ejercicio