You are on page 1of 29

INSTITUTO TECNOLGICO DE ACAPULCO Ingeniera en Sistemas Computacionales Lenguaje Ensamblador

Equipo #3
Integrantes:
MONDRAGON GUILLEN SIMON MARTINEZ VALENCIA RICARDO FABRIZIO RUIZ JIMENEZ KENYI DARIO GARCIA FLORES GUSTAVO CALLEJA MORENO JULIO CESAR PEREZ NAVA MANUEL 09320756 09320796 09321174 09320764 09320769 09320787

Aula: 710 Hora: 14:00 16:00

Acapulco de Jurez, Guerrero 2012

Tabla de contenido

1.3 Interrupciones ........................................................................................... 1 1.3.1 Interrupciones de hardware ................................................................ 4 1.3.2 Interrupciones de software ................................................................. 8 1.4 Estructura de un programa en ensamblador ........................................... 12 1.4.1 Data segment ................................................................................... 13 1.4.2 Stack segment .................................................................................. 14 1.4.3 Code segment .................................................................................. 15 1.4.4 Instrucciones del programa .............................................................. 16 1.4.5 Directivas.......................................................................................... 23 Referencias ................................................................................................... 27

1.3 Interrupciones
Concepto

Las interrupciones son un mtodo del que disponen los dispositivos e incluso los procesos para hacer notar a la CPU la aparicin de alguna circunstancia que requiera su intervencin.

Cuando no existan interrupciones, era el procesador el que tena que estar continuamente comprobando el estado del dispositivo cuando lo necesitaba.

Por ello, las computadoras tienen en un sitio. Conocido de memoria las distintas rutinas de tratamiento para las diferentes interrupciones. El procesador reconoce la interrupcin de la que se trata y busca en memoria la rutina correspondiente.

Una vez terminado el tratamiento de la interrupcin, es muy importante que el procesador siga con lo que estaba haciendo.

Funciones del mecanismo de Interrupciones

Cada dispositivo que desea comunicarse con el procesador por medio de interrupciones debe tener asignada una lnea nica capaz de avisar al CPU que le requiere para una operacin. Esta lnea es la llamada IRQ ("Interrupt ReQuest", peticin de interrupcin).

2 Pasos para el procesamiento de una IRQ

1. Terminar la ejecucin de la instruccin de mquina en curso. 2. Salva el valor de contador de programa, IP, en la pila, de manera que en la CPU, al terminar el proceso, pueda seguir ejecutando el programa a partir de la ltima instruccin. 3. La CPU salta a la direccin donde est almacenada la rutina de servicio de interrupcin (Interrupt Service Routine (ISR)) y ejecuta esa rutina que tiene como objetivo atender al dispositivo que gener la interrupcin. 4. Una vez que la rutina de la interrupcin termina, el procesador restaura el estado que haba guardado en la pila en el paso 2 y retorna al programa que se estaba usando anteriormente.

Lneas de peticin de Interrupcin

3 Tipos de Interrupciones

Interrupciones por software: Son aquellas programadas por el usuario, es decir, el usuario decide cuando y donde ejecutarlas, generalmente son usadas para realizar entrada y salida. Interrupciones por hardware: Son aquellas que son provocadas por dispositivos externos al procesador su caracterstica principal es que no son programadas, esto es, pueden ocurrir en cualquier momento en el programa.

1.3.1 Interrupciones de hardware


Interrupciones por hardware

Son aquellas que son provocadas por dispositivos externos al procesador su caracterstica principal es que no son programadas, esto es, pueden ocurrir en cualquier momento, en el programa. Existen dos clases de interrupciones de este tipo:

Interrupciones por hardware enmascarables: Aquellas en las que el usuario decide si quiere o no ser interrumpido. Interrupciones por hardware no enmascarables (NMI): Aquellas que siempre interrumpen al programa.

En las PC que trabajan con el procesador, se tienen 2 tipos de interrupciones, como ya se mencion; las NMI llegan a travs de una lnea directamente al procesador y cuando sta se activa, el CPU provoca una interrupcin por software del tipo 2.
*Tipo: 2 Direccin: 0008 Uso: NMI Sistema: BIOS

