Vous êtes sur la page 1sur 60

UNIDAD I ARQUITECTURA DEL PROCESADOR

El procesador: Es el chip que ejecuta los programas. El procesador o CPU, lleva a cavo una gran variedad de clculos, comparaciones numricas y transferencia de datos como respuesta a las peticiones de los programas que estn siendo ejecutados en memoria. La CPU controla las operaciones bsicas del ordenador enviando y recibiendo seales de control, direcciones de memoria y datos de un lugar a otro del ordenador a travs de un grupo de sendas electrnicas llamadas BUS. Localizadas a lo largo de este bus, estn las puertas de entrada y salida (E/S en espaol o I/O en ingles), las cuales conectan a la memoria y a los chips de apoyo al bus. Los datos pasan a travs de estas puertas de E/S mientras viajan desde y hasta la cpu y otras partes del ordenador. El procesador 8086 es un procesador de 16 bits. Esto quiere decir entre otras cosas, que el procesador va a manipular en una sola operacin datos de hasta 16 bits. Es decir, cuando transfiera datos a la memoria o los traiga desde ella. Lo podr hacer de 16 bits en 16 bits. Aqu juega un papel decisivo el BUS de datos, ya que es por el por donde circulan los datos en las transferencias. El procesador cuanta con una serie de registros usados para realizar las operaciones de calculo, y como almacenamiento de datos. Un registro del procesador es algo as como una zona de memoria dentro del procesador donde se pueda almacenar informacin, de forma que el acceso a esta informacin es instantneo, ya que no hay que utilizar el bus de datos que conecta el procesador con la memoria para obtener dichos datos.

Estos registros se dividen en 5 grupos, segn sus funciones: 1.1 Registros de datos: AX, BX, CX Y DX. Se usan para calculo y almacenamiento de propsito general. Son utilizados por los programas para realizar dichos clculos, as como para transferir datos de una posicin de memoria o otra, ya que no se puede hacer de forma directa. Es decir, que no podamos transferir un dato de la posicin de memoria X a la posicin Y sin antes depositar ese dato temporalmente en un registro del procesador. Estos registros tienen una longitud de 16 bits, pero podemos descomponerlos cuando nos interese en un par de registros de 8 bits. Quedando de la forma siguiente: AX = AH + AL Siendo AX el registro de 16 bits, compuesto por la conjuncin (que no la suma) del registro AH de 8 bits (los 8 bits mas significativos o de mas a la izquierda) y el registro AL de 8 bits (los 8 bits menos significativos o de mas a la derecha). BX = BH + BL CX = CH + CL DX = DH + DL Para estos tres registros se aplica lo mismo que para el registro AX. Cada uno de estos registros tiene funciones especiales que es interesante conocer. Por ejemplo el registro AX es el llamado acumulador, hace que muchas operaciones tengan una forma mas corta, ya que lo especifican implcitamente. Es decir, que hay operaciones que actan sobre el registro AX en particular. BX se suele utilizar en muchas instrucciones como registro base, sobre todo en transferencias de datos entre memoria y procesador. CX es el registro contador, muchas instrucciones lo utilizan para hacer incrementos o decrementos automticos, para realizar bucles, etc. DX es el registro de datos, se suele utilizar para operaciones de 32 bits, para almacenar los 16 bits (o palabra) mas significativos. 1.2 Registros ndice: SI, DI, BP, y SP. Se utilizan para acceder a memoria cuando se establece el modo de direccionamiento mediante instrucciones con punteros. SI y DI ndice frente y destino respectivamente.

BP y SP indican el puntero base y el puntero de pila respectivamente. Mas adelante hablaremos de la pila (que es un tipo de datos estructurado). Estos 4 registros son de 16 bits, y no pueden ser utilizados como registros dobles de 8 bits. 1.3 Registros de segmento: CS, DS SS y ES. Estos registros apuntan al principio de un bloque de 64 ks de memoria o segmento, de ah lo de la S con la que finalizan todos los registros: CS registro de segmento de cdigo. Establece el rea donde se halla el programa de ejecucin. DS registro segmento de datos. Especifica la zona donde el programa lee y escribe los datos por defecto. SS registro segmentado de pila. Especifica el rea donde se encuentra la pila del sistema. ES registro segmento extra. Se utiliza como una extensin del segmento de datos. Es decir, indica otra rea de datos aparte del especificado por DS. 1.4 Puntero de instruccin: IP su longitud es de 16 bits como el resto de los registros, indica la direccin de la siguiente registros a ejecutar, y su valor es ajustado durante la ejecucin de la instruccin en curso. Esta direccin esta en el area de 64 ks de direcciones especificado por CS. CS e IP en conjuncin conforman la direccin fsica real de la siguiente instruccin a ejecutar. Mas adelante detallaremos este asunto. 1.5 Registro FLAGS. O Banderas de Estado. Su longitud es de 16 bits. Cada uno de estos bits contiene cierta informacin booleana (verdadero o falso). Segn el valor de cada uno de estos bits, sea 1 (verdadero) 0(falso), informar del estado de alguna situacin en particular. Dentro del registro de FLAGS hay 7 bits que no se utilizan. Los nombres de los utilizados son: Of, Df, If, Tf, Sf, Zf, Af, Pf Y Cf. Estos bits se clasifican en dos grupos: -Flags de estado (Cf, Af, Of, Zf, Pf y Sf): muestran el estado del procesador. -Flags de control (Df, If, Tf): determina como el procesador responder a determinadas situaciones. El programador manipulara estos bits para controlar el modo de ejecucin de algunas instrucciones.

A continuacin se muestra el significado de cada uno de los flags: Cf: Bit de Carry (acarreo), se activa (se pone a 1) si se produce acarreo en una operacin aritmtica. Pf: Bit de paridad, se activa si el resultado de una operacin tiene paridad par, es decir, si el resultado tiene un n par de unos. Af: Bit de carry auxiliar, se activa si una operacin aritmtica produce acarreo de peso 16. Zf: Bit de cero, se activa si una operacin produce cero como resultado. Suele ser el mas utilizado por los programadores. Se utiliza para comparaciones de datos y para otras muchas cosas como ciertos bucles, etc. Sf: Bit de signo, se activa si el bit mas significativo de un resultado es 1. por convencin cuando se opera con nmeros negativos, se utiliza el bit de mayor peso para indicar el signo: si el bit es cero, entonces se trata de n numero positivo, si es 1, se trata de un numero negativo. Tf: Bit trap o desvi. Si Tf = 1, el procesador ejecuta las instrucciones una a una bajo el control del usuario. Se pone a 1 el bit para realizar depuraciones del cdigo que se esta ejecutando. De esta forma se puede segur el flujo del programa. If: Bit de interrupcin, si vale 1, las interrupciones estn permitidas, si vale 0, no. Df: se usa en las instrucciones que manejan cadena de Bytes. Segn coloque el programador este bit, a 0 o a 1, las cadenas de bytes sern tratadas es sentido de direcciones crecientes o decrecientes. Of; Bit de overflow, indica desbordamiento en una operacin aritmtica. La memoria: los chip de memoria se dedican meramente a almacenar informacin hasta que se necesita. El numero y la capacidad de almacenamiento de estos que hay dentro del ordenador determina la cantidad de memoria que podemos utilizar para los programas y los datos. Normalmente la memoria siempre se ha dividido en dos tipos principales, como son la RAM y la ROM. Pues bien, en principio, nosotros vamos a trabajar con el rango de memoria 0 1048576, es decir, vamos a trabajar con el primer Mb(megabyte). Existen tcnicas para tratar la memoria que hay en direcciones superiores a estas, pero eso ya se vera en otra momento. Pues bien, en ese Megabyte inicial, tenemos tanto ROM como RAM. La memoria RAM que es la que usamos para almacenar tantos programas como datos empieza en las direcciones bajas y llega hasta el inicio de la ROM. La ROM, evidentemente esta situada en las posiciones altas de memoria, y es ah donde se almacenan las rutinas mas bsicas del ordenador, como las rutinas de acceso a discos, pantalla, etc.

Un tema muy importante en el mundo del PC es la denominada barrera de los 640 ks. Esto quiere decir que aunque tengamos instalados 8 megabytes en nuestro ordenador, solo podremos ejecutar nuestro programa en las primeras 640 ks. Para poder acceder a los 7 Megabytes restantes debemos utilizar funciones especiales de manejo de memoria extendida, expandida, etc. Chips inteligentes: Se trata de chips que apoyo, de los que se sirve el procesador o el usuario. Estos chips existen debido a que el procesador no puede controlar todo el ordenador sin ayuda. Al delegar ciertas funciones de control a otros chips, le queda mas tiempo libre para atender a su propio trabajo. Estos chips de apoyo pueden ser responsables de procesos tales como el flujo de informacin a travs de la circuitera interna (como el controlador de interrupciones y el controlador DMA) y controlar el flujo de informacin de uno a otro dispositivo( como un monitor o una unidad de disco) conectado al ordenador . En resumen, estos chips estn ah para librar de trabajo al procesador. Bus de direcciones: el bus de direcciones del PC utiliza 20 lneas de seal para trasmitir las direcciones de memoria y de los dispositivos conectados al bus. Como a travs de cada una de esas 20 lneas pueden viajar dos posibles valores(0 o 1, es decir tensin alta o tensin baja), el ordenador puede especificar 2^20 (2 elevado a 20) direcciones. Es decir puede direccionar 1 Megabyte. Estamos hablando del 8086 con un bus de direcciones de 20 bits. Modelos superiores como el 80386 o el Pentium direccionan muchsimo mas, tanto como les permite su bus: 32 bits en el caso del 386 y 64 bits en el caso del Pentium. Es decir, 2^32 y 2^64 direcciones respectivamente. Bus de datos: el bus de datos trabaja con el bus de direcciones para transportar los datos a travs del ordenador. Este bus de datos es de 16 bits, al igual que el tema de registro. Aunque no tiene que coincidir, como sucede con el procesador 8088, el cual tiene un tamao de registro de 16 bits y un bus de datos de 8 bits. Esto es as por simple economa. Por ahora costos. Claro que tiene su parte mala, y es que es mas lento al realizar transferencias de datos.

UNIDAD II. PROGRAMACIN BASICA 2.1 INSTRUCCIONES DE MANIPULACION DE BANDERAS. ( CLC, CMC, STC, CLD, STD, CLI, STI, LAHF, SAHF ) CLC. Limpia la bandera de acarreo. (pone en cero la bandera CF, de modo que un ADC no sume un bit de 1). La bandera que afecta es: CF. La sintaxis es la siguiente: CLC { sin operandos }.

CMC. Complemento de la bandera de acarreo. Esto es que si CF esta a cero lo pone a uno y 1 se convierte en 0. La bandera que afecta es: CF. La sintaxis es la siguiente: CMC { sin operandos }

STC. Pone en uno la bandera de acarreo. CF. La bandera que afecta es CF. La sintaxis es la siguiente: STC { sin operandos }

