Profesor: Ing. Pablo Reynaldo Materia: Lenguaje de interfaz Elaborado por: Carlos Hctor Cruz Lpez
Temario
1 ndice Unidad 1 Introduccin al lenguaje ensamblador .............................................................. 3 1.1 Importancia de la programacin en lenguaje ensamblador .......................................... 3 1.2 El procesador y sus registros internos ........................................................................... 4 1.3 La memoria principal (RAM) ..................................................................................... 11 1.4 El concepto de interrupciones ..................................................................................... 12 1.5 Llamadas a servicios del sistema ................................................................................ 17 1.6 Modos de direccionamiento ........................................................................................ 18 1.7 Proceso de ensamblado y ligado ................................................................................. 23 1.8 Desplegado de mensajes en el monitor ....................................................................... 24 Unidad 2 Programacin bsica ......................................................................................... 26 2.1 Ensamblador (y ligador) a utilizar .............................................................................. 26 2.2 Ciclos numricos ......................................................................................................... 27 2.3 Captura de cadenas ..................................................................................................... 28 2.4 Comparacin y prueba ................................................................................................ 29 2.5 Saltos ........................................................................................................................... 30 2.6 Ciclos condicionales ................................................................................................... 31 2.7 Incremento y decremento ............................................................................................ 32 2.8 Captura de cadenas con formato ................................................................................. 33 2.9 Instrucciones aritmticas ............................................................................................. 33 2.10 Manipulacin de la pila ............................................................................................. 34 2.11 Obtencin de cadena con representacin decimal .................................................... 35 2.12 Instrucciones lgicas ................................................................................................. 36 2.13 Desplazamiento y rotacin ........................................................................................ 36 2.14 Obtencin de una cadena con la representacin hexadecimal .................................. 37
2 2.15 Captura y almacenamiento de datos numricos ........................................................ 39 2.16 Operaciones bsicas sobre archivos de disco ........................................................... 41 Unidad 3 Modularizacin .................................................................................................. 44 3.1 Procedimientos ............................................................................................................ 44 3.2 Macros ........................................................................................................................ 45 Unidad 4 Programacin de dispositivos ........................................................................... 46 4.1 El buffer de video en modo texto ................................................................................ 46 4.2 Acceso A Discos En Lenguaje Ensamblador ............................................................. 47 4.3 Programacin Del Puerto Serial ................................................................................. 49 4.4 Programacin Del Puerto Paralelo .............................................................................. 50 4.5 Programacin Hbrida ................................................................................................. 51 4.6 Programacin De Puerto USB (Universal Serial Bus) ............................................... 52 Programas ........................................................................................................................... 54
3 Unidad 1 Introduccin al lenguaje ensamblador 1.1 Importancia de la programacin en lenguaje ensamblador El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informticos, y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura de microprocesador. La importancia del lenguaje ensamblador es principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en l se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sera que los programas en ensamblador ocupan menos espacio en memoria. Para programar en ensamblador debes conocer algunos aspectos extra: debes comprender no slo las instrucciones que vas a usar sino tambin la arquitectura de la mquina, necesitas saber cmo se almacenan los datos, como el procesador manipula los datos, etc. Cuando programas en lenguajes de bajo nivel debes hacer ms que solo describir la solucin formal del programa, debes dividir el programa en pasos pequeos y bsicos. Estos pasos le dirn al procesador que hacer, una instruccin a la vez. La recompensa de aprender y practicar con el lenguaje ensamblador es desarrollar una idea slida de cmo opera una computadora, adems de escribir programas rpidos y pequeos para ejecutar tareas que no son prcticas (demasiado lentas) o no son posibles o demasiado complejas en lenguajes de alto nivel. A pesar del hecho de que codificar en un lenguaje de alto nivel es ms productivo, alguna de las ventajas de codificar en lenguaje ensamblador son: Proporciona ms control sobre el manejo particular de los requerimientos de hardware. Genera mdulos ejecutables ms pequeos y ms compactos. Con mayor probabilidad tiene una ejecucin ms rpida Uso y aplicaciones del lenguaje ensamblador
4 El uso del lenguaje ensamblador le permite al programador indicarle al computador exactamente cmo llevar a cabo una tarea especfica usando la menor cantidad de instrucciones. Aun cuando el cdigo generado por los compiladores con opcin de optimizacin es eficiente, la optimizacin manual puede resultar en una mejora sustancial en trminos de rendimiento y consumo de memoria. El lenguaje ensamblador es usualmente utilizado en las siguientes circunstancias: Mejorar la eficiencia de una rutina especfica que se ha transformado en un cuello de botella. Obtener acceso a funciones de bajo nivel del procesador para realizar tareas que no son soportadas por los lenguajes de alto nivel. Escribir manejadores de dispositivos para comunicarse directamente con hardware especial tales como tarjetas de red. Trabajar en ambientes con recursos limitados puede requerir el uso del lenguaje ensamblador pues el cdigo ejecutable puede ser menor que el generado por el compilador. Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se centran bsicamente en aplicaciones de tiempo real, control de procesos y de dispositivos electrnicos. 1.2 El procesador y sus registros internos Debe parecer un poco lento el que el procesador trabaje slo con la memoria primaria, cada byte a ser usado debe ser transferido y regresado. Sin embargo hay una pequea cantidad de memoria construida dentro del procesador. Esta memoria consiste de 14 palabras de memoria read-write. Cada una de estas palabras es llamada un registro y cada registro tiene su propio nombre y propsito. Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Son reas del almacenamiento dentro del procesador, usadas para almacenar datos con los cuales est trabajando el procesador en un momento dado de la ejecucin de una instruccin. Los registros son direccionables por medio de un nombre. Los bits por convencin, se numeran de derecha a izquierda, como en:
5 ... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Algunas caractersticas de los Registros internos Cada Procesador contiene cierto nmero de estos. Los registros son la memoria ms rpida de la PC. La mayora de las operaciones se realizan en los registros. El ancho de los registros (en bits), determina cuanta informacin puede manejar. El tamao del procesador est ligado a los registros internos. Los registros internos del procesador se pueden clasificar en 6 tipos diferentes: Registros de segmento. Registros de propsito general. Registros de apuntadores. Registros de banderas. Registros de Puntero de instruccin. Registros de Pila. 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 direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, ms un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Registro DS. La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En trminos sencillos, esta direccin, ms un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un byte especifico en el segmento de datos.
6 Registro SS. El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de pila (SP), indica la palabra actual en la pila que est siendo direccionada. Registro 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 est asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada. Registros FS y GS. Son registros extra de segmento en los procesadores 80386 y posteriores. Registros de propsito general Los registros de propsito 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 ltimo byte de la izquierda es la parte "alta", y el ltimo 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 aritmtica. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. Tambin, algunas operaciones generan cdigo ms 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 propsito general que puede ser ndice para direccionamiento indexado. Tambin es comn emplear el BX para clculos. Registro DX. El DX es conocido como l registro de datos. Algunas operaciones de entrada/salida requieren uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX trabajando juntos.
7
Registro de Apuntador de Instrucciones El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se est ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP. Registros Apuntadores Los registros SP (apuntador de la pila) Y BP (apuntador de base) estn 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 est asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que est 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 automtica estos registros. En el ejemplo siguiente, el registro SS contiene la direccin de segmento 27B3[0]H y el SP el desplazamiento 312H. Para encontrar la palabra actual que est siendo procesada en la pila, la computadora combina las direcciones en el SS y el SP: Registro BP. El BP de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP. Registros ndice Los registros SI y DI estn 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 est asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI.
8 Registro DI. El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI est 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 mquina y el resultado del procesamiento. Muchas instrucciones que piden comparaciones y aritmtica cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la accin 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) despus de una operacin aritmtica. DF (direccin). Designa la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres. IF (interrupcin). Indica que una interrupcin externa, como la entrada desde el teclado, sea procesada o ignorada. TF (trampa). Permite la operacin del procesador en modo de un paso. Los programas depuradores, como el DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecucin de una sola instruccin a un tiempo, para examinar el efecto de esa instruccin sobre los registros de memoria. SF (signo). Contiene el signo resultante de una operacin aritmtica (0 = positivo y 1 = negativo). ZF (cero). Indica el resultado de una operacin aritmtica o de comparacin (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 aritmtica especializada.
9 PF (paridad). Indica paridad par o impar de una operacin en datos de 8 bits de bajo orden (mas a la derecha). CF (acarreo). Contiene el acarreo de orden ms alto (ms a la izquierda) despus de una operacin aritmtica; tambin lleva el contenido del ultimo bit en una operacin de corrimiento o de rotacin. Las banderas estn en el registro de banderas en las siguientes posiciones: Las banderas ms importantes para la programacin en ensamblador son O, S, Z y C, para operaciones de comparacin y aritmticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores tienen algunas banderas usadas para propsitos internos, en especial las que afectan al modo protegido. 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. Indicadores (flags) Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits ms significativos estn indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno (esto tambin ocurra en los procesadores anteriores). CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) hacia, o "prstamo" (en caso de resta) desde el bit de orden ms significativo del resultado. Este indicador es usado por instrucciones que suman o restan nmeros que ocupan varios bytes.
10 Las instrucciones de rotacin pueden aislar un bit de la memoria o de un registro ponindolo en el CF. PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un nmero par de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones. AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "prstamo" del nibble (cuatro bits) menos significativo al nibble ms significativo. Este indicador se usa con las instrucciones de ajuste decimal. ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operacin es cero. SF (Sign Flag, bit 7): Refleja el bit ms significativo del resultado. Como los nmeros negativos se representan en la notacin de complemento a dos, este bit representa el signo: 0 si es positivo, 1 si es negativo. TF (Trap Flag, bit 8): Si vale 1, el procesador est en modo paso a paso. En este modo, la CPU automticamente genera una interrupcin interna despus de cada instruccin, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instruccin por instruccin. IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupcin externas enmascarables (por el pin INTR). Si vale 0, no se reconocen tales interrupciones. Las interrupciones no enmascarables y las internas siempre se reconocen independientemente del valor de IF. DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirn "auto-decremento", esto es, se procesarn las cadenas desde las direcciones ms altas de memoria hacia las ms bajas. Si vale 0, habr "auto-incremento", lo que quiere decir que las cadenas se procesarn de "izquierda a derecha". OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operacin aritmtica con signo, esto es, un dgito significativo se perdi debido a que tamao del resultado es mayor que el tamao del destino.
11 1.3 La memoria principal (RAM) Se denomina Memoria a los circuitos que permiten almacenar y recuperar la informacin. En un sentido ms amplio, puede referirse tambin a sistemas externos de almacenamiento, como las unidades de disco o de cinta. Memoria de acceso aleatorio o RAM (Random Access Memory) es la memoria basada en semiconductores que puede ser leda y escrita por el microprocesador u otros dispositivos de hardware. La memoria RAM (Random Access Memory) o memoria de acceso aleatorio de lectura/escritura voltil, se dispone como una _hoja de trabajo_ para almacenamiento temporal y ejecucin de programas. En la memoria de acceso aleatorio (RAM), las celdas de la memoria pueden accesarse para la transferencia de informacin en cualquier posicin aleatoria deseada. Esto es, el proceso de ubicar una palabra en la memoria es igual y requiere la misma cantidad de tiempo, sin importar la ubicacin fsica de las celdas en la memoria. Existen dos tipos de memorias RAM: Las RAM estticas o SRAM y las RAM dinmicas o DRAM. En una RAM esttica (SRAM) el valor almacenado en una celda se mantiene mediante un par de inversores y, mientras se suministre electricidad, el valor puede mantenerse indefinidamente. En una RAM dinmica (DRAM), el valor almacenado en una celda se mantiene como una carga en un condensador. Para acceder a la carga almacenada se usa slo un transistor, tanto para leer el valor como para sobrescribirlo. Debido a que las DRAMs slo usan un transistor por bit de almacenamiento, son mucho ms densas y el precio por bit es menor. En comparacin, las SRAMs requieren entre cuatro y seis transistores por bit. En las DRAMs la carga se almacena en un condensador, por lo tanto no puede mantenerse indefinidamente y debe refrescarse peridicamente. Caractersticas de la memoria principal (RAM) Un sistema de memoria se puede clasificar en funcin de muy diversas caractersticas. Entre ellas podemos destacar las siguientes: localizacin de la memoria, capacidad, mtodo de acceso y velocidad de acceso. En el caso de la memoria RAM (tambin denominada memoria principal o primaria) se puede realizar la siguiente clasificacin: Localizacin: Interna (se encuentra en la placa base)
12 Capacidad: Hoy en da no es raro encontrar ordenadores PC equipados con 64, 128 256 Mb de memoria RAM. Mtodo de acceso: La RAM es una memoria de acceso aleatorio. Esto significa que una palabra o byte se puede encontrar de forma directa, sin tener en cuenta los bytes almacenados antes o despus de dicha palabra (al contrario que las memorias en cinta, que requieren de un acceso secuencial). Adems, la RAM permite el acceso para lectura y escritura de informacin. Velocidad de acceso: Actualmente se pueden encontrar sistemas de memoria RAM capaces de realizar transferencias a frecuencias del orden de los Gbps (gigabits por segundo). Tambin es importante anotar que la RAM es una memoria voltil, es decir, requiere de alimentacin elctrica para mantener la informacin. En otras palabras, la RAM pierde toda la informacin al desconectar el ordenador. En la actualidad hemos de disponer de la mayor cantidad posible de sta, ya que estamos supeditados al funcionamiento ms rpido o ms lento de nuestras aplicaciones diarias. La memoria RAM hace unos aos era muy cara, pero hoy en da su precio ha bajado considerablemente. 1.4 El concepto de interrupciones Una interrupcin no es ms que un evento que genera la ruptura de la ejecucin de un programa para pasar a ejecutar otro relacionado con el evento causante de la interrupcin. La interrupcin, desde el punto de vista del mecanismo que la activa, puede ser de tipo: Hardware Software Las interrupciones de hardware, estn asociadas generalmente a un dispositivo fsico (reloj del sistema, perifrico) y consisten en la activacin de una lnea para dar a conocer a la UCP la Aparicin del evento asociado. Las interrupciones de software consisten en instrucciones cuyo efecto es la ejecucin de una rutina de servicio de interrupcin (se suelen usar para llamadas al sistema operativo porque aslan software de usuario y de sistema).
13 Tabla de servicio de interrupcin Cuando la computadora se enciende, el BIOS y el DOS establecen una tabla de servicios de interrupcin en las localidades de memoria 000H-3FFH. La tabla permite el uso de 256 (100H) interrupciones, cada una con un desplazamiento: segmento relativo de cuatro bytes en la forma IP:CS. El operando de una instruccin de interrupcin como INT 05H identifica el tipo de solicitud. Como existen 256 entradas, cada una de cuatro bytes, la tabla ocupa los primeros 1, 024 bytes de memoria, desde 000H hasta 3FFH. Cada direccin en la tabla relaciona a una ruina de BIOS o del DOS para un tipo especfico de interrupcin. Por lo tanto los bytes 0-3 contienen la direccin para la interrupcin 0, los bytes 4-7 para la interrupcin 1, y as sucesivamente:
Eventos de una interrupcin Una interrupcin guarda en la pila el contenido del registro de banderas, el CS, y el IP. Por ejemplo, la direccin en la tabla de INT 05H (que imprime la que se encuentra en la pantalla cuando el usuario presiona Ctrl + PrtSC) es 0014H (05H x 4 = 14H). La operacin extrae la direccin de cuatro bytes de la posicin 0014H y almacena dos bytes en el IP y dos en el CS. La direccin CS: IP entonces apunta al inicio de la rutina en el rea del BIOS, que ahora se ejecuta. La interrupcin regresa va una instruccin IRET (regreso de interrupcin), que saca de la pila el IP, CS y las banderas y regresa el control a la instruccin que sigue al INT. Tipos de interrupciones Las interrupciones se dividen en dos tipos las cuales son: Externas y Internas. Una interrupcin externa es provocada por un dispositivo externo al procesador. Las dos lneas
14 que pueden sealar interrupciones externas son la lnea de interrupcin no enmascarable (NMI) y la lnea de peticin de interrupcin (INTR). La lnea NMI reporta la memoria y errores de paridad de E/S. El procesador siempre acta sobre esta interrupcin, aun si emite un CLI para limpiar la bandera de interrupcin en un intento por deshabilitar las interrupciones externas. La lnea INTR reporta las peticiones desde los dispositivos externos, en realidad, las interrupciones 05H a la 0FH, para cronometro, el teclado, los puertos seriales, el disco duro, las unidades de disco flexibles y los puertos paralelos. Una interrupcin interna ocurre como resultado de la ejecucin de una instruccin INT o una operacin de divisin que cause desbordamiento, ejecucin en modo de un paso o una peticin para una interrupcin externa, tal como E/S de disco. Los programas por lo comn utilizan interrupciones internas, que no son enmascarables, para accesar los procedimientos del BIOS y del DOS. Interrupcin de BIOS El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que indican el estado de los dispositivos del sistema. El dos y los programas usuarios pueden solicitar rutinas del BIOS para la comunicacin con los dispositivos conectados al sistema. El mtodo para realizar la interfaz con el BIOS es el de las interrupciones de software. A continuacin se listan algunas interrupciones del BIOS. INT 00H: Divisin entre cero. Llamada por un intento de dividir entre cero. Muestra un mensaje y por lo regular se cae el sistema. INT 01H: Un solo paso. Usado por DEBUG y otros depuradores para permitir avanzar por paso a travs de la ejecucin de un programa. INT 02H: Interrupcin no enmascarare. Usada para condiciones graves de hardware, tal como errores de paridad, que siempre estn habilitados. Por lo tanto un programa que emite una instruccin CLI (limpiar interrupciones) no afecta estas condiciones. INT 03H: Punto de ruptura. Usado por depuracin de programas para detener la ejecucin.
15 INT 04H: Desbordamiento. Puede ser causado por una operacin aritmtica, aunque por lo regular no realiza accin alguna. INT 05H: Imprime pantalla. Hace que el contenido de la pantalla se imprima. Emita la INT 05H para activar la interrupcin internamente, y presione las teclas Cltr + PrtSC para activarla externamente. La operacin permite interrupciones y guarda la posicin del cursor. INT 08H: Sistema del cronometro. Una interrupcin de hardware que actualiza la hora del sistema y (si es necesario) la fecha. Un chip temporizador programable genera una interrupcin cada 54.9254 milisegundos, casi 18.2 veces por segundo. INT 09H: Interrupcin del teclado. Provocada por presionar o soltar una tecla en el teclado. INT OBH, INT OCH: Control de dispositivo serial. Controla los puertos COM1 y COM2, respectivamente. INT 0DH, INT OFH: Control de dispositivo paralelo. Controla los puertos LPT1 y LPT2, respectivamente. INT 0EH: Control de disco flexible. Seala actividad de disco flexible, como la terminacin de una operacin de E/S. INT 10H: Despliegue en vdeo. Acepta el nmero de funciones en el AH para el modo de pantalla, colocacin del cursor, recorrido y despliegue. INT 11H: Determinacin del equipo. Determina los dispositivos opcionales en el sistema y regresa el valor en la localidad 40:10H del BIOS al AX. (A la hora de encender el equipo, el sistema ejecuta esta operacin y almacena el AX en la localidad 40:10H). INT 12H: Determinacin del tamao de la memoria. En el AX, regresa el tamao de la memoria de la tarjeta del sistema, en trminos de kilobytes contiguos. INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el estado del disco, sectores ledos, sectores escritos, verificacin, formato y obtener diagnstico. Interrupcin del DOS
16 Los dos mdulos del DOS, IO.SYS y MSDOS.SYS, facilitan el uso del BIOS. Ya que proporcionan muchas de las pruebas adicionales necesarias, las operaciones del DOS por lo general son ms fciles de usar que sus contrapartes del BIOS y por lo comn son independientes de la maquina. IO.SYS es una interfaz de nivel bajo con el BIOS que facilita la lectura de datos desde la memoria hacia dispositivos externos. MSDOS.SYS contiene un administrador de archivos y proporciona varios servicios. Por ejemplo, cuando un programa usuario solicita la INT 21H, la operacin enva informacin al MSDOS.SYS por medio del contenido de los registros. Para completar la peticin, MSDOS.SYS puede traducir la informacin a una o ms llamadas a IO.SYS, el cual a su vez llama al BIOS. Las siguientes son las relaciones implcitas:
Interrupciones del DOS Las interrupciones desde la 20H hasta la 3FH estn reservadas para operaciones del DOS. A continuacin se mencionan algunas de ellas. INT 20H: Termina programa. Finaliza la ejecucin de un programa .COM, restaura las direcciones para Cltr + Break y errores crticos, limpia los bfer de registros y regresa el control al DOS. Esta funcin por lo regular seria colocada en el procedimiento principal y al salir de el, CS contendra la direccin del PSP. La terminacin preferida es por medio de la funcin 4CH de la INT 21H. INT 21H: Peticin de funcin al DOS. La principal operacin del DOS necesita una funcin en el AH. INT 22H: Direccin de terminacin. Copia la direccin de esta interrupcin en el PSP del programa (en el desplazamiento 0AH) cuando el DOS carga un programa para ejecucin. A
17 la terminacin del programa, el DOS transfiere el control a la direccin de la interrupcin. Sus programas no deben de emitir esta interrupcin. INT 23H: Direccin de Cltr + Break. Diseada para transferir el control a una rutina del DOS (por medio del PSP desplazamiento 0EH) cuando usted presiona Ctlt + Break o Ctlr + c. La rutina finaliza la ejecucin de un programa o de un archivo de procesamiento por lotes. Sus programas no deben de emitir esta interrupcin. INT 24H: Manejador de error crtico. Usada por el dos para transferir el control (por medio del PSP desplazamiento 12H) cuando reconoce un error critico (a veces una operacin de disco o de la impresora).Sus programas no deben de emitir esta interrupcin. INT 25H: Lectura absoluta de disco. Lee el contenido de uno o ms sectores de disco. INT 26H: Escritura absoluta de disco. Escribe informacin desde la memoria a uno o ms sectores de disco. INT 27H: Termina pero permanece residente (reside en memoria). Hace que un programa .COM al salir permanezca residente en memoria. INT 2FH: Interrupcin de multiplexion. Implica la comunicacin entre programas, como la comunicacin del estado de un spooler de la impresora, la presencia de un controlador de dispositivo o un comando del DOS tal como ASSIGN o APPEND. INT 33H: Manejador del ratn. Proporciona servicios para el manejo del ratn. 1.5 Llamadas a servicios del sistema La interfaz entre el sistema operativo y los programas de usuarios est definida por el conjunto de llamadas al sistema ofrecidas por el sistema operativo. Las llamadas al sistema con que cuenta la interfaz varan de un sistema operativo a otro. Puesto que el mecanismo real para emitir una llamada al sistema depende mucho de la mquina y muchas veces debe de expresarse en cdigo ensamblador, se proporciona una biblioteca de procedimientos que permite hacer llamadas al sistema desde programas en C y tambin desde otros lenguajes. En cierto sentido, efectuar una llamada al sistema es como efectuar una llamada a un
18 procedimiento especial, solo que las llamadas al sistema entran al kernel y las llamadas a procedimientos no. Se trata de que una aplicacin ejecute una rutina del sistema operativo, con objeto de que la rutina le preste un servicio. Por ejemplo, cuando un programa desea abrir un fichero de disco, llama a un servicio del sistema que le permite llevar a cabo sta tarea. Debe tenerse en cuenta que una aplicacin no puede acceder directamente al disco, y debe hacerlo a travs del sistema operativo. Hay dos tipos de instrucciones relacionados con la llamada a servicios del sistema operativo: Syscall. Instruccin de llamada a un servicio del sistema operativo, a travs de su API. Cuando una tarea ejecuta esta instruccin pasa el control al sistema operativo.
Sysret. Instruccin de retorno de un servicio. El sistema operativo ejecuta esta instruccin justo antes de devolver el control a la tarea que solicit el servicio. Entre la ejecucin de las instrucciones Syscall y Sysret, el sistema operativo accede al espacio de memoria de la tarea. Por ejemplo, el sistema operativo escribe en una estructura de datos de la tarea asociada a un fichero si la apertura del _chero se ha completado con xito o no. Despus de ejecutar la instruccin Sysret, se ejecuta la instruccin siguiente a la Syscall.
1.6 Modos de direccionamiento El campo de operacin de una instruccin especifica la operacin que se va a ejecutar. Esta operacin debe realizarse sobre algunos datos almacenados en registros de computadora o en palabras de memoria. La manera en que eligen los operandos durante la ejecucin del programa depende del modo de direccionamiento de la instruccin. El modo de direccionamiento especifica una regla para interpretar o modificar el campo de direccin de la instruccin antes de que se haga la referencia real al operando. Las computadoras utilizan tcnicas de modo de direccionamiento para acomodar una o las dos siguientes consideraciones:
19 Proporcionar al usuario versatilidad de programacin al ofrecer facilidades como apuntadores a memoria, contadores para control de ciclo, indexacin de datos y reubicacin de datos. Reducir la cantidad de bits en el campo de direccionamiento de la instruccin. La disponibilidad de los modos de direccionamiento proporciona al programador con experiencia en lenguaje ensamblador la flexibilidad para escribir programas ms eficientes en relacin con la cantidad de instrucciones y el tiempo de ejecucin. Para comprender los diferentes modos de direccionamiento que se presentaran en esta seccin, es imperativo entender el ciclo de operacin bsico de la computadora. La unidad de control de una computadora est diseada para recorrer un ciclo de instrucciones que se divide en tres fases principales: Bsqueda de la instruccin de la memoria. Decodificar la instruccin. Ejecutar la instruccin. Hay un registro en la computadora llamado contador de programa o PC, que lleva un registro de las instrucciones del programa almacenado en la memoria. Pc contiene la direccin de la siguiente instruccin que se va a ejecutar y se incrementa cada vez que se recupera una instruccin de la memoria. La decodificacin realizada en el paso 2 determina la operacin que se va a ejecutar, el modo de direccionamiento de la instruccin y la posicin de los operandos. Despus la computadora ejecuta la instruccin y regresa al paso 1 para hacer la bsqueda de la siguiente instruccin en secuencia. En algunas computadoras el modo de direccionamiento de la instruccin se especifica con un cdigo binario distinto, como se hace con el cdigo de operacin. Otras computadoras utilizan un cdigo binario nico que representa la operacin y el modo de la instruccin. Pueden definirse instrucciones con diversos modos de direccionamiento y, en ocasiones, se combinan dos o ms modos de direccionamiento en una instruccin.
20 Aunque la mayora de los modos de direccionamiento modifican el campo de direccin de la instruccin, hay dos modos que no necesitan el campo de direccin. Son los modos implcito e inmediato. Modo implcito En este modo se especifican los operandos en forma implcita en la definicin de la instruccin. Por ejemplo, la instruccin "complementar acumulador" es una instruccin de modo implcito porque el operando en el registro de acumulador est implcito en la definicin de la instruccin. De hecho todas las instrucciones de referencia a registro que utilizan un acumulador son instrucciones de modo implcito. Las instrucciones de direccin cero en una computadora organizada con pila son instrucciones de modo implcito porque est implcito que los operandos estn en la parte superior de la pila. Modo inmediato En este modo se especifica el operando en la instruccin misma. En otras palabras, una instruccin de modo inmediato tiene un campo operando, en lugar de una campo de direccin. Un campo de operando contiene el operando real que se va a usar junto con la operacin especificada en la instruccin. Las instrucciones de modo inmediato son tiles para inicializar registros en un valor constante. Se mencion antes que el campo de direccin de una instruccin puede especificar una palabra de memoria o un registro de procesador. Cuando el campo de direccin especifica un registro de procesador se dice que la instruccin est en modo de registro. Modo de registro En este modo, los operandos estn en registros que residen dentro de la CPU. Se selecciona el registro particular de un campo de registro en la instruccin. Un campo k bits puede especificar cualquiera de 2 a la k registros. Modo indirecto por registro
21 En este modo la instruccin especifica un registro en la CPU cuyo contenido proporciona la direccin del operando en la memoria. En otras palabras, el registro seleccionado contiene la direccin del operando en lugar del operando mismo. Antes de utilizar una instruccin de modo indirecto por registro, el programador debe asegurarse de que la direccin de memoria del operando est colocada en el registro del procesador con una instruccin previa. Entonces una referencia al registro es equivalente a especificar una direccin de memoria. La ventaja de una instruccin de modo de registro indirecto es que el campo de direccin de la instruccin utiliza menos bits para seleccionar un registro de los que necesitara para especificar una direccin de memoria en forma directa. Modo de direccionamiento directo En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El operando reside en memoria y su direccin la proporciona en forma directa el campo de direccin de la instruccin. En una instruccin de tipo brinco el campo de direccin especifica la direccin de transferencia de control del programa real. Modo de direccionamiento indirecto En este modo, el campo de direccin de la instruccin proporciona la direccin en que se almacena la direccin efectiva en la memoria. El control recupera la instruccin de la memoria y utiliza su parte de direccin para accesar la memoria una vez ms con el fin de leer la direccin efectiva. Unos cuantos modos de direccionamiento requieren que el campo de direccin de la instruccin se sume al contenido de un registro especfico en la CPU. En estos modos la direccin efectiva se obtiene del clculo siguiente: Direccin efectiva = Parte de la instruccin + El contenido de registro CPU. EL registro de CPU utilizado en el clculo puede ser el contador de programa, un registro de ndice o un registro base. En cualquier caso tenemos un modo de direccionamiento diferente que se utiliza para una aplicacin distinta. Modo de direccionamiento indexado
22 En este modo el contenido de un registro ndice se suma a la parte de direccin de la instruccin para obtener la direccin efectiva. El registro ndice es un registro CPU especial que contiene un valor ndice. Un campo de direccin de la instruccin define la direccin inicial del arreglo de datos en la memoria. Cada operando del arreglo se almacena en la memoria en relacin con la direccin inicial. La distancia entre la direccin inicial y la direccin del operando es el valor del ndice almacenado en el registro de ndice. Cualquier operando en el arreglo puede accesarse con la misma instruccin siempre y cuando el registro ndice contenga el valor de ndice correcto. El registro ndice puede incrementarse para facilitar el acceso a operandos consecutivos. Ntese que si una instruccin de tipo ndice no incluye un campo de direccin en su formato, la instruccin se convierte al modo de operacin de indirecto por registro. Algunas computadoras dedican un registro de CPU para que funcione exclusivamente como un registro ndice. De manera implcita este registro participa cuando se utiliza una instruccin de modo ndice. En las computadoras con muchos registros de procesador, cualquiera de los registros de la CPU puede contener el nmero de ndice. En tal caso, el registro debe estar especificado en forma explcita en un campo de registro dentro del formato de instruccin. Modo de direccionamiento de registro base En este modo, el contenido de un registro base se suma a la parte de direccin de la instruccin para obtener la direccin efectiva. Esto es similar al modo de direccionamiento indexado, excepto en que el registro se denomina ahora registro base, en lugar de registro ndice. La diferencia entre los dos modos est en la manera en que se usan ms que en la manera en que se calculan. Se considera que un registro base contiene una direccin base y que el campo de direccin de la instruccin proporciona un desplazamiento en relacin con esta direccin base. El modo de direccionamiento de registro base se utiliza en las computadoras para facilitar la localizacin de los programas en memoria.
23 1.7 Proceso de ensamblado y ligado Para crear un programa ejecutable utilizando lenguaje ensamblador es necesario realizar la serie de pasos, conocida como ciclo de desarrollo de programas, que se muestra en la figura.
Figura 1. 1 Proceso para el ciclo de desarrollo de programas Un ensamblador es el programa que convierte un listado de cdigo fuente, escrito en un fichero de texto, en cdigo objeto, es decir, lenguaje mquina (el que finalmente interpretar el procesador) en el que slo le faltan las referencias a rutinas externas. El cdigo fuente es un fichero que contiene la secuencia de instrucciones en lenguaje ensamblador que forma el programa, as como ciertas directivas o comandos para el propio ensamblador, que ha sido creado utilizando un editor de texto. El cdigo objeto consta del cdigo en lenguaje mquina y de la informacin necesaria para enlazarlo con otros mdulos objeto. Proceso de ligado Al construir un programa algunos de sus mdulos pueden colocarse en el mismo mdulo fuente y ensamblarse juntos, otros pueden estar en mdulos diferentes y ser ensamblados separadamente. En cualquier caso, los mdulos objeto resultantes, algunos de
24 los cuales pueden estar agrupados en libreras, deben ser enlazados para formar el mdulo de carga, antes de que se pueda ejecutar el programa. Adems de dar como salida el mdulo de carga, el linker o enlazador imprime un mapa de memoria que indica donde sern cargados los mdulos objeto en la memoria. Despus de crearse el mdulo de carga, ste es cargado por el cargador en la memoria del ordenador y comienza la ejecucin.
Figura 1. 2 Proceso de ligado 1.8 Desplegado de mensajes en el monitor La pantalla es una malla de posiciones direccionables, en cualquiera de las cuales se puede colocar el cursor. El sistemas proporcionara espacio en la memoria para un are de despliegue de video, o bfer. El rea de despliegue monocromtico inicia en la localidad BISOS B000[0]H y permite utilizar 4K bytes de memoria: 2KB disponibles para caracteres y 2K para atributos de cada carcter, como video inverso, intermitencia, intensidad y subrayado.
Figura 1. 3 Funciones predefinidas de la BIOS
25
Figura 1. 4 Funcin para mostrar el conjunto de caracteres ASCII
26 Unidad 2 Programacin bsica 2.1 Ensamblador (y ligador) a utilizar El lenguaje ensamblador, o assembler (assembly language en ingls), es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura legible por un programador. Un ensamblador es el programa que convierte un listado de cdigo fuente, escrito en un fichero de texto, en cdigo objeto, es decir, lenguaje mquina (el que finalmente interpretar el procesador) en el que slo le faltan las referencias a rutinas externas. El cdigo fuente es un fichero que contiene la secuencia de instrucciones en lenguaje ensamblador que forma el programa, as como ciertas directivas o comandos para el propio ensamblador, que ha sido creado utilizando un editor de texto. El cdigo objeto consta del cdigo en lenguaje mquina y de la informacin necesaria para enlazarlo con otros mdulos objeto. Con TASM el proceso de ensamblado se realiza escribiendo lo siguiente en la ventana de comandos: tasm /zi /l nombre donde nombre es el nombre del fichero .asm con el cdigo fuente. La extensin no es necesaria ponerla y los parmetros /zi y /l slo son tiles si queremos hacer un proceso de depuracin (debug) con el Turbo Debugger. Tras la ejecucin de esta lnea se nos crear un fichero nombre.obj. Linkado y montado Al construir un programa algunos de sus mdulos pueden colocarse en el mismo mdulo fuente y ensamblarse juntos, otros pueden estar en mdulos diferentes y ser ensamblados separadamente. En cualquier caso, los mdulos objeto resultantes, algunos de los cuales pueden estar agrupados en libreras, deben ser enlazados para formar el mdulo de carga, antes de que se pueda ejecutar el programa. Adems de dar como salida el mdulo de carga, el linker o enlazador imprime un mapa de memoria que indica donde sern cargados los mdulos objeto en la memoria.
27 Despus de crearse el mdulo de carga, ste es cargado por el cargador en la memoria del ordenador y comienza la ejecucin. Para linkar con TASM escribimos: tlink /v nombre Tras esto se nos crear el fichero ejecutable (.exe o .com) que el sistema operativo se encargar de cargar en memoria Cuando lo ejecutemos. De nuevo, la extensin no es necesaria ponerla y el parmetro /v slo es til para el Turbo Debugger.
Figura 2. 1 Proceso de Linkado 2.2 Ciclos numricos El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la programacin de ciclos finitos, la instruccin LOOP. Esta instruccin trabaja en forma conjunta con el registro contador CX. El formato general de esta instruccin es: Mov CX, Numero_Veces Etiqueta: Instrucciones a realizar Loop Etiqueta La instruccin Loop ejecuta las instrucciones que se encuentran entre la Etiqueta: y Loop Etiqueta el nmero de veces que indique el campo No_Veces. Por ejemplo, el siguiente grupo de instrucciones incrementa en 1 el registro AX, esto lo repite 100 veces.
28 Mov CX,100 ;100 veces repetir: Nombre de la etiqueta Inc AX ;AX = AX + 1 Loop repetir Regresa a la etiqueta y compara el ciclo La instruccin Loop decrementa el registro CX en cada iteracin y se detiene cuando CX es igual a cero. Un bucle es un grupo de instrucciones que se ejecutan cclicamente un nmero concreto de veces. Para construir bucles disponemos de las siguientes instrucciones: stas posibilitan el grupo de control ms elemental de nuestros programas. Un bucle es un bloque de cdigo que se ejecuta varias veces. Hay 4 tipos de bucles bsicos: o Bucles sin fin o Bucles por conteo, Bucles hasta o Bucles mientras. Las instrucciones de control de bucles son las siguientes: INC incrementar. DEC decrementar. LOOP realizar un bucle. LOOPZ, LOOPE realizar un bucle si es cero. LOOPNZ,LOOPNE realizar un bucle si no es cero JCXZ salta si CX es cero 2.3 Captura de cadenas En el lenguaje ensamblador el tipo de dato cadena (string) no est definido, pero para fines de programacin, una cadena es definida como un conjunto de localidades de memoria consecutivas que se reservan bajo el nombre de una variable. Instrucciones para el manejo de strings Instrucciones para el manejo de strings El lenguaje ensamblador cuenta con cinco instrucciones para el manejo de cadenas: MOVS: Mueve un byte o palabra desde una localidad de memoria a otra.
29 LODS: Carga desde la memoria un byte en AL o una palabra en AX. STOS: Almacena el contenido del registro AL o AX en la memoria. CMPS: Compara localidades de memoria de un byte o palabra. SCAS: Compara el contenido de AL o AX con el contenido de alguna localidad de memoria. Las instrucciones para cadenas trabajan en conjunto con la instruccin CLD, la cual permite establecer que el sentido en el que las cadenas sern procesadas ser de izquierda a derecha. Otra instruccin importante es el prefijo de repeticin REP, el cual permite que una instruccin para manejo de cadenas pueda ser repetida un nmero determinado de veces. Los registros ndice juegan un papel importante en el procesamiento de cadenas de datos, el par de registros CS: SI indican la direccin de la cadena original que ser procesada, y el par ES:DI contienen la direccin donde las cadenas pueden ser almacenadas. 2.4 Comparacin y prueba Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST. CMP (Comparar) compara si dos valores son iguales o diferentes. Su funcionamiento es similar al de la instruccin SUB (restar), slo que no modifica el operando de destino, solamente modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF). Por ejemplo: CMP AX, 33 Esta instruccin compara si el valor almacenado en el registro AX es igual que el valor 33 en decimal. Por otro lado, la instruccin TEST realiza la operacin AND de los operandos especificados sin que el resultado se almacene en algn registro, modificando nicamente ciertas banderas. Su aplicacin ms comn es la de probar si algn bit es cero. Por ejemplo: Test AL, 1 Esta instruccin prueba si el bit menos significativo de AL es 1 y
30 Test AL, 128 prueba si el bit ms significativo de AL es 1. Por lo general estas instrucciones van seguidas de alguna de las instrucciones de salto. 2.5 Saltos En lenguaje ensamblador existen diferentes tipos de saltos que nos ayudan a saltar a una lnea especificada de cdigo. A continuacin se muestran los diferentes tipos de saltos: JMP salta JE, JZ salta si es igual a cero JNE, JNZ salta si no igual a cero JS salta si signo negativo JNS salta si signo no negativo JP, JPE salta si paridad par JNP, JOP salta si paridad impar JO salta si hay capacidad excedida JNO salta si no hay capacidad excedida JB, JNAE salta si por abajo (no encima o igual) JNB, JAE salta si no est por abajo (encima o igual) JBE, JNA salta si por abajo o igual (no encima) JNBE, JA salta si no por abajo o igual (encima) JL, JNGE salta si menor que (no mayor o igual) JNL, JGE salta si no menor que (mayor o igual) JLE, JNG salta si menor que o igual (no mayor) JNLE, JG salta si no menor que o igual (mayor) JMP (Salto) Sintaxis: JMP direccin o JMP SHORT direccin Transfiere el control incondicionalmente a la direccin indicada en el operando. La bifurcacin puede ser tambin directa o indirecta como anteriormente vimos, pero adems puede ser corta (tipo SHORT) con un desplazamiento comprendido entre-128 y 127; o larga, con un desplazamiento de dos bytes con signo. Si se hace un JMP SHORT y no llega
31 el salto (porque est demasiado alejada esa etiqueta) el ensamblador dar error. Los buenos ensambladores (como TASM) cuando dan dos pasadas colocan all donde es posible un salto corto, para economizar memoria, sin que el programador tenga que ocuparse de poner short. Si el salto de dos bytes, que permite desplazamientos de 64 Kb en la memoria sigue siendo insuficiente, se puede indicar con far que es largo (salto a otro segmento). Ejemplos: JMP ETIQUETA JMP FAR PTR ETIQUETA 2.6 Ciclos condicionales Existen dos tipos de instrucciones de salto: las instrucciones de salto condicional y las de salto incondicional. Las instrucciones de salto condicional, revisan si ha ocurrido alguna situacin para poder transferir el control del programa a otra seccin, por ejemplo: CMP AX, 0 JEotro ::::::::::: otro: :::::::::: End En este ejemplo, la instruccin JE (Salta si es igual) revisa si la prueba implcita en la instruccin anterior result positiva, es decir, si la comparacin de AX con 0 fue cierta. En caso de que AX sea igual a 0, JE transfiere el control del programa a las instrucciones que se encuentran despus de la etiqueta "otro". En caso contrario ejecuta las instrucciones siguientes a JE. La siguiente es una lista de las instrucciones de salto condicional y su descripcin:
32 JA o JNBE: Salta si est arriba o salta si no est por debajo o si no es igual (jump if above or jump if not below or equal). El salto se efecta si la bandera de CF=0 o si la bandera ZF=0. JAE o JNB: Salta si est arriba o es igual o salta si no est por debajo (jump if above or equal or jump if not below). El salto se efecta si CF=0. JB o JNAE: Salta si est por debajo o salta si no est por arriba o es igual (jump if below or jump if not above or equal). El salto se efecta si CF=1. JBE o JNA: Salta si est por debajo o es igual o salta si no est por arriba (jump if below or equal or jump if not above). El salto se efecta si CF=1 o ZF=1. JE o JZ: Salta si es igual o salta si es cero (jump if equal or jump if zero). El salto se efecta si ZF=1. JNE o JNZ: Salta si no es igual o salta si no es cero (jump if not equal or jump if not zero). El salto se efecta si ZF=0. JG o JNLE: Salta si es mayor o salta si no es menor o igual (jump if greater or jump if not less or equal). El salto se efecta si ZF=0 u OF=SF. JGE o JNL: Salta si es mayor o igual o salta si no es menor (jump if greater or equal or jump if not less). El salto se efecta si SF=OF.
2.7 Incremento y decremento Las instrucciones INC y DEC permiten incrementar los contenidos de los registros. Ejemplos: INC AX ;AX=AX+1 INC VAR1 ;VAR1=VAR1+1 DEC AX ;AX=AX-1
33 DEC VAR1 ;VAR1=VAR1-1 y de las variables almacenadas en memoria. 2.8 Captura de cadenas con formato Permiten el movimiento, comparacin o bsqueda rpida en bloques de datos: MOVC transferir carcter de una cadena. MOVW transferir palabra de una cadena. CMPC comparar carcter de una cadena. CMPW comparar palabra de una cadena. SCAC buscar carcter de una cadena. SCAW buscar palabra de una cadena. LODC cargar carcter de una cadena. LODW cargar palabra de una cadena. STOC guardar carcter de una cadena. STOW guardar palabra de una cadena. REP repetir. CLD poner a 0 el indicador de direccin. STD poner a 1 el indicador de direccin. 2.9 Instrucciones aritmticas Instrucciones Aritmticas. Estas instrucciones son las que realiza directamente el 8086/8088 a. Grupo de adicin: ADD suma ADC suma con acarreo AAA ajuste ASCII para la suma DAA ajuste decimal para la suma b. Grupo de sustraccin: SUB resta SBB resta con acarreo negativo AAS ajuste ASCII para la resta
34 DAS ajuste decimal para la resta c. Grupo de multiplicacin: MUL multiplicacin IMUL multiplicacin entera AAM ajuste ASCII para la multiplicacin d. Grupo de divisin: DIV divisin IDIV divisin entera AAD ajuste ASCII para la divisin e. Conversiones: CBW pasar octeto a palabra CWD pasar palabra a doble palabra NEG negacin Ejemplos: ADD AX,BX ;AX=AX+BX ADD AX,10 ;AX=AX+10 SUB AX,BX ;AX=AX-BX SUB AX,10 ;AX=AX-10 En las operaciones de suma y resta el resultado siempre es almacenado en el operando de destino, el cual puede ser un registro o una variable. 2.10 Manipulacin de la pila La pila es un grupo de localidades de memoria que se reservan con la finalidad de proporcionar un espacio para el almacenamiento temporal de informacin. La pila de los programas es del tipo LIFO (Last In First Out, ltimo en entrar, Primero en salir).
35 Para controlar la pila el microprocesador cuenta con dos instrucciones bsicas: Push (Meter) Pop (sacar) El formato de estas instrucciones es el siguiente: Push operando Pop operando Cuando se ejecuta la instruccin Push, el contenido del operando se almacena en la ltima posicin de la pila. Por ejemplo: Si AX se carga previamente con el valor 5, una instruccin Push AX almacenara el valor 5 en la ltima posicin de la pila. Por otro lado la instruccin Pop saca el ltimo dato almacenado en la pila y lo coloca en el operando. Siguiendo el ejemplo anterior, la instruccin Pop BX obtendra el nmero 5 y lo almacenara en el registro BX. 2.11 Obtencin de cadena con representacin decimal En las computadoras el formato natural para la aritmtica es el binario. La representacin del nmero decimal 1; 527 en los tres formatos decimales: ASCII 31 35 32 37 (cuatro bytes) BCD desempaquetado 01 05 02 07 (cuatro bytes) BCD empaquetado 15 27 (dos bytes) El procesador realiza aritmtica en valores ASCII y BCD un dgito a la vez. Ya que los datos son ingresados desde un teclado significan que estn en formato ASCII, la representacin en memoria de un nmero decimal ingresado tal como 1234 es 31323334H.
36 Pero realizar aritmtica sobre tal nmero implica un tratamiento especial. Las instrucciones AAA y AAS realizan aritmtica de manera directa sobre nmeros ASCCI. 2.12 Instrucciones lgicas Son operaciones bit a bit que trabajan sobre octetos o palabras completas: NOT negacin AND producto lgico OR suma lgica XOR suma lgica exclusiva Las instrucciones que se enlistan antes requieren dos operandos, a excepcin de la operacin NOT que slo requiere uno. La operacin OR establece el resultado a 1 si cualquiera de los dos operandos es 1, de lo contrario el resultado ser 0. La instruccin XOR coloca en 0 el resultado si los operandos son iguales, de lo contrario establece 1. Finalmente, la instruccin NOT cambia de estado todos los bits del operando, los unos por ceros y los ceros por unos. La principal aplicacin de estas instrucciones es el enmascaramiento de informacin. La operacin AND nos permite poner a cero cualquier bit de un dato; la operacin OR nos permite poner a uno cualquier bit de un dato y la operacin XOR permite borrar el contenido de algn registro o localidad de memoria, as como para negar algn bit. 2.13 Desplazamiento y rotacin El microprocesador cuenta con un conjunto de instrucciones que permiten la manipulacin de las posiciones individuales de los bits dentro de un registro o localidad de memoria, estas instrucciones se encuentran divididas en dos grupos: instrucciones de rotacin e instrucciones de desplazamiento (tambin conocidas como instrucciones para corrimientos).
37 Las instrucciones para rotacin son cuatro y nos permiten mover de forma cclica los bits que forman parte de un registro o localidad de memoria, estas instrucciones son ROL, ROR, RCL, RCR. ROL y ROR funcionan de forma muy semejante; al ejecutar una instruccin ROL, el bit ms significativo del dato es desplazado hacia la bandera de acarreo y tambin hacia la posicin del bit memos significativo, por lo cual todos los bits restantes son rotados o movidos hacia la izquierda. La instruccin ROR funciona igual, slo que sta trabaja hacia la derecha. Las instrucciones RCL y RCR permiten la rotacin de los bits de una localidad de memoria o registro, considerando tambin el contenido de la bandera de acarreo. En el caso de RCL, el bit ms significativo pasa hacia la bandera de acarreo, el bit que se encontraba en la bandera de acarreo pasa al bit menos significativo y finalmente los bits restantes son rotados hacia la izquierda. La instruccin RCR funciona igual, pero aplica su rotacin hacia la derecha. 2.14 Obtencin de una cadena con la representacin hexadecimal Procesos de Control NOP (Operacin nula). Sintaxis: NOP Indicadores:
Realiza una operacin nula, es decir, el microprocesador decodifica la instruccin y pasa a la siguiente. Realmente se trata de la instruccin XCHG AX,AX. ESC (Salida a un coprocesador). Sintaxis:
38 ESC cdigo_operacin, origen Indicadores:
Se utiliza en combinacin con procesadores externos, tales como los coprocesadores de coma flotante o de E/S, y abre al dispositivo externo el acceso a las direcciones y operandos requeridos. Al mnemnico ESC le siguen los cdigos de operacin apropiados para el coprocesador as como la instruccin y la direccin del operando necesario. Ejemplo: ESC 21,AX HLT (Parada hasta interrupcin o reset). Sintaxis: HLT Indicadores:
El procesador se detiene hasta que se restaura el sistema o se recibe una interrupcin. Como en los PC se producen normalmente 18,2 interrupciones de tipo 8 por segundo (del temporizador) algunos programadores utilizan HLT para hacer pausas y bucles de retardo. Sin embargo, el mtodo no es preciso y puede fallar con ciertos controladores de memoria. LOCK (Bloquea los buses). Sintaxis: LOCK Indicadores:
39
Es una instruccin que se utiliza en aplicaciones de recursos compartidos para asegurar que no accede simultneamente a la memoria ms de un procesador. Cuando una instruccin va precedida por LOCK, el procesador bloquea inmediatamente el bus, introduciendo una seal por la patilla LOCK. 2.15 Captura y almacenamiento de datos numricos Modelos de memoria Los modelos de memoria constituyen las diversas maneras de acceder a la memoria por parte de los compiladores de C. En el caso del Turbo C se pueden distinguir los siguientes: TINY: Se emplea en los programas donde es preciso apurar el consumo de memoria hasta el ltimo byte. Los 4 registros de segmento (CS, DS, ES, SS) estn asignados a la misma direccin, por lo que existe un total de 64 Kb donde se mezclan cdigo, datos y pila. Los programas de este tipo pueden convertirse a formato COM. SMALL: Se utiliza en aplicaciones pequeas. Los segmentos de cdigo y datos son diferentes y no se solapan. Por ello, hay 64 kb para cdigo y otros 64 Kb a repartir entre datos y pila. MEDIUM: Este modelo es ideal para programas largos que no manejan demasiados datos. Se utilizan punteros largos para el cdigo (que puede extenderse hasta 1 Mb) y cortos para los datos: la pila y los datos juntos no pueden exceder de 64 Kb. COMPACT: Al contrario que el anterior, este modelo es el apropiado para los programas pequeos que emplean muchos datos. Por ello, el programa no puede exceder de 64 Kb aunque los datos que controla pueden alcanzar el Mb, ya que los punteros de datos son de tipo far por defecto. LARGE: Empleado en las aplicaciones grandes y tambin por los programadores de sistemas que no tienen paciencia para andar forzando continuamente el tipo de los punteros (para rebasar el lmite de 64 Kb). Tanto los datos como el cdigo pueden alcanzar el Mb, aunque no se admite que los datos estticos ocupen ms de 64 Kb. Este modo es el que
40 menos problemas da para manejar la memoria, no siendo quiz tan lento y pesado como indica el fabricante. HUGE: Similar al anterior, pero con algunas ventajas: por un lado, todos los punteros son normalizados automticamente y se admiten datos estticos de ms de 64 Kb. Por otro, y gracias a esto ltimo, es factible manipular bloques de datos de ms de 64 Kb cada uno, ya que los segmentos de los punteros se actualizan correctamente. Sin embargo, este modelo es el ms costoso en tiempo de ejecucin de los programas. Usando la pila Una seccin de la memoria del programa es reservado para el uso de una pila. La Intel 80386 y procesadores superiores contienen un registro llamado puntero a la pila, esp, el cual almacena la direccin del tope de la pila, la figura 1 de abajo muestra 3 valores enteros, 49, 30 y 72, almacenados en la pila(cada entero ocupando 4 bytes) con el registro esp apuntando a la direccin del tope de la pila.
A diferencia de una pila creciendo hacia arriba, en las mquinas Intel crecen hacia abajo. En la Figura 2 muestra las capas de la pila despus de la ejecucin pushl $15. El puntero de la pila es decrementado de cuatro en cuatro y el nmero 15 es almacenando como lugares de 4 bytes, 1988, 1989, 1990 y 1991.
41 La instruccin popl %eax copia el valor del tope de la pila(4 bytes) a eax e incrementa esp en 4. Qu sucede si no quieres copiar el valor del tope de la pila a un registro?. Puedes ejecutar la instruccin addl $4, %esp el cual simplemente incrementa el puntero de la pila. #Listing 3 .globl main main: movl $10, %eax call foo ret foo: addl $5, %eax ret En Listing 3, la instruccin call foo pone la direccin de la instruccin despus de call en la llamada al programa sobre la pila y va hacia foo. La subrutina termina con ret, el cual transfiere el control a la instruccin cuya direccin se toma desde el tope de la pila. Obviamente el tope de la pila debe contener una direccin vlida. 2.16 Operaciones bsicas sobre archivos de disco Entrada y salida Funciones que realiza Vamos a sealar las funciones que debe realizar un computador para ejecutar trabajos de entrada/salida: Direccionamiento o seleccin del dispositivo que debe llevar a cabo la operacin de E/S.
42 Transferencia de los datos entre el procesador y el dispositivo (en uno u otro sentido). Sincronizacin y coordinacin de las operaciones. Esta ltima funcin es necesaria debido a la deferencia de velocidades entre los dispositivos y la CPU y a la independencia que debe existir entre los perifricos y la CPU (por ejemplo, suelen tener relojes diferentes). Se define una transferencia elemental de informacin como la transmisin de una sola unidad de informacin (normalmente un byte) entre el procesador y el perifrico o viceversa. Para efectuar una transferencia elemental de informacin son precisas las siguientes funciones: Establecimiento de una comunicacin fsica entre el procesador y el perifrico para la transmisin de la unidad de informacin. Control de los perifricos, en que se incluyen operaciones como prueba y modificacin del estado del perifrico. Para realizar estas funciones la CPU gestionar las lneas de control necesarias. Definiremos una operacin de E/S como el conjunto de acciones necesarias para la transferencia de un conjunto de datos (es decir, una transferencia completa de datos). Para la realizacin de una operacin de E/S se deben efectuar las siguientes funciones: Recuento de las unidades de informacin transferidas (normalmente bytes) para reconocer el fin de operacin. - Sincronizacin de velocidad entre la CPU y el perifrico. Deteccin de errores (e incluso correccin) mediante la utilizacin de los cdigos necesarios (bits de paridad, cdigos de redundancia cclica, etc.) Almacenamiento temporal de la informacin. Es ms eficiente utilizar un buffer temporal especfico para las operaciones de E/S que utilizan el rea de datos del programa. Conversin de cdigos, conversin serie/paralelo, etc. Dispositivos externos
43 Una de las funciones bsicas del ordenador es comunicarse con los dispositivos exteriores, es decir, el ordenador debe ser capaz de enviar y recibir datos desde estos dispositivos. Sin esta funcin, el ordenador no sera operativo porque sus clculos no seran visibles desde el exterior. Existe una gran variedad de dispositivos que pueden comunicarse con un ordenador, desde los dispositivos clsicos (terminales, impresoras, discos, cintas, etc.) hasta convertidores A/D y D/A para aplicaciones de medida y control de procesos, De todos los posibles perifricos, algunos son de lectura, otros de escritura y otros de lectura y escritura (es importante resaltar que este hecho siempre se mira desde el punto de vista del proceso). Por otra parte, existen perifricos de almacenamiento tambin llamados memorias auxiliares o masivas. La mayora de los perifricos estn compuestos por una parte mecnica y otra parte electrnica. Estas partes suelen separarse claramente para dar una mayor modularidad. A la componente electrnica del perifrico se le suele denominar controlador del dispositivo o, tambin, adaptador del dispositivo. Si el dispositivo no tiene parte mecnica (como, por ejemplo, la pantalla de un terminal), el controlador estar formado por la parte digital del circuito. Frecuentemente los controladores de los dispositivos estn alojados en una placa de circuito impreso diferenciada del resto del perifrico. En este caso es bastante habitual que un mismo controlador pueda dar servicio a dispositivos de caractersticas similares. El principal problema planteado por los perifricos es su gran variedad que tambin afecta a las velocidades de transmisin. Por tanto, el mayor inconveniente que encontramos en los perifricos es la diferencia entre sus velocidades de transmisin y la diferencia entre stas y la velocidad de operacin del ordenador.
44 Unidad 3 Modularizacin 3.1 Procedimientos Un procedimiento es un conjunto de instrucciones que tienen la finalidad de ejecutar una tarea especfica dentro de un programa. Los procedimientos son muy similares a las macros. Un procedimiento es un conjunto de instrucciones a los que podemos dirigir el flujo de nuestro programa, y una vez terminada la ejecucin de dichas instrucciones se devuelve el control a la siguiente lnea a procesar del cdigo que mando llamar al procedimiento. Un procedimiento se declara una sola vez en el cdigo fuente y cuando el programa se ensambla y ejecuta, el procedimiento se coloca en memoria para que pueda ser utilizado por el programa. Los procedimientos nos ayudan a crear programas legibles y fciles de modificar. Sintaxis de un procedimiento Existen dos tipos de procedimientos, los intrasegmentos, que se encuentran en el mismo segmento de instrucciones y los intersegmentos que pueden ser almacenados en diferentes segmentos de memoria. Las partes que componen a un procedimiento son: Declaracin del procedimiento Cdigo del procedimiento Directiva de regreso Terminacin del procedimiento Las principales ventajas en el uso de procedimientos son: permiten una codificacin ms limpia y compacta, es decir el cdigo fuente es ms pequeo; tambin permiten el ahorro de memoria, esto es porque un mismo procedimiento puede ser llamado varias veces en el mismo programa y slo requiere memoria una vez. Los procedimientos tienen la desventaja de que reducen la velocidad de ejecucin de los programas, esto se debe a la forma en que los procedimientos se ejecutan. A continuacin se presentan los pasos necesarios para ejecutar un procedimiento: 1. Se encuentra la llamada Call.
45 2. El microprocesador almacena en la Pila el contenido del IP. 3. Se coloca en el IP el valor del desplazamiento correspondiente al Procedimiento. 4. El microprocesador ejecuta las instrucciones del procedimiento. 5. El procedimiento termina cuando se encuentra la instruccin Ret. 6. Se saca de la pila el valor original del IP y se contina el flujo del programa. 3.2 Macros Una macro es un grupo de instrucciones repetitivas en un programa que se codifican solo una vez y pueden utilizarse cuantas veces sea necesario. La principal diferencia entre una macro y un procedimiento es que en la macro se hace posible el paso de parmetros y en el procedimiento no (esto es aplicable solo para el TASM, hay otros lenguajes de programacin que si lo permiten). Al momento de ejecutarse la macro cada parmetro es sustituido por el nombre o valor especificado al momento de llamarla. Podemos decir entonces que un procedimiento es una extensin de un determinado programa, mientras que la macro es un mdulo con funciones especficas que puede ser utilizado por diferentes programas. Otra diferencia entre una macro y un procedimiento es la forma de llamar a cada uno, para llamar a un procedimiento se requiere el uso de una directiva, en cambio la llamada a las macros se realiza como si se tratara de una instruccin del ensamblador.
46 Unidad 4 Programacin de dispositivos 4.1 El buffer de video en modo texto Buffer: Es la ubicacin de la memoria de un dispositivo digital o una computadora que est reservada para el almacenamiento temporal de informacin. Mientras los datos estn en el buffer, aguardan para ser procesados. Un ejemplo de buffer tiene lugar cuando se intenta ejecutar aplicaciones de audio o video directamente desde Internet, sin descargarlas a la computadora. Esta prctica, conocida como streaming, requiere de la utilizacin de un buffer para reducir el riesgo de que se corte la reproduccin ante problemas en el ancho de banda. Ejemplo: Abarcando los aspectos ms importantes del modo de video: ENDP prepararPantalla proc near mov ah, 06h;funcion de limpiar pantalla mov bh, 80h;Atributos de color de fondo mov al, 00h;cantidad de Filas a Borrar Enrollar mov cx, 00h;columna inicial en Ch, Columna Inicial en Cl mov dx, 30a0h;columna Final en Dh,Columna Final en Dl int 10h ret prepararPantalla endp Para llamarlo debes hacerlo as: call prepararPantalla
47 En los atributos de color de fondo puedes ver un 80h, el primer nmero es el color del fondo ( el 8) y el segundo es el color del texto ( el 0). 4.2 Acceso A Discos En Lenguaje Ensamblador Para leer o escribir en un disco, no se realiza byte a byte, sino ms bien en bloques de bytes, debido a que el acceso a disco implica movimientos mecnicos adems de que el acceso se da por sectores; en este proceso no intervienen el CPU, puesto que solo enva los comandos a la interface que maneja la unidad de disco y sta es la que se encarga de leer o escribir informacin de un rea especial de memoria, llamada DMA; este proceso es conocido como acceso directo a memoria. Ejemplo: El sistema de almacenamiento en disco constituye el soporte externo de la informacin. Los datos se registran sobre la superficie del disco en una serie de circunferencias concntricas llamadas pistas (track). Varias pistas, una por cada cara del disco (generalmente 2), componen un Clster. Cada pista est dividida en porciones iguales llamadas sectores (unidad bsica de almacenamiento en disco). El tamao de un sector se mide en bytes, y depende de las caractersticas del disco. En esta seccin se presentan 3 rutinas que permiten lectura y escritura absoluta de sectores, as como la determinacin del espacio libre disponible en un disco. Rutina _AbsoluteRead: Transfiere el contenido de uno ms sectores del disco al buffer especificado, accesando directamente a los sectores lgicos. En caso de error, se enciende el bit de acarreo y AX contiene el cdigo del error. Invocacin: push <unidad de disco> push <nmero de sectores a leer> push <prime
48 r sector a leer> push SEG <buffer> push OFFSET <buffer> call _AbsoluteRead PUBLIC _AbsoluteRead _AbsoluteRead PROC NEAR ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE= ArgLen push bp ; salvar BP mov bp,sp ; permitir acceso a los argumentos push bx ; salvar registros push cx push dx push ds mov al,Drive ; lectura absoluta de disco mov cx,NumSect mov dx,Start lds bx,Buffer
49 int 25h pop bx pop ds ; recuperar registros pop dx pop cx pop bx pop bp ret ArgLen _AbsoluteRead ENDP 4.3 Programacin Del Puerto Serial Puerto serial, puerto COM, puerto de comunicaciones y puerto RS-232 ("Recomendad Standard-232"), hacen referencia al mismo puerto. Se le llama serial, porque permite el envo de datos, uno detrs de otro. El puerto serie nos permite la facilidad de conectar nuestro ordenador personal a cualquier desarrollo realizado con microcontrolador. Puerto Serial para la comunicacin en puerto serial debemos tomar en cuenta que existe un dispositivo transmisor y un dispositivo receptor el cual se encuentra comunicado a travs de una sola lnea de comunicacin, por lo tanto los nmeros binarios que se transmiten se codifican a travs de un tren de pulsos. Dicha codificacin de los pulsos deber ser interpretado por el dispositivo receptor, para ello se deben establecer parmetros de hardware por los que se deber de transmitir la seal. De manera general en MATLAB se deben realizar 2 procedimientos para configurar y manipular el puerto serial. El primer paso es la configuracin y el segundo es abrir el puerto serial.
50
Caractersticas del puerto serial COM En el mbito de la electrnica comercial se le denomina como conector DB9 ("D- subminiature type B, 9 pin"), esto es D-subminiatura tipo B, con 9 pines. Se utilizaba principalmente para la conexin del ratn (Mouse), algunos tipos antiguos de escneres y actualmente para dispositivos como PDAs ("Personal Digital Assistant") asistentes personales digitales. Cada puerto, permite conectar solamente 1 dispositivo. Para conectar y desconectar los dispositivos, as como para que la computadora los reconozca de manera correcta, es necesario apagar y reiniciar la computadora. 4.4 Programacin Del Puerto Paralelo Conocido tambin con el nombre de CENTRONICS INTERFACE transmite los datos en paralelo mediante un bus de 8 lneas ms las lneas de control del protocolo y del estado de la impresora, esto nos permite disponer de varias lneas digitales que podremos controlar independientemente y de forma inmediata mediante las instrucciones de control de puertos (por ejemplo: outportb(), inportb() en C++). Esto hace que podamos, de forma muy sencilla, controlar directamente dispositivos electrnicos como pueden ser Leds, microreles, pulsadores, etc... El puerto paralelo tiene dos inconvenientes fundamentales; el primero es que cada vez menos PC los llevan incorporado y el segundo es que cuando trabajamos con un sistema operativo Windows XP, NT y 2000, necesitamos un driver que nos permita acceder a los puertos. Descripcin Fsica Del Conector.
51 El puerto paralelo del pc dispone de un conector subD de 25 pines hembra al que normalmente conectamos un cable Centronics de impresora que en un extremo tiene el conector SubD 25 pines macho y por el otro un conector Centronics de 36 pines. La asignacin de pines, tanto en el conector D-25 como en el Centronics es la siguiente:
4.5 Programacin Hbrida La programacin hbrida proporciona un mecanismo por medio del cual podemos aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel, todo esto con el fin escribir programas ms rpidos y eficientes. En esta seccin se mostrar la forma para crear programas hbridos utilizando el lenguaje ensamblador y Turbo Pascal. Turbo Pascal permite escribir procedimientos y funciones en cdigo ensamblador e incluirlas como parte de los programas en lenguaje Pascal; para esto, Turbo Pascal cuenta con dos palabras reservadas: Assembler y Asm. Assembler permite indicarle a Turbo Pascal que la rutina o procedimiento que se est escribiendo est totalmente escrita en cdigo ensamblador. Procedimiento hbrido:
52 Procedure Limpia_Pantalla; Assembler; AsmMov AX,0600h Mov BH,18h Mov CX,0000h Mov DX,184Fh Int 10h End; El procedimiento del listado 23 utiliza la funcin 06h de la Int 10h del BIOS para limpiar la pantalla, este procedimiento es anlogo al procedimiento ClrScr de la unidad CRT de Turbo Pascal. 4.6 Programacin De Puerto USB (Universal Serial Bus) Lnea serial universal de transporte de datos. Es un conector rectangular de 4 terminales que permite la transmisin de datos entre una gran gama de dispositivos externos (perifricos) con la computadora; por ello es considerado puerto; mientras que la definicin de la Real Academia Espaola de la lengua es "toma de conexin universal de uso frecuente en las computadoras". Caractersticas del puerto USB La versin USB 1.0 Aparece en el mercado, junto con el lanzamiento del microprocesador Intel Pentium II en 1997. Cada puerto, permite conectar hasta 127 dispositivos externos, pero solo se recomiendan como mximo 8, porque se satura la lnea del puerto y se ralentiza el sistema al tener que administrarse todos simultneamente. Cuenta con tecnologa "Plug&Play" la cual permite conectar, desconectar y reconocer dispositivos sin necesidad de reiniciar apagar la computadora.
53 Las versiones USB 1.X y USB 2.0 transmiten en un medio unidireccional los datos, esto es solamente se enva o recibe datos en un sentido a la vez, mientras que la versin USB 3 cuenta con un medio Duplex que permite enviar y recibir datos de manera simultnea. A pesar de que el puerto USB 3, est actualmente integrado ya en algunas placas de nueva generacin, an no hay dispositivos comerciales/populares para esta tecnologa.
54 Programas Programa que calcula el area de un triangulo. ; include \masm32\include\masm32rt.inc ; comment * ----------------------------------------------------- Alumno: Carlos Hector Cruz Lopez Fecha: 25/03/2014 Descripcin: Programa que calcula el area de un triangulo. ----------------------------------------------------- * .data? value dd ? base dd ? altura dd ? .data item dd 0 multi dd 0 rdiv dd 0 resultadodiv dd 0 .code start: ; call main inkey exit
55 ; main proc cls mov EAX, sval(input("Introduzca la base del triangulo :")) mov base, EAX mov EAX, sval(input("introduzca la altura del triangulo :")) mov altura, EAX
mov EAX, base mov EBX, altura mul EBX mov multi, EAX mov eax,multi mov ebx,2 xor edx,edx div ebx mov rdiv,edx mov resultadodiv,eax ; Promedio
print chr$(" ") print chr$(" ") print chr$(" El area del triangulo es ====> ") print str$(resultadodiv) print chr$(" ") ret main endp
56 ; end start ----------------------------------------------------------------------------------------------------------------------- Programa 2: Programa que pide 5 nmeros y los suma, resta, multiplica y promedia. ; include \masm32\include\masm32rt.inc ;
comment * ----------------------------------------------------- Alumno: Carlos Hector Cruz Lopez Fecha: 25/03/2014 Descripcion: Programa que pide 5 numeros y los suma, resta, multiplica y promedia. ----------------------------------------------------- * .data? value dd ?
cls mov EAX, sval(input("Introduzca el primer numero :")) mov num1, EAX
58 mov EAX, sval(input("introduzca el segundo numero :")) mov num2, EAX mov EAX, sval(input("introduzca el tercer numero :")) mov num3, EAX mov EAX, sval(input("introduzca el cuarto numero :")) mov num4, EAX mov EAX, sval(input("introduzca el quinto numero :")) mov num5, EAX
mov eax, num1 mov ebx, num2 add eax, ebx mov rsuma1, eax ; suma de primer y segunda calif
mov eax, rsuma1 mov ecx, num3 add eax, ecx mov rsuma2, eax ; suma de primer , segunda y tercer calif
mov eax, rsuma2 mov ebx, num4 add eax, ebx mov rsuma3,eax ; suma de primer, segunda, tercer y cuarta
mov eax, rsuma3 mov ebx, num5
59 add eax, ebx mov rsuma4, eax ; suma de todos los numeros
print chr$(" La suma de los numeros es ====> ") print str$(rsuma4) print chr$(" ")
print chr$(" ") print chr$(" El promedio es ====> ") print str$(resultadodiv)
;--------------------------------------- RESTA ------------------------ mov eax, num1 mov ebx, num2 sub eax, ebx mov resta1, eax ; resta de primer y segunda calif
mov eax, resta1
60 mov ecx, num3 sub eax, ecx mov resta2, eax ; resta de primer , segunda y tercer calif
mov eax, resta2 mov ebx, num4 sub eax, ebx mov resta3,eax ; resta de primer, segunda, tercer y cuarta
mov eax, resta3 mov ebx, num5 sub eax, ebx mov resta4, eax ; resta de todos los numeros
print chr$(" ") print chr$(" La resta de los numeros es ====> ") print str$(resta4) print chr$(" ") ;-------------------------------------------------------------------------- mov EAX, num1 mov EBX, num2 mul BL
mov EBX, num3 mul BX
61 shl EDX, 16 mov DX, AX
mov ECX, num4 mul CX
mov EDX, num5 mul DX mov multi1, EAX
print chr$(" ") print chr$(7,"La multiplicacion es ====> ") print str$(multi1) print chr$(" " ret main endp ; end start Programa 3: Suma, resta, multiplica y divide dos numeros introducidos ademas de mostrar un menu de que tipo de operacin se quiere realizar con los numeros introducidos. ;
include \masm32\include\masm32rt.inc ;
comment * ----------------------------------------------------- Alumno: Carlos Hector Cruz Lopez
62 Fecha: 25/03/2014 Descripcin: Suma, resta, multiplica y divide dos numeros introducidos ademas de mostrar un menu de que tipo de operacin se quiere realizar con los numeros introducidos. ----------------------------------------------------- *
Programa 4: programa que lee un numero y forma una piramide numerica. ;
include \masm32\include\masm32rt.inc ;
67
comment * ----------------------------------------------------- Alumno: Carlos Hector Cruz Lopez Fecha: 25/03/2014 Descripcion: programa que lee un nmero y forma una piramide numerica. ----------------------------------------------------- *
comment * ----------------------------------------------------- Build this console app with "MAKEIT.BAT" on the PROJECT menu. ----------------------------------------------------- *
.data? value dd ? numero dd 0 incrementar dd 0 incrementar2 dd 0
end start Programa 5: Lee nombre y calificaciones y determina promedio ;
include \masm32\include\masm32rt.inc ;
comment * ----------------------------------------------------- Build this console app with "MAKEIT.BAT" on the PROJECT menu. ----------------------------------------------------- *
.data? value dd ? nombre dd 0 total dd 0 residuo dd 4 promedio dd 0
.data item dd 0
.code
74
start:
;
call main inkey exit
;
main proc
cls mov EAX,sval(input("Ingrese su nombre: ")) mov nombre,EAX
mov EAX,sval(input("Ingrese la calificacion en matematicas: ")) add total, eax
mov EAX,sval(input("Ingrese la calificacion en geografia: ")) add total, eax
75
mov EAX,sval(input("Ingrese la calificacion en ingles: ")) add total, eax
mov EAX,sval(input("Ingrese la calificacion en programacion: ")) add total, eax
mov eax,total mov ebx,4 xor edx,edx div ebx mov residuo,edx
end start Programa 6: Sumatoria de numeros pares. ;
include \masm32\include\masm32rt.inc ;
comment * ----------------------------------------------------- Build this console app with "MAKEIT.BAT" on the PROJECT menu. ----------------------------------------------------- *
.data? value dd ? incrementar dd 0 numero dd 0 sumatoria dd 0
.data item dd 0
.code
78 start:
;
call main inkey exit
;
main proc
cls
mov eax, sval(input("Ingrese el numero par: ")) dec eax mov numero, eax
mov ax, 0
; -------------------------------------------------------------- ; 'variable' can be either a a 32 bit memory operand or register ; You can use one (1) or more 'case' statements. ; The 'default' statement if required must be the last statement
79 ; before the 'endsw' statement. It can be used only once. ; -------------------------------------------------------------- switch variable case number fn MessageBox,hWnd,"test 1","switch block",MB_OK
83 Programa 8: Programa que compara 5 numeros e indica el mayor ;
include \masm32\include\masm32rt.inc ;
comment * ----------------------------------------------------- Build this console app with "MAKEIT.BAT" on the PROJECT menu. ----------------------------------------------------- *
; Codigo para ingresar los datos por medio del teclado
mov EAX,sval(input("Ingrese el numero A:")) mov num1,EAX
mov EAX,sval(input("Ingrese el numero B:")) mov num2,EAX
mov EAX,sval(input("Ingrese el numero C:"))
85 mov num3,EAX
mov EAX,sval(input("Ingrese el numero D:")) mov num4,EAX
mov eax,num1
cmp eax,num2 cmp eax,num3 cmp eax,num4 jnb mayor1
mov eax,num2
cmp eax,num1 cmp eax,num3 cmp eax,num4 jnb mayor2
mov eax,num3
cmp eax,num1
86 cmp eax,num2 cmp eax,num4 jnb mayor3
mov eax,num4
cmp eax,num1 cmp eax,num2 cmp eax,num3 jnb mayor4
mayor1: print chr$(7,"El A es el mayor") print chr$(10) ret
mayor2: print chr$(7,"El B es el mayor") print chr$(10) ret
mayor3:
87 print chr$(7,"El C es el mayor") print chr$(10) ret
mayor4: print chr$(7,"El D es el mayor") print chr$(10) ret
main endp
;
end start programa 9: Programa que determina el factorial de un numero include \masm32\include\masm32rt.inc ;
comment * ----------------------------------------------------- Build this console app with "MAKEIT.BAT" on the PROJECT menu. ----------------------------------------------------- *
88 .data? value dd ? numero dd ?
.data factorial dd 1 factorial2 dd 1 incrementar dd 0 uno dd 1 original dd 0
.code
start:
;
call main inkey exit
;
main proc
89
mov eax, sval(input("Entrada: ")) dec eax mov numero, eax mov original, eax inc original xor eax, eax ;xor consigo mismo siempre resulta un cero(0)
90 jle ciclo ;Salta si es menor o igual o salta si no es mas grande print chr$(7,"El factorial del numero ") print str$(original) print chr$(7," Es: ") mov ecx, factorial2 print str$(ecx) print chr$(7,10) print chr$(7,10) inkey exit