Adems, se tienen 8 lneas que reciben las interrupciones enmascarables, tambin llamadas IRQ (Interrupt ReQuest), asociada a stas lneas se tiene una bandera IF (Interrupt Flag) para determinar si se acepta o no las interrupciones. Si IF = 1 entonces IRQs estn habilitadas Si IF = 0 entonces IRQs deshabilitadas.

Esta bandera se manipula con las instrucciones:

STI IF = 1 CLI IF = 0

Las 8 lneas de IRQ llegan directamente al CPU, antes son detenidas por un circuito llamado el control de interrupciones. La funcin de este circuito es determinar cual de las 8 lneas puede entrar a interrumpir al CPU en caso de provocarse dos o ms interrupciones a la vez. Esta determinacin se lleva a cabo en base en dos cosas:

Prioridad

Las IRQ estn numeradas: IRQ 0 IRQ 1 ... IRQ7 Las de ms alta prioridad es la IRQ 0 y la de ms baja prioridad es la IRQ 7.

Habilitacin en el registro de mscaras El controlador de interrupciones contiene un registro de mscaras de 8 bits en el que cada bit representa una mscara para una lnea IRQ.

Si bit i = 0 entonces IRQ i esta habilitada. Si bit i = 1 entonces IRQ i esta deshabilitada.

Por lo tanto las IRQ pueden ser habilitadas por grupo mediante la IF o individualmente por medio del registro de mscaras.

6 Una vez que el controlador de interrupciones ya decidi cual IRQ interrumpe, la enva al CPU y si la bandera IF = 1, la interrupcin se acepta y se le asocia una interrupcin por software: IRQ 0 INT 8 IRQ 1INT 9 IRQ 2INT A IRQ 3INT B IRQ 4INT C IRQ 5INT D IRQ 6INT E IRQ 7INT F

El registro de mscaras habilita o deshabilita el CPU. El IRQ 0 esta conectado a un circuito que es el TIMER. El IRQ 1 est conectado con una lnea al teclado. El IRQ 6 est conectado a las unidades de disco.

Timer (INT 8): Las PC tiene internamente un circuito que es el Timer, y el cual tiene la funcin de interrumpir el CPU, un nmero de veces determinado por segundo. Su rutina de servicio tiene la funcin de actualizar contadores en variables internas de la computadora para que puedan usarse en la actualizacin de la fecha y la hora; adems de apagar el motor que mueve el disco si este no es usado, finalmente provoca una interrupcin por software, la INT 1Ch, quien inicialmente puede usarse en rutinas de usuario que requieren sincronizacin con el tiempo.

El contador empieza con un nmero y cada pulso que le da el timer, ste se decrementa y cuando llega a cero entonces el timer, interrumpe y ejecuta la INT 8, slo en caso de que sea aceptado por el CPU y despus vuelve el contador con el valor inicial. Adems, apaga el motor y el foco de las unidades del disco.

Las rutinas de servicio de las interrupciones por hardware deben ser transparentes al usuario, esto es, deben preservar todos sus registros.

7 Teclado: El teclado tiene incluido un procesador, cuya funcin es estar censando continuamente las teclas y si alguna de ellas se presiona entonces provoca una interrupcin IRQ 1 y adems le enva al procesador central a travs del puerto 60h, el cdigo de barrido asociado a esa tecla. Entonces se ejecuta una INT 9, cuya funcin es leer el cdigo de barrido del puerto y convertirlo a cdigo ASCII, si es el caso, o bien interpretar el cdigo de barrido para cambiar el estado del teclado. Finalmente, ambos cdigos se colocan en un buffer para que puedan leerse por medio de la INT 16h.

1.3.2 Interrupciones de software

Descripcin

Las interrupciones de software son provocadas por los programas usando una funcin especial del lenguaje. Tienen como objetivo el que la CPU ejecute algn tipo de funcin. Una vez atendida sta, seguir con su labor anterior.

Caractersticas Las interrupciones por software se comportan de igual manera que las de hardware pero en lugar de ser ejecutadas como consecuencia de una seal fsica, lo hacen con una instruccin. Pueden ser activadas directamente por el ensamblador invocando al nmero de interrupcin deseada con la instruccin INT. El uso de las interrupciones nos ayuda en la creacin de programas. Pueden usarse en lenguaje ensamblador y en lenguajes hbridos (como C, en donde la librera dos.h nos permite trabajar directamente con los registros del CPU).