CLD. Limpia la bandera de direccin. Pone en cero la bandera DF. para hacer que operaciones como MOVS procesan de izquierda a derecha. La bandera que afecta es: DF. La sintaxis es la siguiente: CLD { sin operandos }

STD. Pone en uno la bandera de direccin. Pone en uno la bandera DF para hacer que las operaciones de cadena de caracteres como MOVS. procesen de derecha a izquierda. La bandera que afecta es: DF. La sintaxis es la siguiente: STD { sin operndos }

CLI. Limpia la bandera de interrupcin. Pone en uno la bandera IF, para deshabilitar la interrupcin externa enmascarable. La bandera que afecta es: IF. La sintaxis es la siguiente: CLI { sin operndos }

STI. Pone en uno la bandera de interrupcin. Pone en uno la bandera IF para permitir interrupciones externas enmascarables despus de la ejecucin de la siguiente instruccin. La bandera que afecta es IF. La sintaxis es la siguiente: STI { sin operandos }

LAHF. Carga el AH con las banderas. Carga los ocho bits de mas a la derecha del registro de banderas y los enva al AH. No afecta las banderas. La sintaxis es la siguiente: LAHF { sin operandos }

SAHF. Almacena el contenido de AH en los bits de mas a la derecha del registro de banderas. Las banderas que afectan son: AF, CF, PF, SF Y ZF. La sintaxis es la siguiente: SAHF { sin operandos }.

2.2 INSTRUCCIONES DE COMPARACIN Y PRUEBA. ( CM, TEST ). CM. La instruccin CM por lo comn es utilizada para comparar dos campos de datos, uno p ambos de los cuales estn contenidos en un registro. El formato general para CM es: [etiqueta:] CM [registro/memoria], [registro/memoria/inmediato]. El resultado de una operacin CM afecta las banderas AF, CF, OF, PF, SF y ZF, aunque no tiene que probar estas banderas en forma individual. El cdigo siguiente prueba el registro BX por un valor cero: X CM BX,00 ;Compara BX CON CERO. JZ B50 ;Si es cero salta a B50.

Si el BX tiene cero, CM establece el ZF a 1 y puede o no cambiar la configuracin de otras banderas. La instruccin JZ (salta si es cero) solo prueba la bandera ZF. Observe que la operacin compara el primer operando con el segundo: por ejemplo. El valor del primer operando es mayor que, igual a o menor que el valor del segundo operando?. TEST. Examine bits. Examina un campo por una configuracin especifica de bits tal como AND, pero no cambia el operando destino. Ambos operandos son byte, palabra o palabra doble en un registro o memoria; el segundo operando puede ser inmediato. TEST utiliza AND lgico para establecer banderas, que pueda probar con JE o JNE.

Las banderas que afectan son: CF, OF ( se ponen en cero ) PF, SF, ZF. La sintaxis es la siguiente: TEST { registro/memoria} ,{ registro/memoria/inmediato } .

2.3 INSTRUCCIONES DE SALTO. CONDICIONAL. ( JZ, JNZ, JS, JNS, JO, JNO, JP, JNP, JC, JNC, JG, JNG, ETC. ). En las instrucciones de saltos condicionales todos tienen la misma sintaxis: JZ JZ JNZ JS JNS JO JNO JP JNP JC JNC JG JNG JA JNBE JAE JNB JB JNAE JBE JNA JL JE etiqueta

Salta si es cero Salta si no es cero Salta si hay signo Salta si no hay signo Salta si hay desbordamiento ( -128 a 127 ). Salta si no hay desbordamiento Salta si hay paridad Salta si no hay paridad Salta si hay acarreo Salta si no hay acarreo Salta si es mayor Salta si no es mayor Salta si es superior Salta si no es inferior/igual Salta si es superior/igual Salta si no es inferior Salta si es inferior Salta si no es superior/igual Salta si es inferior Salta si no es superior Salta si es menor Salta si es igual

2.4 INCONDICIONALES DENTRO Y FUERA DEL SEGMENTO.

JMP. Salto incondicional. Salta a una direccin designada bajo cualquier condicin. Una direccin de JMP puede ser corta ( - 128 a 127 bytes ), cercana ( dentro de 32 K ) o lejana ( a otro segmento ). Un JMP corto reemplaza el IP con el desplazamiento de la direccin de destino. Un salto lejano ( como JMP FAR PTR etiqueta ) reemplaza el CS:IP con una nueva direccin de segmento. El formato general para JMP es: [ etiqueta: ] JMP Direccin Corta,, cercana o lejana.

2.5 INSTRUCCIONES DE CICLOS. ( LOOP, LOOPZ, LOOPNZ, JCXZ ). LOOP. Como se menciono en el tema anterior, la instruccin JMP provoca un ciclo infinito. Pero es mas probable que una rutina realice un ciclo un numero especifico de veces o hasta que se alcance una condicin particular. La instruccin LOOP, que sirve para este propsito, requiere un valor inicial en el registro CX. En cada interaccin, LOOP de forma automtica disminuye 1 en CX. Si el valor en el CX es cero, el control para a la instruccin que sigue; si el valor en el CX no es cero, el control pasa a la direccin del operando. La distancia debe ser un salto corto, desde 128 gasta + 127 bytes. Para una operacin que excede este lmite, el ensamblador enva un mensaje como salto relativo fuera de rango . El formato general para LOOP es: [ etiqueta: ] LOOP direccin corta No afecta las banderas LOOPZ. Repite mientras sea cero. Controla la ejecucin repetitiva de una rutina, es semejante al LOOP, salvo que transfiere a la direccin del operando si el CX no es cero y la bandera ZF ES 1. Utiliza el CX en modo de 16 bits y el ECX en modo de 32 bits. No afecta banderas. La sintaxis general es: [ etiqueta: ] LOOPZ etiqueta.

LOOPNZ. Repite mientras no sea cero. Controla la ejecucin repetitiva de una rutina, es semejante al LOOP, salvo que transfiere a la direccin del operando si el CX no es cero y la bandera ZF es 0. Utiliza el CX en modo de 16 bits y el ECX en modo de 32 bits. No afecta banderas. La sintaxis general es: [ etiqueta: ] LOOPNZ etiqueta

LOOPW/LOOPD.

Repite hasta completar. Controla la ejecucin de una rutina un numero especifico de veces. El CX debe contener un contador inicializado antes de dar comienzo al ciclo. Una vez culminado el ciclo o una vez que CX es igual a cero, para ejecutar la siguiente instruccin.. LOOPW utiliza el CX en modo de 16 bits y LOOPD el ECX en modo de 32 bits. No afecta banderas. La sintaxis general es: [ etiqueta: ] LOOPW/LOOPD etiqueta.

LOPE. Repite mientras sea igual. Controla la ejecucin repetitivas de una rutina, es semejante al LOOP, salvo que transfiere a la direccin del operando si el CX no es cero y la bandera ZF es 1. Utiliza el CX en modo de 16 bits y el ECX en modo de 32 bits. No afecta banderas. La sintaxis general es: [ etiqueta: ] LOOPNE. Repite mientras no sea igual. Controla la ejecucin repetitiva de una rutina, es semejante al LOOP, salvo que transfiere a la direccin del operando si el CX no es cero y la bandera ZF es 0. LOOPE etiqueta

Utiliza el CX en modo de 16 bits y el ECX en modo de 32 bits. No afecta banderas. La sintaxis general es: [ etiqueta: ] LOOPNE etiqueta.

2.6 INSTRUCCIONES LOGICAS ( AND, OR, XOR, NOT ). La lgica booleana es importante en el diseo de circuitos y tiene un paralelo en la lgica de programacin. Las instrucciones para lgica booleana son: AND, OR, XOR, TEST Y NOT, que pueden usarse para poner bits en 0 o 1 y para manejar datos ASCII con propsito aritmtico. El formato general para las operaciones boleanas es: [ etiqueta: ] operacin {registro/memoria}, {registro/memoria/inmediato}

El primer operando se refiere a un byte o palabra en un registro o memoria y es el nico valor que es cambiado. El segundo operando hacer referencia a un registro o a un valor inmediato. La operacin compara los bits de los dos operandos referenciados y de acuerdo con esto las banderas CF, OF, PF, SF Y ZF. AND. Si ambos bits comparados son 1, establece el resultado en 1, Las dems condiciones dan como resultado 0. OR. Si cualquiera ( 0 ambos ) de los bits comparados es 1, el resultado es 1. Si ambos bits estn en 0, el resultado es 0. XOR. Si uno de los bits comparados es 0 y el otro es 1, el resultado es 1. Si ambos bits comparados son iguales (ambos 0 o ambos 1), el resultado es 0. TEST. Igual que el AND, pero no cambia los bits de los operandos. Las operaciones siguientes AND, OR Y XOR ilustran los mismos valores de bits como operandos: AND OR XOR

Resultando:

0101 0011 ----0001

0101 0011 ----0111

0101 0011 ----0110

Es til recordar la siguiente regla: el ejemplo de AND con bits 0 es 0 y el OR con bits 1 es 1. Ejemplos de operaciones booleanas. Para los siguientes ejemplos independientes, suponga que AL contiene 1100 0101y el BH contiene 0101. 1.2.3.4.5.6.7.AND AL,BH ; Establece AL a 0100 0110 AND AL,00H ; Establece AL a 0000 0000 AND AL,0FH ; Establece AL a 0000 0101 OR BH,AL ; Establece BH a 1101 1101 OR CL,CL ; Pone en uno SF y ZF XOR AL,AL ; Establece AL a 0000 0000 XOR Al,0FFH ; Establece AL a 0011 1010

Los ejemplos 2y 6 muestran formas de limpiar un registro y ponerlo a cero. El ejemplo 3 pone a cero los cuatro bits mas a la izquierda de AL. Aunque el uso de CM puede ser mas claro, puede utilizar OR para los siguientes fines: 1.2.OR OR CX,CX CX;CX ; Verifica CX contra cero. ; Verifica el signo CX.

TEST acta igual que AND, pero solo establece las banderas. Aqu estn algunos ejemplos: 1.2.3.TEST BL.11110000B TEST AL,00000001B TEST DX,0ffh ; Alguno de los bits de mas a la ; es BL en diferente cero. ; Al contiene un numero impar ; El DX contiene un valor cero.

NOT. La instruccin NOT solo invierte los bits en un byte o palabra en un registro o en memoria: esto es, convierte los ceros en unos y los unos en ceros. Por ejemplo, si el AL contiene 1100 0101, la instruccin NOT AL cambia el AL a 0011 1010. Las banderas n son afectadas.

2.7 INSTRUCCIONES DE ROTACIN Y DESPLAZAMIENTO ( SAL, SHL, SAR, SHR, ROR, ROL, RCL, RCR ). Desplazamiento de Bits. Las instrucciones de corrimiento, que son parte de la capacidad lgica de la computadora, pueden realizar las siguientes acciones: Hacer referencia a un registro o direccin de memoria