9 Clasificacin Las interrupciones de software podemos clasificarlas en dos categoras:

1. Interrupciones del BIOS (Basic Input Output System). Abarca las interrupciones desde la 10h a la 1Fh.

2. Interrupciones del DOS (Disk Operating System). Abarca las interrupciones desde la 20h hasta la 3Fh.

10 La diferencia entre ambas es que las interrupciones del sistema operativo son ms fciles de usar pero tambin son ms lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho ms rpidas pero tienen la desventaja que, como son parte del hardware son muy especficas y pueden variar dependiendo incluso de la marca del fabricante del circuito.

La eleccin del tipo de interrupcin a utilizar depender nicamente de las caractersticas que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS).

Uso

Las interrupciones tienen un nmero de

servicio o funciones asociadas.

Cuando un programa lanza una interrupcin, la CPU ejecuta su funcin de tratamiento asociada. Por lo que debemos saber interrupcin para conseguir el efecto deseado. que es lo que hace cada

En lenguaje ensamblador, para usar cada una de stas funciones se debe especificar el nmero de funcin en hexadecimal en un registro (generalmente el registro AH) y posteriormente lanzar la interrupcin.

11 Ejemplo:

Funcin 4CH de la interrupcin 21H. Funcin que sirve para terminar un programa y devolver el control al sistema operativo.

MOV AH, 4CH INT 21H

12

1.4 Estructura de un programa en ensamblador


Un programa escrito en lenguaje ensamblador se ensambla por medio de un programa ensamblador: Los programas ms comunes para el 8088, 8086 con el Turbo ensamblador (TASM) de la compaa Borland y el de la compaa Microsoft (MASM). Los requerimientos mnimos para un programa escrito en lenguaje ensamblador son: .Model .STACK SMALL ; indica el modelo de memoria (SMALL) 200 ; indica el tamao del STACK (bytes)

.DATA ___ ___ ___ .CODE ___ ___ ___ MOV AH, 4CH INT 21H

; indica que la siguiente informacin ; deber quedar en el segmento de datos

; indica que la siguiente informacin ; es el programa ejecutable

; necesario para terminar el programa ; y regresar al prompt C>

END

; Indica el fin del programa

13

1.4.1 Data segment


DS = Registro de segmento de datos. Contiene la direccin del segmento de datos, es decir, el rea de memoria donde se encuentran los datos del programa.

Es una de las selecciones de un programa en un objeto de archivo o en la memoria, que contiene las variables globales estticas que se inicializaron por el programador.

Tiene un tamao fijo, ya que todo los datos estn seccin se establecen por el programador antes de que el programador se carga. Sin embargo, no es de solo lectura, ya que los valores de las variables pueden ser modificados en el tiempo de ejecucin. Esto est en contraste con la Rodata (constante, los datos de solo lectura) en la seccin, as como el cdigo de segmento (tambin conocido como segmento de texto).

En la arquitectura de PC hay cuatro bsicas de lectura y escritura regiones de memoria en programa:

Dato: contiene las variables globales y estticas utilizadas por el programa que se inicializan. Estos segmentos pueden ser clasificada en el rea inicializada de solo lectura y se inicializa la zona de lectura y escritura.

BSS segmento: conocido sin inicializar los datos comienzan al final del segmento de datos y contiene todas las variables sin inicializar variables estticas y globales que se inicializan a cero formas predeterminadas.

Montn de espacio: comienza a finales de la Bss segmento y crece a grandes direcciones de all. El rea de montn es dirigido por malloc, realloc y libre, que puede utilizar el sistema brk y sbrk llamadas, para ajustar el tamao (aunque tenga en cuenta que el uso de brk /sbrk y una sola zona escombrera no esta obligado a cumplir el contrato de malloc/

14 realloc/gratuita, sino que tambin puede ser implementado usando mmap para reservar regiones potencialmente no contiguos de memoria virtual en el procesador espacio de direcciones virtuales). El rea montn es compartida por todas compartidas y modulas de carga dinmica de un procesador. Apilar: es una LIFO estructura, normalmente se encuentra en la parte alta de la memoria. Por lo general, crece hacia abajo con todos los registros, el valor inmediato o marco de pila de se aadi a la misma. Un marco de pila se compone como mnimo de una direccin de retorno.