Recorre bits a izquierda o a la derecha Recorre hasta 8 bits en un byte, 16 bits en una palabra y 32 bits en una palabra doble Corrimiento lgico

El segundo operando contiene el valor del corrimiento, que es una constante o una referencia al registro CL. Para los procesadores 8088/8086, la constante inmediata solo puede ser 1; un valor de corrimiento mayor que 1 debe estar contenido en el registro CL. Procesadores posteriores permiten constantes de corrimiento inmediato hasta de 31. El formato general para el corrimiento es. [etiqueta:] corrim. {registro/memoria},{registro/memoria/inmediato}.

SAR Y SHR

Los corrimientos hacia la derecha mueven los bits hacia la derecha en el registro designado. El bit recorrido fuera del registro mete la bandera de acarreo. Las instrucciones de corrimiento a la derecha estipulan datos lgicos (sin signo) o aritmticos (con signo).

SHR: derecha SAR: derecha

Desplazamiento

lgico

la

Desplazamiento

aritmtico

la

Las siguientes instrucciones relacionadas ilustra SHR y datos sin signo: INSTRUCCIN AL COMENTARIO MOV MOV SHR SHR CL.03 AL.10110111B AL.01 AL.CL

; 10110111 ; 01011011 ; 00001011

Un corrimiento a la derecha Tres corrimientos adicionales a la der.

El primer SHR desplaza el contenido de AL un bit hacia la derecha. El bit de mas a la derecha es enviado a la bandera de acarreo, y el bit mas a la izquierda se llena con un cer.

El segundo SHR desplaza tres bits mas al AL. La bandera de acarreo contiene de manera sucesiva 1.1 y 0: adems, tres bits 0 son colocados a la izquierda AL. SAR difiere de SHR en un punto importante: SAR utiliza el bit de signo para llenar el bit vacante de mas a la izquierda. De esta manera, los valores positivos y negativos retienen sus signos. Las siguientes instrucciones relacionadas ilustran SAR y datos con signo en los que el signo es un bit 1:

INSTRUCCIN AL COMENTARIO MOV MOV SAR SAR CL,03 AL, 10110111B AL,01 AL,CL

; 10110111 ; 11011011 ; 11111011

Un corrimiento a la derecha Tres corrimientos a la derecha

En especial, los corrimientos a la derecha son tiles para obtener mitades de valores y son mucho mas rpidas que utilizar una operacin de divisin. En los ejemplos de corrimientos de tres bits a la derecha, el primer corrimiento de un bit a la derecha en realidad divide entre dos, y el segundo y tercer corrimientos a la derecha en realidad dividen entre 8. Al obtener la mitad de nmeros impares tales como 5 y 7 se genera 2 y 3, respectivamente, y la bandera de acarreo se pone a 1. Tambin, si tiene que despalzar dos bits, es mas eficaz la codificacin de dos instrucciones de corrimiento que almacenar 2 en el CL y codificar un corrimiento. Al terminar una operacin de corrimiento, puede utilizar la instruccin JC (salta si hay acarreo) para examinar el bit desplazado a la bandera de acarreo. SAL Y SHL. Los corrimientos hacia la izquierda mueven los bits a la izquierda, en el registro designado. SHL y SAL son idnticos en su operacin. El bit desplazado fuera del registro brinca la bandera de acarreo. Las instrucciones de corrimiento hacia la izquierda estipulan datos lgicos (sin signo) y aritmticos (con signo). SHL: desplazamiento lgico a la izq. SAL: desplazamiento aritmtico a la izq

Las siguientes instrucciones relacionadas ilustran SHL para datos sin signo: INSTRUCCIN AL COMENTARIO MOV MOV SAR SAR CL,03 AL, 10110111B AL,01 AL,CL

; 10110111 ; 01101110 ; 01110000

Un corrimiento a la izquierda Tres corrimientos a la izquierda

El primer SHL desplaza el contenido del AL un bit hacia la izquierda. El bit desplazado de mas a la izquierda ahora se encuentra en la bandera de acarreo, y el ultimo bit a la derecha del AL se lleno con cero. El segundo SHL desplaza tres bits mas el AL. La bandera de acarreo contiene en forma sucesiva 0, 1 y 1, y se rellena con tres ceros a la derecha del AL. Los corrimientos a la izquierda llenan con cero el bit mas a la derecha. Como resultado de esto, SHL y SAL son idnticos. Los corrimientos a la izquierda en especial son tiles para duplicar valores y son mucho mas rpidos que usar una operacin de multiplicacin. Al finalizar una operacin de corrimiento, puede utilizar la instruccin JC (salta si hay acarreo) para examinar el bit que ingreso a la bandera de acarreo. Rotacin de Bits. Las instrucciones de rotacin, que son parte de la capacidad lgica de la computadora, pueden realizar las siguientes acciones. Hacer referencia a un byte o a una palabra. Hacer referencia a un registro o a memoria. Realizar rotacin a la derecha o a la izquierda. El bit que es desplazado fuera llena el espacio vacante en la memoria o registro y tambin se copia en la bandera de acarreo. Realizar rotacin hasta de 8 bits en un byte, 16 bits en una palabra y 32 bits en una palabra doble. Realizar rotacin lgica (sin signo) o aritmtica (con signo).