1.4.2 Stack segment


SS, Stack Segment: El segmento de Stack; junto con SP apuntan a la ltima posicin que fue utilizada para "depositar" datos en el Stack.

SS = Registro de segmento de pila. Contiene la direccin del segmento de pila. SS: Stack Segment (Segmento de Pila)

Este registro selecciona la regin de 64 Kb. que va a contener la pila del sistema. Como su nombre lo indica, tendremos una estructura de datos, con poltica LIFO (Last In, First Out = El ltimo elemento en entrar, es el primero en salir), con instrucciones bsicas PUSH y POP para su manejo. Esta estructura es usada por los programas de aplicacin, pero tambin por el procesador para el control de instrucciones que lo requieren, tales como las llamadas a subrutinas yla atencin de interrupciones.

15

1.4.3 Code segment

CS: Code Segment (Segmento de Cdigo)

CS = Registro de segmento de cdigo. Contiene la direccin del segmento de cdigo, lo que son las instrucciones del programa.

Este registro selecciona el rea de 64 Kb. que generalmente dedicamos al cdigo. En este caso, el CPU (especficamente, el BIU), siempre toma las instrucciones de esta regin de memoria; por lo que cuando requerimos ms de 64 Kb. de cdigo (instrucciones), este registro tendr que moverse, tomando distintos valores segn recorremos distintas regiones de memoria.

16

1.4.4 Instrucciones del programa

La siguiente es una lista de las instrucciones para la familia de procesadores 8086, clasificadas por categora. Aunque la lista parece enorme, muchas de las instrucciones rara vez se necesitan.

Aritmticas ADC: Suma con acarreos. ADD: Suma nmeros binarios. DEC: Decrementa en 1. DIV: Divisin sin signo. IDIV: Divide con signo (enteros). IMUL: Multiplica con signo (enteros). INC: Incrementa en 1. MUL: Multiplica sin signo. NEG: Negacin. SBB: Resta con el bit prestado. SUB: Resta valores binarios.

Conversin ASCII-BCD AAA: Ajuste ASCII despus de sumar. AAD: Ajuste ASCII antes de dividir. AAM: Ajuste ASCII despus de multiplicar. AAS: Ajuste ASCII despus de restar. DAA: Ajuste decimal despus de sumar. DAS: Ajuste decimal despus de restar.

17 Corrimiento de bit RCL: Rota a la izquierda a travs del acarreo. RCR: Rota a la derecha a travs del acarreo. ROL: Rota a la izquierda. ROR: Rota a la derecha. SAL: Corrimiento algebraico a la izquierda: SAR: Corrimiento algebraico a la derecha. SHL: Corrimiento lgico a la izquierda. SHR: Corrimiento lgico a la derecha. SHLD/SHRD: Corrimiento en doble precisin (80386 y posteriores).

Comparacin BSF/BSR: Exploracin de bit (80386 y posteriores). BT/BTC/BTR/BTS: Prueba de bit (80386 y posteriores). CMP: Compara. CMPS: Compara cadena de caracteres. TEST: Prueba de bits.

Transferencia de datos LDS: Carga el registro del segmento de datos. LEA: Carga una direccin efectiva. LES: Carga el registro de segmento extra. LODS: Carga una cadena. LSS: Carga el registro del segmento en la pila. MOV: Mueve datos. MOVS: Mueve cadenas. MOVSX: Mueve con signo-extendido. MOVZX: Mueve con cero-extendido. STOS: Almacena una cadena. XCHG: Intercambia. XLAT: Traduce.

18 Operaciones con banderas CLC: Limpia la bandera de acarreo. CLD: Limpia la bandera de direccin. CLI: Limpia la bandera de interrupcin. CMC: Complementa la bandera de acarreo. LAHF: Carga AH de las banderas. POPF: Remueve banderas de la pila. PUSHF: Agrega banderas a la pila. SAHF: Almacena el contenido de AH en las banderas. STC: Establece la bandera de acarreo. STD: Establece la bandera de direccin. STI: Establece la bandera de interrupcin.

Entrada/Salida IN: Introduce un byte o una palabra. OUT: Saca un byte o una palabra. Operaciones lgicas AND: Conjuncin lgica (y). NOT: Negacin lgica. OR: Disyuncin lgica. XOR: Disyuncin exclusiva. Ciclos LOOP: Repetir el ciclo hasta que se complete. LOOPE/LOOPZ: Repetir el ciclo mientras sea igual/mientras sea cero. LOOPNE/LOOPNZ: Repetir el ciclo mientras no sea igual/mientras no sea cero. Control del procesador ESC: Escape. HLT: Introduce un estado de detencin. LOCK: Bloquea el bus. NOP: No operar. WAIT: Pone el procesador en estado de espera.

19

Operaciones con la pila POP: Remueve una palabra de la pila. POPA: Remueve todos los registros generales (80286 y posteriores). PUSH: Agrega a la pila. PUSHA: Agrega todos los registros generales (80286 y posteriores). Operaciones con cadenas CMPS: Compara cadenas. LODS: Carga cadena. REP: Repite una cadena. REPE/REPZ: Repite mientras sea igual/mientras sea cero. REPNE/REPNZ: Repite mientras no sea igual/mientras no sea cero. SCAS: Explora una cadena. STOS: Almacena una cadena. Transferencia (condicional) INTO: Interrumpe si hay desbordamiento. JA/JNBE: Bifurca (salta) si es mayor o salta si no es menor o igual. JAE/JNB: Salta si es mayor o igual o salta si no es menor. JB/JNAE: Salta si es menor o salta si no es mayor o igual. JBE/JNA: Salta si es menor o igual o salta si no es mayor. JC/JNC: Salta si hay acarreo o salta si no hay acarreo. JCXZ: Salta si CX es cero. JE/JZ: Salta si es igual o salta si es cero. JG/JNLE: Salta si es mayor o salta si no es menor o igual. JGE/JNL: Salta si es mayor o igual o salta si no es menor. JL/JNGE: Salta si es menor o salta si no es mayor o igual. JLE/JNG: Salta si es menor o igual o salta si no es mayor. JNE/JNZ: Salta si no es igual o salta si no es cero. JNP/JPO: Salta si no hay paridad o salta si la paridad es impar. JO/JNO: Salta si hay desbordamiento o salta si no hay desbordamiento. JP/JPE: Salta si hay paridad o salta si la paridad es par. JSJNS: Salta si el signo es negativo o salta si el signo es positivo.

20 Transferencia (incondicional) CALL: Llama a un procedimiento. INT: Interrupcin. IRET: Interrupcin de regreso. JMP: Salto incondicional. RET: Regreso. RETN/RETF: Regreso cercano o regreso lejano. Conversin de tipo CBW: Convierte byte a palabra. CDQ: Convierte palabra doble a palabra cudruple. CWD: Convierte palabra a palabra doble. CWSE: Convierte una palabra a una palabra doble extendida.

Operandos

Un operando es una fuente de datos para una instruccin. Algunas instrucciones, como CLC y RET, no necesitan un operando, mientras que otras pueden tener uno o dos operandos. Donde existan dos operandos, el segundo es el fuente, que contiene ya sea datos que sern entregados (inmediatos) o bien la direccin (de registro o en memoria) de los datos. El dato fuente no es cambiado por la operacin. El primer operando es el destino, que contiene datos en un registro o en memoria y que ser procesado.

operacin

operando1, operando2

Examinemos ahora cmo los operandos pueden afectar el direccionamiento de datos.

21 Operandos registro

Para este tipo, el registro proporciona el nombre de alguno de los registros de 8, 16 o 32 bits. Dependiendo de la instruccin, el registro puede codificarse en el primero o segundo operandos, o en ambos:

El procesamiento de datos entre registros es el tipo de operacin ms rpida, ya que no existe referencia a memoria.

Operandos inmediatos

En formato inmediato, el segundo operando contiene un valor constante o una expresin constante. El campo destino en el primer operando define la longitud de los datos y puede ser un registro o una localidad de memoria. Por ejemplo:

Operandos de memoria directa