El segundo operando contiene un valor de rotacin. El cual es una constante (un valor inmediato) o una referencia al registro CL. Para los procesadores 80888/8086, la constante inmediata solo puede ser 1; un valor de rotacin mayor que 1 debe estar en el registro CL. Procesadores mas recientes permiten constantes inmediatas hasta el 31. El formato general para la rotacin es: [etiqueta:] rotacin [{ registro/memoria } , { CL/Inmediato }

ROR y RCR. Las rotaciones a la derecha desplazan a la derecha los bits en el registro designado. Las instrucciones de rotacin a la derecha estipulan datos lgicos (sin signo) o aritmticas (sin signo):

ROR: Rotacin lgica a la derecha

RCR: Rotacin aritmtica a la derecha

Las siguientes instrucciones relacionadas ilustran ROR: INSTRUCCIN AL COMENTARIO MOV MOV ROR ROR CL,03 BH, 10110111B BH,01 BH,CL

; 10110111 ; 01101110 ; 01110000

Una rotacin a la derecha Tres Rotaciones a la derecha

El primer ROR desplaza el bit mas a la derecha del BH a la posicin vacante de mas a la izquierda. La segunda y tercera operaciones ROR realizan la rotacin de os tres bits mas a la derecha. RCR provoca que la bandera de acarreo participe en la rotacin. Cada bit que se desplaza fuera por la derecha se mueve el CF y el bit CF se mueve a la posicin vacante de la izquierda.

ROR y RCL. Las rotaciones a la izquierda desplazan a la izquierda los bits del registro designado. Las instrucciones de rotacin estipulan datos lgicos (sin signo) y aritmticos (con signo).

ROL: Rotacin lgica a la izq.

RCL: Rotacin aritmtica a la izq.

Las siguientes instrucciones relacionadas ilustran ROL: INSTRUCCIN AL COMENTARIO MOV MOV ROL ROL CL,03 BL, 10110111B BL,01 BL,CL

; 10110111 ; 01101110 ; 01110000

Una rotacin a la izquierda Tres rotaciones a la izquierda

El primer ROL desplaza el bit de mas a la izquierda del BL a la posicin vacante de mas a la derecha. La segunda y tercera operaciones ROL realizan la rotacin de los tres bits de mas a la izquierda. De manera similar a RCR, RCL tambin provoca que la bandera de acarreo participe en la rotacin. Cada bit que se desplaza fuera por la izquierda se mueve al CF, y el bit del CF se mueve a la posicin vacante de la derecha.

Puede usar la instruccin JC para comprobar el bit rotado hacia la CF en el extremo de una operacin de rotacin.

2.8 INSTRUCCIONES PARA EL STACK. (PUSH, POP, PUSH, POPF) PUSH. Guarda en la pila una palabra o palabra doble para uso posterior. El registro SP apunta a la palabra (doble) actual en el tope de la pila. PUSH disminuye en 2 o en 4 el SP y transfiere una palabra (doble) desde el operando especificado al nuevo tope de la pila. El origen puede ser un registro general, un registro de segmento o memoria. La banderas. El formato general es: PUSH { registro/memoria }. POP. Saca una palabra de la pila previamente guardada, y la enva a un destino especificado-una localidad de memoria, un registro general o un segmento de registro. El SP apunta a la palabra actual en el tope de la pila: POP la transfiere el destino especificado e incrementa el SP en 2 o 4. No afecta a las banderas. El formato general es: POP { registro/memoria }. Guarda en la pila el contenido del registro de banderas para uso posterior. PUSHF disminuye SP en 2 y transfiere las banderas al nuevo tope de la pila. No afecta las banderas. La sintaxis general es: PUSHF (sin operando)

POPF. Saca de la pila la palabra de la parte superior y la enva al registro de bandera e incrementa el SP en 2. Por lo comn un PUSHF ha guardado en la pila las banderas Afecta todas las banderas. La sintaxis general es: POP (sin operando).

UNIDAD III. MANIPULACIN DE STRING 3.1 DEFINICION DE STRINGS los elementos strings son conocidos como datos de cadena de caracteres (o solo datos de cadena) y puede ser un carcter o numrico. Para procesar una cadena de caracteres, el lenguaje ensamblador proporciona cinco instrucciones para cadenas: MOVS LODS STOS CMPS SCAS Mueve un byte, palabra o palabra doble desde una localidad de memoria. Carga desde memoria un byte en el AL, AX o EAX. Almacena el contenido de los registros AL, AX o EAX. Compara localidades de memoria de un byte, palabra o doble palabra. Compara el contenido de los registros con el contenido de memoria.

Una instruccin asociada, el prefijo REP, provoca que una instruccin para cadena se realice de manera repetitiva un nmero especfico de veces. Una instruccin de cadena debe especificar el procesamiento repetitivo de un byte, palabra o doble palabra a un tiempo. As, puede seleccionar una operacin de byte y una operacin de palabra para una cadena con un nmero de par de bytes. Bsicamente existen dos maneras de codificar instrucciones de cadena. En la tabla siguiente, la segunda columna muestra el formato bsico para cada operacin, la cual utiliza los operandos implicados listados en la tercera columna: Operacin doble Mover Cargar Almacenar Comparar Rastrear Instruccin bsica MOVS LODS STOS CMPS SCAS Operandos implicados ES:DS,DS:SI AX,DS:SI ES:DI,AX DS:SI,ES:DI ES:DI,AX Operacin con bytes MOVSB LODSB STOSB CMPSB SCASB Operacin con palabra MOVSW LODSW STOSW CMPSW SCASW Operacin con doble palabra MOVSD LODSD STOSD CMPSD SCASD

La segunda manera de codificar instrucciones de cadena es la prctica usual. Como se mostr en las columnas cuarta, quinta y sexta. Usted carga las direcciones de los operando en los registros DI y SI y codifica, por ejemplo, MOVSB, MOVSW y Moved sin operando. Las instrucciones de cadena suponen que el DI y el SI contienen direcciones de desplazamiento vlidas que hacen referencia a bytes en memoria. El registro SI esta asociado por lo comn con el DS como DS:SI. El registro DI siempre esta asociado con el registro ES como ES:DI. En consecuencia MOVS, STOS, CMPS y SCAS necesitan que un

programa .EXE inicialice el registro ES en general pero no necesariamente con la misma direccin que la del registro DS.

MOV MOV MOV

AX,@DATA DS,AX ES,AX

; Obtiene la direccin del segmento de datos ; Los almacena en DS ; y en ES

3.2 ALMACENAMIENTO EN MEMORIA STOS es una instruccin que nos sirve para almacenar los contenidos de los registros AL, AX o EAX en un byte, palabra o palabra doble en memoria. La direccin de memoria siempre esta sujeta a los registros ES:DI. Dependiendo de la bandera de direccin STOS tambin incrementa o disminuye el registro DI en 1 para byte, 2 para la palabra y 4 para palabra doble. Dentro de el proceso de almacenamiento en memoria en lenguaje ensamblador aparte de la instruccin anterior tambin invierten algunas interrupciones, las cuales veremos en puntos posteriores.

3.3 INSTRUCCIONES PARA MANIPULACION (MOVS, STOS, CMPS, LODS, SCAS) REP: PREFIJO DE REPETICION DE CADENA El prefijo REP inmediatamente antes de una instruccin de cadena, como REP MOVSB, proporciona una ejecucin repetida con base en contador inicial que usted establece en el registro CX. REP ejecuta la instruccin de cadena disminuye el CX y repite la operacin hasta que le contador en el CX sea cero. De esta manera, puede manejar cadenas de caracteres casi cualquier longitud. La bandera de direccin (DF) determina la direccin de la operacin que se repite. Para procesamiento de izquierda a derecha, utilice CLD para poner en cero a DF. Para procesamiento de derecha a izquierda, utilice STD para poner en uno en DF. El ejemplo siguiente mueve los 20 bytes de STRING1 a STRING2. STRING1 STRING2 DB DB -CLD MOV LEA LEA REP 20 DUP(*) 20 DUP( )

CX,20 DI,STRING2 SI,STRING1 MOVSB

Durante la ejecucin, las instrucciones CMPS y SCAS tambin establecen las banderas de estado, de modo que la operacin puede terminar de manera inmediata al encontrar una condicin especificada. Las variaciones de REP para este propsito son las siguientes: REP Repite la operacin hasta que el CX llegue a cero. REPE/REPZ Repite la operacin mientras la bandera de cero indique igual a cero. REPNE/REPNZ Repite la operacin mientras ZF sea diferente a cero.

MOVS: MOVER UNA CDENA DE CARACTERES MOVS combinada con un prefijo REP y una longitud en el CX puede mover cualquier nmero de caracteres. Aunque usted no codifica los operandos la instruccin se parece a este: [etiqueta:] REP MOVSn [ES:DI,DS:SI]

Para la cadena receptora, los registros de segmento: desplazamientos son ES:DI para la cadena emisora los registros segmento: lanzamiento son DS:SI. Como resultado, al inicio de un programa .EXE inicialice el registro ES junto con el registro DS y antes de ejecutar MOVS, utilice LEA para inicializar los registros DI y SI. Dependiendo de la bandera de direccin, MOVS incrementa o disminuye los registros DI y SI en 1 para un byte, 2 para una palabra y 4 para una palabra doble. El cdigo siguiente es ilustrativo:

MOVS LEA LEA REP

CX, nmero DS,STRING2 SI,STRING1 MOVSn

Las instrucciones equivalentes son: JCXZ MOV MOV INC INC LOOP LABEL AL,[SI] [DI],AL DI SI LABEL1

LABEL1:

LABEL2:

EJEMPLO1 (COM) .MODEL SMALL .CODE ORG 100H BEGIN: JMP SHORT MAIN -----------------------------------------------------------------------------------------------------------NAME1 DB Assembler NAME2 DB 10 DUP ( ) NAME3 DB 10 DUP ( ) -----------------------------------------------------------------------------------------------------------MAIN PROC NEAR CALL C10MOVSB CALL D10MOVSW MOV AX,4C00H INT 21H MAIN ENDP C10MOVSB PROC NEAR CLD MOV CX,10 LEA DI,NAME2 LEA SI,NAME1 REP MOVSB RET C10MOVSB ENDP D10MOVSW PROC NEAR CLD MOV CS,05 LEA DI,NAME3 LEA SI,NAME2 REP MOVSW RET D10MOVSW ENDP END BEGIN

TITLE

LODS: CARGA UNA CADENA DE CARACTERES LODS carga AL con un byte, el XA con una palabra o el EAX con una palabra doble desde la memoria. La direccin de memoria se sujeta a los registros DS:SI, aunque puede pasar por alto el SI. Dependiendo de la bandera de direccin, la direccin tambin incrementa o disminuye el SI en 1 para byte, en 2 para palabra y en 4 para palabras dobles. Ya que una operacin LODS llena el registro, no existe razn practica para utilizar con ella el prefijo REP. Para la mayor parte de los propsitos, una sencilla instruccin MOV es adecuada. Pero MOV genera 3 bytes de cdigo mquina, mientras LODS solo genera 1, aunque necesita que inicialice el registro SI. Podra utilizar LODS para recorrer una cadena un byte, palabra o palabra doble a la vez, examinndola de forma sucesiva contra un valor particular.

EJEMPLO1 (COM) .MODEL SMALL .CODE ORG 100H BEGIN: JMP SHORT MAIN -----------------------------------------------------------------------------------------------------------FIELDA1 DB Assembler FIELDA2 DB 10 DUP ( ) ----------------------------------------------------------------------------------------------------------MAIN PROC NEAR CLD MOV CX,10 LEA SI,FIELDA1 LEA DI,FIELDA2+9 A20: LODSB MOV [DI],AL DEC DI LOOP A20 MOV AX,4C00H INT 21H MAIN ENP END BEGIN

TITLE

STOS: ALMACENAR UNA CADENA DE CARACTERES STOS es una instruccin que nos sirve para almacenar los contenidos de los registros AL, AX, o EAX en un byte, palabra o palabra doble en memoria. La direccin de la memoria siempre esta sujeta a los registros ES:DI. Dependiendo de la bandera de direccin, STOS tambin incrementa o disminuye el registro DI en 1 para byte, 2 para palabra y 4 para palabra doble. Un uso practico de STOS con un prefijo REP es para inicializar el rea de datos a cualquier valor especificado, tal como limpiar el rea de despliegue a blancos. Puede establecer el nmero de bytes, palabra o palabra doble en el CX. Las instrucciones equivalentes a REP STOSB son: JCXZ MOV INC/DEC LOOP ---LABEL2 [DI],AL DI LABEL1

LABEL1:

LABEL2:

EJEMPLO1 (COM) .MODEL SMALL .CODE ORG 100H BEGIN: JMP SHORT MAIN -----------------------------------------------------------------------------------------------------------NAME1 DB Assembler -----------------------------------------------------------------------------------------------------------MAIN PROC NEAR CLD MOV AX,2020H MOV CX,05 LEA DI,NAME1 REP STOSW MOV AX,4C00H INT 21H MAIN ENDP END BEGIN

TITLE

CMPS: COMPARAR CADENAS CMPS compara el contenido de una localidad de memoria (direccionada por DI:SI) con el de otra localidad de memoria (direccionada por ES:DI). Dependiendo de la bandera de direccin, CMPS incrementa o disminuye tambin los registros SI y DI en 1 para byte, en 2 para palabra y 4 para palabra doble. La operacin establece las banderas AF, CF, OF, PF, SF y ZF. Cuando se combinan con un prefijo REP y una longitud en el CX, de manera sucesiva CMPS puede comparar cadenas de cualquier longitud. Pero observe que CMPS proporciona una comparacin alfanumrico, esto es, una comparacin de acuerdo con los valores ASCII. La operacin no es adecuada para comparaciones algebraicas, que consisten en nmeros con signo. Considere la comparacin de dos cadenas que contienen JEAN y JOAN. Una comparacin de izquierda a derecha, tiene el resultado siguiente:

J:J Iguales E:O Diferentes (E es menor) A:A Iguales N:N Iguales

Una comparacin de los cuatro bytes termina con una comparacin de N con N (iguales). Ahora, ya que los dos nombres no son idnticos, la operacin debe terminar tan pronto como la comparacin entre dos caracteres sea diferente. Para este propsito, REP tiene una variacin, REPE (repite cuando sea igual), que repite la operacin mientras la comparacin entre caracteres sea igual, o hasta que el registro CX sea igual a cero. El cdigo para la comparacin repetida de un byte es REPE CMPDB.

EJEMPLO1 (COM) .MODEL SMALL .CODE ORG 100H BEGIN: JMP SHORT MAIN -----------------------------------------------------------------------------------------------------------NAME1 DB Assembler NAME2 DB Assembler NAME3 DB 10 DUP ( ) -----------------------------------------------------------------------------------------------------------MAIN PROC NEAR CLD MOV CX,10 LEA SI,NAME1 LEA DI,NAME2 REPE CMPSB JNE G20 MOV BH,01 G20: MOV CX,10 LEA DI,NAME3 LEA SI,NAME2 REPE CMPSB JE G30 MOV BL,02 G30: MOV AX,4C00H INT 21H MAIN ENDP END BEGIN

TITLE

SCAS: BUSQUEDA EN CADENAS

SCAS difiere de CMPS en que SCAS busca una cadena por un valor de byte, palabra o palabra doble especifico. SCAS compara el contenido de la localidad de memoria (direccionado por ES:DI) con el contenido del registro AL, AX o EAX. Dependiendo de la bandera de direccin. SCAS tambin incrementa o disminuye el registro DI en 1 para byte, en 2 para palabra y 4 para palabra doble. Al final de la ejecucin SCAS establece las banderas AF, CF, OF, OP, SF y ZF. Cuando se combina con el prefijo REP y una longitud en el CX, SCAS puede buscar en cadenas con cualquier longitud. SCAS es til en particular para la aplicacin de edicin de texto, en la que el programa tiene que buscar signos de puntuacin, como puntos, comas y blancos.

EJEMPLO1 (COM) .MODEL SMALL .CODE ORG 100H BEGIN: JMP SHORT MAIN -----------------------------------------------------------------------------------------------------------NAME1 DB Assembler -----------------------------------------------------------------------------------------------------------MAIN PROC NEAR CLD MOV AL,m MOV CX,10 LEA DI,NAME1 REPNE SCASB JNE H20 MOV AL,03 H20: MOV AH,4CH INT 21H MAIN ENDP END BEGIN

TITLE

3.4 INTERRUPCIONES PARA E/S DE STRINGS. INTERRUPCION 10H DEL BIOS PARA EL MODO DE TEXTO.

Funcin 00H: Establece modo de video. Esto establece al AL con el modo por lo comn 03 para color y 07 para monocrtico. Funcin 01H: Establece el tamao del cursor. El cursor no es parte del conjunto de caracteres ASCII y solo existe en modo de texto. La computadora mantiene su caracterstico hardware para control del cursor, con operaciones especiales INT para su uso. El smbolo del cursor normal es similar a un carcter de subrayado, pero puede utilizar la funcin 01H de la INT 10H para ajustar el tamao vertical del cursor. Establezca estos registros: CH (bits 4-0) = parte superior del cursor (linea inicial del rastreo). CL (bits 4-0) = parte inferior del cursor ( linea final del rastreo).

Puede ajustar el tamao del cursor entre la parte superior y la inferior: 0:14 para VGS, 0:13 para monocromtico y EGA y 0:7 para CGA, el cdigo siguiente agranda el cursor desde la parte superior hasta la inferior: MOV MOV MOV INT AH,10H CH,00 CL,14 10H

Ahora el cursor parpadea como un rectngulo relleno. Puede ajustar su tamao a cualquiera entre los limites establecidos, por ejemplo, 04:08,03:10, etc. El cursor conserva sus tributos hasta que otra operacin los cambie. Usando 0:14 (VGA), 12:13 (monocromticos o EGA) o 6:7 (CGA) se establece el cursor normal. Si no esta seguro de los limites en su monitor, primero intente ejecutar una funcin 03H con DEBUG. Funcin 02H: Establece la posicin del cursor. Esta til operacin coloca el cursor en cualquier parte de la pantalla, de acuerdo con las coordenadas rengln: columna. Establezca estos registros: BH = nmero de pgina DH = rengln DL = columna

La posicin del cursor en cada pgina es independiente de su posicin en las otras pginas. Ese cdigo coloca al cursor en el rengln 5, columna 20 para pgina 0: MOV AH,02H

MOV MOV MOV INT

BH,00 DH,05 DL,20 10H

Funcin 03H: Lee la posicin del cursor. Un programa puede utilizar la funcin 03H para determinar el rengln, columna y tamao actuales del cursor, en particular en situaciones en donde un programa tiene que utilizar la pantalla por un momento y tiene que guardar y restaurar la pantalla original. Coloque el nmero de pgina en el BH, slo para la funcin 02H: MOV MOV INT AH,03H BH,00 10H

La operacin regresa estos valores: AX y BX = sin cambio CH = lnea del rastreo inicial del cursor. CL = lnea del rastreo final del cursor. DH = rengln DL = columna

Funcin 05H: Seleccin de la pgina activa. La funcin 05H permite establecer la pgina que ser desplegada para los modos de texto 3-0 y 13-16. puede crear paginas diferentes y pedir pasar de una pgina a otra. Las pginas de modo 80 columnas son 3-0. aqu esta el cdigo para esta funcin: MOV MOV INT AH,05H AL,@PAGINA 10H

Funcin 06H: Recorrer hacia arriba la pantalla. Cuando un programa de manera inadvertida despliega texto hacia debajo de la pantalla despus de la parte inferior, la lnea siguiente sale del inicio de la parte superior. Pero aun si la operacin de interrupcin especifica la columna cero, las lneas nuevas llevan sangra y las lneas subsecuentes pueden estar mal alineadas. La solucin es recorrer la pantalla, de manera que las lneas desplegadas salgan por la parte superior carezcan en la parte inferior. Colocar un nmero cero en el AL provoca que toda la pantalla se recorra hacia arriba, y en realidad se limpie. Establecer un valor diferente de cero en AL provoca que ese nmero de lnea se recorra hacia arriba. Cargue los registros siguientes: AL = nmero de lneas o cero para pantalla completa.

BH = atributo CX = rengln: columnas iniciales DX = rengln: columnas finales El cdigo siguiente recorre toda la pantalla una lnea y establece un atributo de color:

MOV MOV MOV MOV INT

AX,0601H BH,30H CX,0000 DX,184FH 10H

Funcin 07H: Recorrer abajo la pantalla. Para modo de texto, el recorrido hacia debajo de la pantalla provoca que las lneas inferiores desaparezcan por la parte inferior y aparezcan lneas en blanco en la parte superior. Cargue los registros siguientes igual que para la funcin 06H. AL = nmero de lneas BH = atributo CX = rengln: columna inicial DX = rengln: columna final.

Funcin 08H: Leer atributo o carcter. La funcin 08H puede leer tanto un carcter como un atributo del rea de despliegue de video en los modos de texto grfico. Cargue el nmero de pgina normalmente, en el BH, como muestra el ejemplo siguiente: MOV MOV INT AH,08H BH,00 10H

La operacin regresa el carcter en el AL y su atributo en el AH. En modo grfico, para un carcter no ASCII la operacin regresa 00H. Puesto que slo se lee un carcter a la vez, tiene que codificar un ciclo para leer una sucesin de caracteres.

Funcin 09H: Desplegar atributo o carcter en la posicin del cursor. Aqu esta es una operacin divertida que despliega caracteres en modo de texto o grfico con intermitencia, en video inverso y todo eso. Establezca los registros:

AL = un solo carcter ASCII BH = nmero de pgina BL = atributo CX = nmero de veces de repeticin

A continuacin veremos un ejemplo que despliega 80 guiones y establece un atributo color: MOV MOV MOV MOV MOV INT AH,09H AL,- BH,0 BL,61H CX,80 10H

Funcin 0AH: Despliega un carcter en la posicin del cursor. Esta operacin despliega un carcter en modo de texto o grfico. La nica diferencia entre las funciones 0AH y 09H en modo de texto es que la funcin 0AH utiliza el atributo Actual, mientras que la funcin 09H establece el atributo. Aqu esta el cdigo para esta funcin: MOV MOV MOV MOV INT AH,0AH AL,carcter BH,#pgina CX,repeticin 10H

Con frecuencia, las funciones de la INT 21H del DOS que pueden imprimir cadena de caracteres y responder a las cadenas de control de la pantalla son mas adecuadas que las operaciones del BIOS.

Funcin 0EH: Escribir en el teletipo.

Esta operacin le permite utilizar un monitor como terminal para despliegue simple. Establezca la funcin 0EH en el AH, el carcter para desplegar en el AL, el nmero de pgina en el BH y el color del primer plano (modo grfico) en el BL: MOV MOV MOV MOV INT AH,0EH AL,carcter BH, #pgina BL,color 10H

Los caracteres de control de retroceso (08H), campana (07H) retorno de carro (0DH) y avance de lnea (0AH) actan como comandos para formatear la pantalla. De forma automtica, la operacin avanza el cursor y cuando llega al final de la lnea, enva los caracteres a la lnea siguiente, recorre la pantalla y mantiene los atributos presentes de la pantalla. Funcin 0FH: Obtiene el modo actual de video. Utilice esta funcin para determinar el modo actual de video (vase tambin la funcin 00H). Aqu esta el ejemplo: MOV INT CMP JE AH,0FH 10H AL,03

La operacin regresa estos valores: AL = modo actual de video AH = carcter por lnea BH = nmero de pgina actual

Funcin 11H: Generador de carcter. Esta complicada funcin para los sistemas EGA, MCGA y VGA inicia un modo establecido y restaura el ambiente de video. Una discusin esta fuera del alcance de esta obra.

Funcin 12H: Selecciona la rutina alterna de pantalla.

Esta funcin permite utilizar monitores EGA y VGA. Para poder obtener informacin de cualquiera de estos monitores, cargue 10H en el AL; la operacin regresa: BH = 00H para color y 01H para monocromtico. BL = 00H para 64K, 01H para 128K, 02H para 192K y 03H para 256K. CH = bits de adaptador CL = configuracin de conmutacin

La operacin permite usar varias funciones elaboradas para las computadoras del tipo PS/2, tal como 30H y34H. Funcin 13H: Despliega una cadena de caracteres. Para monitores EGA y VGA, esta operacin despliega cadenas con opciones de establecer el tributo y mover el cursor y acta sobre los caracteres de control de retroceso, campana, retorno de array avance de lnea. Los registros ES:BP deben contener la direccin segmento: desplazamiento de la cadena que despliega. El cdigo es como sigue: MOV MOV MOV MOV LEA MOV MOV INT AH,13H AL,subfuncin BH,#pgina BL,atributo BP,direccin CX,longitud DX,pantalla 10H

Las cuatro subfunciones en el AL son: 00 01 02 04 Despliega el atributo y la cadena, no avanza el cursor. Despliega el atributo y la cadena, avanza el cursor. Despliega el carcter y despus el atributo, no avanza el cursor. Despliega el carcter y despus el atributo, avanza el cursor.

UNIDAD IV. PROGRAMACIN DE ENTRADA Y SALIDA

4.1 DEFINICION DE INTERRUPCIONES 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 la realizar la interfase con el BIOS es el de la interrupciones de software. Una interrupcin es una operacin que suspende la ejecucin de un programa de modo que el sistema pueda realizar una accin especial. Ya hemos usado varias interrupciones de despliegue de video, E / S disco,. La interrupcin ejecuta y por lo regular regresa el control al procedimiento que fue interrumpido, el cual entonces reasume su ejecucin. El BIOS maneja la interrupcin 00H-1FH y el DOS maneja las interrupciones 20H-3FH. Cuando la computadora se enciende, el BIOS y el DOS establecen una tabla de servicios de interrupcin en la localizacin de memoria 000H-3FHH. La tabla permite el uso de 256 (100H) interrupciones, cada una con un desplazamiento: segmento relativo de cuatro bytes en la forma de IP:CS. El operando de una instruccin de interrupcin tal 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 00H hasta 3FFH. Cada direccin en la tabla relaciona una rutina de BIOS o del DOS para TIPO especifico de interrupcin. Por lo tanto los byte 0-3 contienen la direccin para la interrupcin 0., los bytes 4-7 para la interrupcin 1, y as sucesivamente.

INT 00H IP: CS

INT 01H IP: CS

INT 02H IP: CS

INT 03H IP: CS

INT 04H IP: CS

INT 05H IP: CS

................ .................

00H

04H

08H

0CH

10H

14H

4.2 EJECUCION DE UNA INTERRUPCION Una interrupcin guarda en la pila el contenido del registro de banderas, el CS, y el IP. Por ejemplo, la direccin en la tabla del INT 05H(que imprime lo que se encuentra en la pantalla cuando el usuario presiona ctrl.+Prtsc) es 0014H(05H* 4 = 14H). La operacin extrae la direccin de cuatro byte de la posicin 0014H y almacena los dos byte en el IP y dos en el CS. La direccin en el CS: IP entonces apunta al inicio de la rutina en el rea del BIOS, que ahora se ejecuta. La interrupcin regresa va a una instruccin IRET (regreso de interrupcin) que saca de la pila el IP, CS y la bandera y regresa el control a la instruccin que sigue al INT.

4.3 TIPO DE INTERRUPCIONES 4.3.1 INTERNAS (de programacin) Una interrupcin interna ocurre como resultado de la ejecucin en modo de un paso o de 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 acceder a los procedimientos del BIOS y del DOS. 4.3.2 EXTERNAS (del Bios) Una interrupcin externa por un dispositivo que es externo al procesador. Las dos lneas que pueden sealar interrupciones externas son las lneas de interrupcin no enmascarables(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 entornos, en realidad las interrupciones 05H a la 0F, para el cronometro, el teclado, los puertos seriales, el disco duro, las unidades de disco flexible y los puertos paralelos. INT 05: Imprime pantalla. Hace que el contenido de la pantalla se imprima. Emite la INT 05H para activar la interrupcin internamente, y presione las teclas ctrl.+PrtSC para activarla externamente. La opresin permite interrupciones y guarda la posicin del cursor. Ningn registro es afectado. La direccin 50:00 en el rea de datos del BIOS contiene el estado de la posicin. INT 08H: Sistema del cronometro. Interrupcin del hardware que actualiza la hora del sistema y (si es necesario) la fecha. Un chip temporalizador 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 0BH, INT 0CH: Control de dispositivo serial. Controla los puertos COM1 y COM2, respectivamente. INT 0DH, INT 0FH: 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 video. Acepta el numero 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 INT 12H.: Determinacin del tamao de la memoria. En el AX, regresa el tamao de la memoria de la tarjeta del sistema, en los trminos de kilobytes contiguos, tal que: memoria 640k es 028H, como se determino durante el encendido. INT 13H: Entrada/ Salida de disco. Acepta varias funciones en el AH para el estado del disco, sectores ledos, verificacin, formato y obtener diagnostico. INT 14H: Las comunicaciones de Entrada / salida. Proporciona una fila de bytes de E/ al puerto de comunicacin RS232. El DX debe contener el numero del adaptador RS232. Varias funciones son establecidas por medio del registro AH. INT 15H: Servicios del sistema. Esta muy elaborada operacin proporciona un gran numero de funciones en el AH, como las siguientes: 21H Autoprueba de encendido. 43H Lee el estado del sistema 84H Da soporte a la palanca de juegos 88H Determina el tamao de la memoria extendida 89H Conmuta el procesador al modo protegido C2H Interfaz del ratn

INT 16H: Entrada desde el teclado. Acepta varias funciones en el AH para entrada bsica desde el teclado. INT 17H: Salida a la impresora. Proporciona varias funciones para la impresora via el BIOS. INT 18H: Entrada al Basic de ROM. Llamada al BIOS si el sistema inicia sin disco que contenga los programas del sistema del DOS. INT 19H: Carga el arranque. Si un dispositivo de disco esta disponible con los programas de sistema del DOS, lee la pista 0. sector 1. en la localidad de arranque en 7C00H y transfiere el control a esta localidad. Si no existe unidad de disco, transfiere la entrada al BASIC de ROM por medio de la INT 18H. Es posible usar operacin como una interrupcin de software; no limpia la pantalla o inicializa datos en el BIOS de ROM. INT 1AH: Lee y pone la hora. Lee o pone la hora del da de acuerdo con el cdigo de la funcin en el AH: *00H= Lee el reloj del sistema. Regresa la parte alta del contador en el CX y la parte baja en el DX. Si la hora pasa las 24 horas desde la ultima lectura, la operacin coloca en el AL un valor diferente a cero. *01H= Pone la hora del reloj del sistema. Carga la parte alta del contador en el CX y la parte baja en el DX. *02H-07H= Esta funcin maneja la hora y la fecha para los servicios del reloj de tiempo real. Para determinar cuanto se tarda en ejecutar una rutina, podra poner en cero el reloj y despus leerlo al terminar el procesamiento. INT 1BH: Tomar control en una interrupcin de teclado. Cuando son presionadas las teclas Ctrl +Break se provoca que el BIOS en ROM transfiera el control a su direccin de interrupcin, en donde la bandera este en uno.

UNIDAD V. MACROS

5.1 DEFINICION DE MACROS.


Para cada instruccin simblica que usted codifique, el ensamblador genera una instruccin de lenguaje maquina. Pero para cada enunciado codificado en un lenguaje de alto nivel, como C o Pascal, el compilador genera muchas instrucciones de lenguaje maquina. A este respecto, puede pensar en un lenguaje de alto nivel como consistente de macro enunciados. El ensamblador tiene facilidades que el programador puede usar para definir macros. Usted define un nombre especifico para la macro, junto con el conjunto de instrucciones en lenguaje ensamblador que la macro va a generar. Despus, siempre que necesite codificar el conjunto de instrucciones, o solo codifique el nombre de la macro y el ensamblador genera de manera automtica las instrucciones que usted defini. Las macros son tiles para los siguientes propsitos:

Simplificar y reducir la cantidad de codificacin repetitiva. Reducir errores causados por la codificacin repetitiva. Linealizar un programa en lenguaje ensamblador para hacerlo mas legible.

Ejemplos de funciones que pueden ser implementadas por macros son operaciones de entrada / salida que cargan registros y realizan interrupciones, conversiones de informacin ASCII y binaria, aritmtica de palabras mltiples, rutinas para el manejo de cadenas de caracteres y divisin por sustraccin. Para macros que usted necesite incluir con su programa, primero tiene que definirlas. Una definicin de macro aparece antes de cualquier definicin de segmento. Examinemos una definicin de un macro sencilla que inicializa los registros de segmento para un programa .EXE: INITZ MACRO; Cabeza de la macro MOV AX,DATA MOV DS,AX MOV ES,AX ENDM

; [Cuerpo de ; la definicin ; de la macro] ; Fin de la macro.

El nombre de esta macro es INITZ, aunque es aceptaba cualquier otro nombre valido que sea nico. La directiva MACRO en la primera lnea le indica que las instrucciones que siguen, hasta ENDM (fin de la macro). Son parte de la definicin de la macro. La directiva ENDM termina la definicin de la macro. Las instrucciones entre MACRO y ENDM comprende el cuerpo de la definicin de la macro.

Los nombres a que se hace referencia en la definicin de la macro data. AX. DX y ES. Deben estar definidos en alguna parte del programa o debe ser dado a conocer de alguna otra forma al ensamblador. En forma subsecuente se puede usar la macroinstruccin INITS en el segmento de cdigo en donde quiera inicializar los registros. Cuando el ensamblador encuentra la macroinstruccin INITS, busca en una tabla de instrucciones simblicas y, a falta de una entrada, busca macroinstrucciones. Ya que el programa contiene una definicin de la macro INITZ, el ensamblador sustituye el cuerpo de la definicin generando las instrucciones: la expresin de la macro. In programa usara la macroinstruccin INITS solo una vez, aunque otras macros estn diseadas para ser utilizadas cualquier numero de veces y cada vez el ensamblador genera la misma expansin de la macro.

5.2 PARAMETROS Y ETIQUETAS.


PARMETROS. Para hacer una macro flexible, puede definir nombres en ella como argumentos mudos (ficticios). La definicin de la macro siguiente, llamada PROMPT, proporciona el uso de la funcin 09h del DOS para desplegare cualquier mensaje. Cuando se usa la macroinstruccin, el programador tiene que proporcionar el nombre del mensaje, el cual hace referencia a una rea de datos terminada por un signo de dlar. PROMPT MACRO MOV LEA INT ENDM MESSGE: AH,09H DX,MESSGE 21H

Un argumento mudo en una definicin de macro indica al ensamblador que haga coincidir su nombre con cualquier aparicin del mismo nombre en el cuerpo de la macro. Por ejemplo, el argumento mudo MESSGE tambin aparece en la instruccin LEA. Cuando utiliza la macroinstruccin PROMPT, usted proporciona un parmetro como el nombre real del mensaje que ser desplegado. Por ejemplo: PROMPT MESSGE2

En este caso. MESSGE2 tiene que estar apropiadamente definido en el segmento de datos. El parmetro en la macroinstruccin corresponde al argumento mudo en la definicin original de la macro:

Definicin de macro: Macroinstruccin:

PROMPT

MACRO

MESSGE(argumento) MESSGE(parmetro)

PROMPT

El ensamblador ya ha hecho corresponder el argumento en la definicin original de la macro con la instruccin LEA en le cuerpo de la macro. Ahora sustituye el (los) parmetros(s) de la macroinstruccin MESSGE2 por la presencia de MESSAGE en la instruccin LEA y la sustituye por cualquier otra aparicin de MESSAGE. Un argumento mudo puede contener cualquier nombre valido, incluyendo un nombre de registro tal como CX. Puede definir una macro con cualquier numero de argumentos mudos, separados por coma, hasta la columna 120 de una lnea. El ensamblador sustituye los parmetros de la macroinstruccin por los segmentos mudos en la definicin de la macro, entrada por entrada de izquierda a derecha. Page 60,132 TITLE EJEMPLO1 (EXE) ;------------------------------------------------------------------------------------------------------------INITZ MACRO MOV AX,data MOV DS,AX MOV ES,AX ENDM PROMPT MACRO MESSGE MOV AH,09H LEA DX,MESSGE INT 21H ENDM ;------------------------------------------------------------------------------------------------------------.MODEL SMALL .STACK 64 ;------------------------------------------------------------------------------------------------------------.DATA MESSGE1 DB Customer name?,$ MESSGE2 DB Customer address?$ ;------------------------------------------------------------------------------------------------------------.CODE BEGIN PROC FAR INIITZ MOV AX,data MOV DS,AX MOV ES,AX PROMPT MESSGE1 MOV AH,09H LEA DX,MESSGE2 INT 21H MOV AX,4C00H INT 21H BEGIN ENDP END BEGIN

ETIQUETAS. Puede codificar etiquetas e una definicion de macro para clasificar su objetivo. Las etiquetas de las definiciones de la macro solamente deben ir en el encabezado de esta proseguida por la directiva MACRO, dicha etiqueta puede ser cualquier palabra (que no sea reservada) y no lleva dos puntos como las etiquetas de instrucciones basicas.

5.3 ENSAMBLE DE MACROS.


Definir una macro, como INITZ o PROMPT, y usarla solo una vez en un programa no es muy productivo. El enfoque habitual es catalogar las macros en una biblioteca en disco bajo un nombre descriptivo, como MACRO.LIB. Usted solo tiene que reunir todas las definiciones de sus macros en un archivo t almacenar el archivo en disco. Para usar cualquier macro catalogadas, en lugares de codificar las definiciones MACRO al inicio del programa utilice la directiva INCLUDE as: INCLUDE INITZ D:MACRO.LIB

El ensamblador accesa el archivo llamado MACRO.LIB en la unidad D e incluye ambas definiciones de macro, INITZ y PROMPT, en el programa. En este ejemplo, solo INITZ es realmente necesaria. El listado ensamblado contendr una copia de las definiciones de las macros. Indicada con la letra C en la columna 30 del archivo. LIST. Luego de cada macroinstruccin estar la expansin de la macro, junto con su cdigo objeto generado, indicado por un signo de (+) en la columna 31. Ya que un ensamblador MASM es una operacin de dos pasadas, puede usar las siguientes instrucciones para hacer que INCLUDE suceda solo en el paso 1. IF1 INCLUDE D: MACRO.LIB ENDIF IF1 y ENDIF son directivas condicionales. IF1 le indica al ensamblador que accese la biblioteca solo en la pasada 1 del ensamblado. ENDIF termina la lgica de IF. Una copia de la definicin de la macro ya no aparecer en el listado, lo que ahorra tiempo y espacio. La coloracin de INCLUDE no es critica, pero que el ensamblador incluya todas las definiciones de macro que estn especificadas en la biblioteca. Sin embargo, suponga que una biblioteca contiene las macros INITS, PROMPT y DIVIDE, pero que el programa solo necesita INITZ, la directiva PURGE permite que usted elimine las macros PRMPT y DIVIDE que no necesita del ensamblador actual:

IF1 INCLUDE D:MACRO.LIB ENDIF PURGE INITZ PROMPT,DIVIDE CSEG,DATA,STACK

La operacin PURGE facilita solo el ensamblador de un programa y no tiene efecto sobre las macros almacenadas en la biblioteca.

5.4 VENTAJAS Y DESVENTAJAS


VENTAJAS: 1; 2; las Las macros son rpidas porque se ejecutan en lnea en un programa. Las macros pueden pasar y recibir parmetros que afectan solo la operacin de Mismas. 3; Las macros pueden ser guardadas en una biblioteca en cdigo fuente, que puede ser fcilmente editable. La cabecera de programacin para utilizar macros es simple; para una biblioteca de macros utilizar IF1....ENDIF

4;

DESVENTAJAS: 1; Las macros hacen ms grande el cdigo fuente, ya que los procedimientos no son En el cdigo del programa.

ACTIVIDAD EXTRAESCOLAR UNIDAD V MACROS SUMARESTA MACRO MOV A1,A MOV B1,B MOV C1,C MOV D1,D ADD A1,B1 SUB C1,D1 ENDM ABC MACRO MOV AX,A MOV BX,B ADD AX,BX ENDM RESTA MACRO MOV TX,T MOV EX,E SUB TX,EX ENDM SUMA MOV MOV MOV MOV ADD ADD MOV ENDM MACRO AX,A BX,B CX,C DX,D AX,BX CX,DX SUMA,CX

DIVICION MACRO MOV TX,T MOV EX,E MOV CX,C DIV TX,EX DIV TX,CX ENDM

MACROS CON PASE DE PARMETROS TEC MACRO MOV XCHG LEA INT ENDM MACRO MOV MOV MOV XCHG INT ENDM MACRO XCHG XCHG ADD MOV INT ENDM A,B,C AX,08H BX,AX DX,BX 21H

PROMPT

UNO,DOS,TRES UNO,09H DOS,UNO TRES,DOS DOS,TRES 2H1

PROMPT

Y,Z,TOTAL AX,Y BX,Z AX,BX TOTAL,AX 21H

PROMPT

MACRO I,II MOV CX,I MOV DX,II MUL CX,DX DIV CX,DX SUB CX,DX ADD CX,DX ENDM MACRO MOV LEA INT ENDM MESSGE AH,09H DX,MESSGE 21H

PROMPT

UNIDAD VI. PROCEDIMIENTOS

6.1 DEFINICION DE PROCEDIMIENTOS. Todos los programas que han sido escritos hasta este punto, han usado solo un procedimiento. Sin embargo, los programas pueden contener muchos procedimientos. Los procedimientos pueden ser considerados como NEAR (intrasegmentos) o FAR (intersegmentos). Cuando las rutinas como las utilizadas en la biblioteca de macros se colocan en procedimientos, el procedimiento se comporta ms como una subrutina. Estos procedimientos (sub) pueden ser llamados (CALL) desde el procedimiento (principal) y utilizados como las subrutinas de Pascal y Fortran. La estructura de la mayora de los programas de ensamblador es, aproximadamente, la misma en lo que se refiere a la colocacin de pilas, datos y segmentos de cdigo. En el segmento de cdigo mostrado a continuacin MYCODE es el nombre del segmento donde residir el cdigo de programa. Realmente, con el segmento de cdigo, pueden ser coleccionados muchos procedimientos. MYCODE MY PROC SEGMENT PROC ASSUME PUSH SUB PUSH RET ENDP ENDS END PARA CODE FAR CS:MYCODE,DE:MYDATA,SS:STACK DS AX,AX AX

MYPROC MYCODE

El nombre del procedimiento es MYPROC, y tiene un atributo FAR cuando est en e l programa principal. Cada procedimiento se estructura de una manera similar, bien con un atributo NEAR o bien FAR. Observe tambin que antes de que finalice el procedimiento (MYPROC ENDP), debe ser facilitado un RET. Los atributos FAR y NEAR en un procedimiento ayudan al microprocesador a determinar el tipo de instruccin CALL a generar cuando el procedimiento es requerido. Tambin debe ser establecido un camino para la vuelta desde el procedimiento. Este camino de instrucciones difiere dependiendo del atributo NEAR o FAR. Si el procedimiento tiene el atributo NEAR, el IP es guardado en la pila: si tiene el atributo FAR ambos CS e IP son guardados en la pila.

PASE DE PARMETROS. Los parmetros y variables no pueden ser pasados por procedimientos como ocurra con las macros. Para obtener 10 unidades de tiempo de retraso en un programa, el 10 debe ser cargado directamente en el procedimiento. El procedimiento parece como un programa en miniatura: DELAY PROC PUSH PUSH MOV P1: MOV P2: DEC JNZ DEC JNZ POP POP RET DELAY ENDP NEAR DX CX DX,10 CX,0FF00H CX P2 DX P1 CX DX

En este punto, no parece que haya una mayor diferencia entre una macro y un procedimiento NEAR. Realmente, las diferencias son enormes. Cuando el procedimiento DELAY fue encontrado, se codific como cualquier otro cdigo. Cuando se utiliza una macro, se expande cada vez que es requerida en un programa. Un procedimiento como DELAY puede ser llamado muchas veces. El cdigo real de DELAY solo aparece una vez. Otra forma de hacer que se conozcan los datos por los subprogramas llamados es por medio del paso de parmetros, en el que un programa pasa datos fsicamente mediante la pila. En este caso, asegrese de que cada PUSH hace referencia a una palabra, ya sea en memoria o en un registro. Pila dela estructura del programa. La pila de la estructura del programa es la parte de la pila que el programa que llama utiliza para pasar parmetros y que el subprograma llamado utiliza para accesarlos. El subprograma llamado tambin puede utilizar la pila de la estructura del programa para almacenamiento temporal de datos locales. El registro BP acta como un apuntador a la estructura. Para el paso de parmetros haremos uso de ambos registros el BP y el SP.

6.3 INSTRUCCIN PARA LLAMADO. (CALL) Hasta ahora los segmentos de cdigo han consistido solo en un procedimiento codificado como: BEGIN PROC . . . ENDP FAR

BEGIN

En este caso el operando FAR informa al sistema que la direccin indicada es el punto de entrada para la ejecucin del programa, mientras que la directiva ENDP define el final del procedimiento. Sin embargo, un segmento de cdigo puede tener cualquier nmero de procedimientos, todos distinguidos por PROC y ENDP. Un procedimiento llamado ( o subrutina) es una seccin de cdigo que realiza una tarea definida y clara. La organizacin de un programa en procedimientos proporciona los beneficios siguientes. * Reduce la cantidad de cdigo, ya que un procedimiento comn puede ser llamado desde cualquier lugar en el segmento de cdigo. * Fortalece la mejor organizacin del programa. * Facilita la depuracin del programa ya que los errores pueden ser aislados con mayor claridad. * Ayuda en el mantenimiento progresivo de programas ya que los procedimientos son identificados de forma rpida para su modificacin. Operaciones CALL y RET. La instruccin CALL transfiere el control a un procedimiento llamado, y la instruccin RET regresa del procedimiento llamado al procedimiento original que hizo la llamada. RET debe ser la ltima instruccin en un procedimiento llamado. Los formatos generales para CALL y RET son: Etiqueta: Etiqueta CALL RET procedimiento inmediato

El cdigo objeto particular que CALL y RET generan depende de si la operacin implica un procedimiento NEAR (cercano) o un procedimiento FAR (lejano). Llamada y regresos cercanos. Una llamada (CALL) a un procedimiento dentro del mismo segmento es cercano y realiza lo siguiente: * Disminuye el SP en 2 (una palabra). * Mete el IP (que contiene el desplazamiento de la instruccin que sigue al CALL) en la pila.

* Inserta la direccin del desplazamiento del procedimiento llamado en el IP. Un RET que regresa desde un procedimiento cercano realiza lo siguiente: * Saca el antiguo valor de IP de la pila y lo enva al IP * Incrementa el SP en 2. Ahora el CS:IP apunta a la instruccin que sigue al CALL original en la llamada del procedimiento, en donde se reasume la ejecucin. Llamada y regreso lejanos. Una llamada (CALL) lejana llama a un procedimiento etiquetado como FAR, tal vez en un segmento de cdigo separado. Un CALL lejano mete a la pila al CS y al IP, y RET los saca dela pila. 6.4 PROCEDIMIENTOS INTERNOS. Las instrucciones CALL usadas hasta este momento han sido llamadas intrasegmentos; este es, el procedimiento llamado esta en el mismo segmento de cdigo que fue el procedimiento que llama. Una llamada (CALL) intrasegmento es cercana si el procedimiento llamado esta definido o si es por omisin es NEAR (esto es, dentro de 32k). La operacin CALL empuja el registro IP a la pila y reemplaza el IP con el desplazamiento de la direccin destino. Por tanto una llamada cercana hace referencia a un procedimiento (cercano) que se encuentra en el mismo segmento. Ahora considere una llamada (CALL) intrasegmento que consista del cdigo objeto E8 2000, en donde E8 es el cdigo de la operacin y 2000 es el desplazamiento de un procedimiento llamado,. La operacin guarda el IP en la pila y almacena el 2000 como desplazamiento 0020 en el IP. Entonces el procesador combina la direccin actual en el CS con el desplazamiento en la IP para la siguiente instruccin a ejecutar. Al salir del procedimiento llamado, un RET (cercano) saca de la pila el IP almacenado y regresa a la siguiente instruccin despus del CALL.

CALL .... .... proc_cerc PROC .... RET ENDP

proc_cerc

NEAR

proc_cerc

Una llamada intrasegmento puede ser cercana, como se describi, o lejana si la llama es a un procedimiento definido como lejano dentro del mismo segmento. RET es cercano si aparece en un procedimiento NEAR y lejano si aparece en un procedimiento FAR.

6.5 PROCEDIMENTOS EXTERNOS. Una llamada (CALL) es clasificacin como lejana si el procedimiento llamado esta definido como FAR o como EXTERN, con frecuencia en otro segmento. La operacin CALL primero guarda en la pila el contenido del registro CS e inserta una nueva direccin de segmento en el CS. Despus guarda en la pila el IP e inserta un nuevo desplazamiento de direccin en el IP. (Los datos guardados en el CS e IP proporcionan la direccin de la instruccin que sigue de forma inmediata a CALL). De esta manera, ambas direcciones del segmento de cdigo y el desplazamiento son guardados para regresar del procedimiento llamado. Una llamada a otro procedimiento siempre es una llamada a un intersegmento lejano: CALL ... ... PROC ... RET ENDP proc_lej

proc_lej

NEAR

proc_lej

Considere una llamada (CALL) intersegmento que consta del cdigo objeto 9A 0002 AF04. El 9A hex es el cdigo de la operacin para un CALL intersegmento. La operacin guarda en la pila el IP actual y almacena el nuevo desplazamiento 0002 como 0200 en el IP. Despus guarda en la pila el CS y almacena la nueva direccin de segmento AF04 como 04AF en CS. Los nmeros en el CS e IP se combinan para establecer la direccin de la primera instruccin a ejecutar en el subprograma llamado: Segmento de cdigo: 04AF0H Desplazamiento IP: +02000H ________ direccin efectiva: 04CF0H

Al salir del procedimiento llamado, un RET intersegmento (lejano revierte la operacin CALL removiendo de la pila las direcciones originales IP y CS y envindolas a sus respectivos registros. La pareja CS:IP ahora apunta a la direccin de la siguiente instruccin despus del CALL original, en donde la ejecucin se reasume. La diferencia entre un CALL cercano y uno lejano es bsicamente que el CALL cercano solo reemplaza el desplazamiento IP, mientras que un CALL lejano reemplaza tanto la direccin del segmento CS como el desplazamiento IP.

MAINPROG

SUBPROG

EXTRN PROC ... CALL ... RET ENDP

SUBPROG:FAR FAR SUBPROG

UNIDAD 7. PROGRAMACIN HIBRIDA 7.1 PASCAL Y ENSAMBLADOR. Turbo editasm tiene un editor correspondiente de pantalla completa .De forma distinta a los ensambladores de IBM y de MICROSOFT, que re3quiere un archivo texto ASCII separado, turbo editasm incorpora el editor de texto ASCII en el ensamblador .Con esta caracterstica , usted puede instantneamente volver, durante el ensamblamiento , a una lnea de cdigo que genera un mensaje de error . turbo Editasm tambin incorpora otras muchas caractersticas tiles, como utilidades permanentes en referencia cruzadas, Ensamblamiento lnea a lnea y una tabla de smbolos del ensamblamiento final , almacenado en memoria . Turbo Editasm incluye un conjunto completo de instrucciones que soportan al microprocesador para que corran del modo real y protegido. Tambin estn soportadas las instrucciones para los coprocesadores. Turbo Editasm CAMINO 1

Turbo Editasm

CAMINO2

CREACIN DE CODIGO FUENTE ENSAMBLADOR El ciclo de desarrollo de lenguaje ensamblador comienza con la definicin de un problema que necesita ser resuelto a nivel maquina .Por ejemplo usted puede querer imprimir un mensaje en el monitor. Para crear cdigo fuente utilizado Turbo Edisam, colocar el turbo referenciado como TASMB , una vez dentro del paquete utilizar la letra E. Usted vera una pantalla blanca con la siguiente informacin en la parte superior derecha indicando que usted esta de modo de edicin. Line 1 Col 1 Insert

En seguida escribir el cdigo normal del ensamblador y cuando termine guarde el cdigo Fuente que haya creado en el disco . Al pulsar la tecla f2 se invocara a la siguiente peticin de pantalla ,en la parte superior izquierda de TASMB

Write source File : Responder con B: Progexe

Parta ensamblar un programa quitar al editor tecleando CTRL_K_D. TASMB responder con (A).Teclear la letra Apara Assemblerel programa . Usted vera la siguiente peticin: Use File B: Progexe.obj (y/n) ?

Pulsar Y para crear un archiva .OBJ con el mismo nombre TASM es un ensamblador de dos pasos indica que paso se esta ejecutndose ate al imprimir las siguientes peticiones : Assembling Pass One Pass Two Suponiendose que aqu no hay errores de edicin, usted vera ahora algo similar a las siguientes lneas : 25 Source Line(s) . NoEnsambly Error(s) 12 Object Byte(s). 54716 Byte Free Assembly Time: I secons(s) La siguiente tabla lista cada Opcin de ensamblamiento y explica cuando y porque Utilizar cada opcin

Tecla funcin F1

Descripcin de operaciones PANTALLA Activar la opcin provocara que el listado ensamblado se imprima en la pantalla . Si F1 esta en posicin off , solamente los errores encontrados durante el proceso de ensamblamiento sern impresos en pantalla . En modo off , el ensamblador correr mucho mas rpido ya que no tendr que hacer pausas para escribir cada lnea ensamblada en pantalla . IMPRESORA Cuando esta opcin se conecta , un listado del cdigo ensamblado ser enviado solamente a la impresora SMBOLOS Esta opcin indica al ensamblador que incluya una tabla de smbolos al final del listado. XEREF Activar la opcin fuerza al ensamblador a generar un listado de referencia cruzada MEMORIA Con F5 e la posicin on .TASMB es incluido para que enve la versin cdigo maquina del programa directamente a memoria. ESPERA DE ERRORES (ARRWAIT) Una opcin muy til para listados largos; esta opcin indica al ensamblador que por cada error encontrado en el Listado fuente ARCHIVO OBJ Esta opcin crea un archivo .OBJ ARCHIVO COM Esta opcin crea un archivo .COM ARCHIVO LST Esta opcin determina si se crea un listado de archivo y si el listado incluye o no una tabla de smbolos y un resultado de referencia . Actualmente no se utiliza.

F2

F3

F4

F5

F6

F7 F8 F9

F10

7.2 C Y ENSAMBLADOR. Turbo C Editasm tiene un editor correspondiente de pantalla completa . que requieren un archivo texto ASCII separado , Turbo C Editasm incorpora< el editor de texto ASSCII En el ensamblador . Con esta caracterstica , usted puede instantneamente volver, durante el ensamblamiento a una lnea de cdigo que genere un mensaje de error. Turbo C Editasm Tambin incorpora otras muchas caractersticas tiles, co0mo utilidades permanentes en referencias cruzadas , ensamblamiento lnea a lnea y una tabla de smbolos del ensamblamiento final , para los coprocesadores. Turbo C Editasm incluye un conjunto completo de instrucciones que soportan al microprocesador para que corran de modo real y protegido . tambin estn soportadas las instrucciones para los coprocesadores. Dos caminos de desarrollo de lenguaje ensamblador . Turbo C Editasm

Turbo C Editasm

Archivo .COM Turbo Eitasm

Archivo .OBJ

Enlazador Archivo OBJ

CREACIN CODIGO FUENTE ENASAMBLADOR El ciclo de desarrollo de aplicacin del lenguaje ensamblador comienza con la definicin de un problema que necesita ser resuelto a nivel maquina. Para crear cdigo fuente utilizando Turbo C Editasm , colocada r el Turbo C referenciado como TASMC , una vez dentro del paquete pulsar la letra E. Usted vera una pantalla blanca con la siguiente informacin en la parte superior derecha, indicando que usted esta de modo de edicin . Lin 1 Col 1 Insert

En seguida escribir el cdigo normal de ensamblador y cuando termine guarde el cdigo fuente que haya creado en el disco . Al pulsar la tecla F2 se invocara a la siguiente peticin de la pantalla , en la parte posterior izquierda de TASMC. Write Source File: Responder con Progexe Para ensamblar el programa, quitar el editor tecleando CTRL_K_D.TASMBC responder Con (A). Teclear a letra para Assembler el programa . Usted vera la siguiente peticin : Use File : progexe. Obj(y/n}

Pulsar Y para crea un archivo . OBJ con el mismo nombre TASMC es un ensamblador de dos pasos . Indica que paso esta ejecutndose actualmente al imprimir las siguientes peticiones : Assemling Pass One Pass two Suponindose que aqu no hay errores de edicin . Usted vera Ahora similar a las siguientes lneas: 20 Sources Line(s). No Assembly Error (s) 8 Object Byte(s).45617Byte(s) Free Assembly Time : I second(s)

7.3 COBOL Y ENSAMBLADOR. Este tipo de ensamblador se suministra con un pequeo con un pequeo ensamblador requiere menos memoria , no soporta todas las funciones y opciones de un problema . pasos para crear un programa en lenguaje ensamblador Editar Texto

Interprete

Enlazador

EXE2BIN

CREACIN DEL CODIGO FUENTE ENSAMBLADOR . El ciclo de desarrollo de aplicacin del lenguaje ensamblador comienza con la definicin de un problema que necesita ser resuelto a nivel maquina . Utilizando un editor de texto se puede proseguir a escribir el programa siendo este grabado . ASM. Habiendo creado el cdigo fuente ,usted ahora esta preparado para la siguiente fase en el ciclo de aplicacin del desarrollo. El interprete toma el codigo fuente, o archivo .ASM.

COMPLEMENTOS INSTRUCCIN BSICA MOVS LODS STOS CMPS SCAS ES:DI,DS:SI AX;DS:SI ES:DI,AX DS:SI,ES:DI ES:DI,AX

OPERACIN CON BYTES MOVSB LODSB STOS B CMPSB SCASB ES:DI,DS:SI AX;DS:SI ES:DI,AX DS:SI,ES:DI ES:DI,AX

OPERACIN CON PALABRA MOVSW LODSW STOSW CMPSW SCASW ES:DI,DS:SI AX;DS:SI ES:DI,AX DS:SI,ES:DI ES:DI,AX

OPERACIN PALABRA DOBLE MOVSD LODSD STOSD CMPSD SCASD ES:DI,DS:SI AX;DS:SI ES:DI,AX DS:SI,ES:DI ES:DI,AX

EJECUCION DE UNA INTERRUPCION Al tomar la interrupcin del 05H tendremos que seguir una serie de pasos: 1.- En la pila se almacena los datos para la ejecucin de la interrupcin. 2.-Se van almacenar los datos en 2 en 2 en un registro tomando en cuenta nivel alto y bajo. 3.- Ya llegando los registros pasan al BIOS le el programa mientras que no aparezca IRET no puede terminar pero si aparece se activa la interrupcin y vuelve al programa principal

Definiciones : INT 05H: Imprime pantalla hace que el contenido de la pantalla se imprima. BIOS: Contiene el estado de la interrupcin. IP = Puntero de instruccin. CS = Segmento cdigo.

Pila se pesiona Crtl+Prtsc INT 05H IP:CS Esta es la interrupcin que se toma para la explicacin

AL = alto nivel L =Bajo nievel

AL

CS

BIOS

IRET

Vous aimerez peut-être aussi