EN este formato uno de los Operandos hace referencia a una localidad de memoria y el otro a un registro. Note que no existen instrucciones que permite a ambos operandos sean direcciones de memoria. Para el direccionamiento de datos en memoria, el registro DS es el registro por omisin.

22

Operandos de memoria indirecta

Direccionamiento indirecto es una tcnica sofisticada que hace uso de las capacidades de la computadora para el direccionamiento de segmento; desplazamiento. Los registros utilizados para ste propsito son: BX, DI, SI y BP.

Esto es lo mismo que:

23

1.4.5 Directivas

Algunas instrucciones del lenguaje assembler no se traducen directamente a instrucciones del lenguaje mquina. Estas instrucciones son directivas para el assembler; stas asignan al programa ciertas reas de memoria, definen smbolos, designan reas de RAM para almacenamiento de datos temporales, colocan tablas o datos constantes en memoria y permiten referencias a otros programas.

Las directivas se utilizan como comandos escritos en el cdigo fuente para realizar un control directo o ahorrar tiempo a la hora de ensamblar. El resultado de incorporar directivas se puede ver en el fichero *.LST, despus de ensamblar el programa.

Para usar stas directivas o pseudo-operandos, el programador las coloca en el campo del cdigo de operacin, y, si lo requiere la directiva, una direccin o dato en el campo de direccin.

Las directivas ms comunes son:

EQU (Equate) ORG (Origin) DEFB (Define Byte) DEFW (Define Word) END (fin del cdigo fuente)

24 EQU (Equate - Equivalente)

La directiva

EQU permite al programador igualar

nombres a datos o

direcciones. Esta pseudo-operacin se nota

EQU. Los nombres utilizados se

refieren generalmente a direcciones de dispositivos, datos numricos, direcciones de comienzo, direcciones fijas.

Posiciones de bits, etc. PORT_A START CARRY TIEMPO EQU 5

EQU 0 EQU 3 EQU 5

Tambin se puede definir una equivalencia con el nombre de otra equivalencia ya definida.

PORT_B PORT_C FIN FIN2

EQU EQU EQU EQU

PORT_A+1 PORT_A+2 START+100 START+200

El valor del operando debe estar ya definido anteriormente, sino el compilador entregar un error.

ORG (Origin - Origen)

La directiva origen (se nota ORG) permite al programador especificar la posicin de memoria donde los programas, subrutinas o datos residirn. Los

programas y los datos pueden estar alojados en diferentes reas de memoria dependiendo de la configuracin de memoria.

25 Rutinas de comienzo, subrutinas de interrupcin y otros programas deben comenzar en locaciones de memoria fijados por la estructura de microprocesador.

La directiva ORG hace al compilador colocar el cdigo que le sigue en una nueva direccin de memoria (la salida del compilador no solo coloca los cdigos de operacin sino tambin las direcciones de cada instruccin y datos del programa).

Usualmente se la utiliza para: reset, programas de servicios de interrupcin, almacenamiento en RAM, stack, programa principal, subrutinas. Por Ej: ORG 00h goto inicializa org 04h ; vector de interrupcion goto interr ORG 05h inicializa movlw 08h ; aqu comienza el programa : : DEFB (Define Byte), DEFW (Define Word)

Esta directiva le permite al programador ingresar datos fijos en la memoria de programa.

Estos datos pueden ser: Tablas de conversin Mensajes Nombres Umbrales Comandos Factores de conversin Identificacin de teclas Direcciones de subrutinas

26 Esta directiva trata a los datos como parte permanente del programa. El formato es muy simple: MENSAJE DELAY DATOS DEFB DEFB DEFW DEFW DEFW POTENCIA DEFB M,I,C,R,O,0 10 $A100 $A400 $0000 1, 4, 9, 16, 25, 36, 49, 64,81

27

Referencias

Abel. Peter (1996). Lenguaje ensamblador y programacin para IBM PC y compatibles (3 edicin). Pearson Educacin.

Beltran De Heredia, Jon (2005). Lenguaje ensamblador de los 80X86. Multimedia.

Anaya

L. Morgan, Christopher & Waite, Mitchell (1985). Introduccin al microprocesador 8086-8088 (16 bit). Byte Books.

You might also like