Excelencia Académica
INDICE INTRODUCCIÓN INDICE
UNIDAD TEMÁTICA Nº 1
SISTEMAS NUMÉRICOS SISTEMAS NUMÉRICOS POSESIÓNALES CONVERSIONES ENTRE SISTEMAS NUMÉRICOS NÚMEROS OCTALES Y HEXADECIMALES. REPRESENTACIÓN DE NÚMEROS NÚMEROS NEGATIVOS FORMA DE COMPLEMENTO A 1. FORMA DE COMPLEMENTO 2. SUMA Y RESTA EN COMPLEMENTO A DOS SUSTRACCIÓN CON COMPLEMENTOS A 2. CODIGOS: NÚMERICOS Y ALFANUMERICOS TIPOS DE CODIGOS CÓDIGO REFLEJADO DE CUATRO BITS (CÓDIGO GRAY) RESUMEN BIBLIOGRAFÍA RECOMENDADA AUTOEVALUACION FORMATIVA
UNIDAD TEMÁTICA Nº 2
ELECTRÓNICA DIGITAL LA ELECTRÓNICA DIGITAL ELECTRÓNICA ANALÓGICA ELECTRÓNICA DIGITAL ELECTRÓNICA DIGITAL ESTRUCTURA DE ÁLGEBRA DE BOOLE SISTEMA BINARIO DE NUMERACIÓN RESUMEN BIBLIOGRAFÍA RECOMENDADA AUTOEVALUACION FORMATIVA
09 09 09 11 12 13 13 14 16 16 16 17 19 19 20 21 21 22 23 24 25 28 28 29 29
UNIDAD TEMÁTICA Nº 3 OPERACIONES OPERACIONES APLICANDO 0 Y 1 COMPUERTAS LÓGICAS FUNCIONES LÓGICAS RESUMEN BIBLIOGRAFÍA RECOMENDADA AUTOEVALUACION FORMATIVA
31 31 32 33 35 36 36
UNIDAD TEMÁTICA Nº 04 OPERACIONES UNITARIAS OPERACIONES CON FUNCIONES MAPAS DE KARNAUGH MAPAS DE KARNAUGH PARA 2 VARIABLES MAPAS DE KARNAUGH PARA 3 VARIABLES
37 37 39 40 41 5
Excelencia Académica
MAPAS DE KARNAUGH PARA 4 VARIABLES MAPAS DE KARNAUGH PARA 5 Y 6 VARIABLES RESUMEN BIBLIOGRAFÍA RECOMENDADA AUTOEVALUACION FORMATIVA
UNIDAD TEMÁTICA Nº 5
DECODIFICADORES Y MULTIPLEXORES DECODIFICADOR CODIFICADOR BCD A 7 SEGMENTOS MULTIPLEXOR BLOQUES ARITMÉTICOS Y CODIFICACIÓN NUMÉRICA SUMA RESTA COMPARACIÓN UNIDAD LÓGICA Y ARITMÉTICA ALU ALU RESUMEN BIBLIOGRAFÍA AUTOEVALUACION FORMATIVA
42 43 44 44 45 47 47 49 51 53 53 54 54 55 56 57 58 58
UNIDAD TEMÁTICA Nº 6 EL MICROPROCESADOR ARQUITECTURA VON NEWMAN. ARQUITECTURA VON NEWMAN. EL ENSAMBLADOR LA EVOLUCIÓN DEL MS-DOS. MICROPROCESADORES 8086 88, 286, 386, 486 Y GENERACIÓN-PENTIUM. CARACTERISTICAS GENERALES. RESUMEN BIBLIOGRAFÍA RECOMENDADA AUTOEVALUACION FORMATIVA
59 59 61 61 64 64 64 68 68 68
UNIDAD TEMÁTICA Nº 7 EL PROCESADOR REGISTROS DEL 80X86 Y DEL 80286. REGISTROS DE LOS DATOS REGISTROS DE SEGMENTO REGISTROS ÍNDICES REGISTROS DEL 386 Y PROCESADORES SUPERIORES ORGANIZACIÓN DE DIRECCIONES: SEGMENTACIÓN MODOS DE DIRECCIONAMIENTO. COMBINACIONES DE REGISTROS DE SEGMENTO Y DESPLAZAMIENTO LA PILA BIBLIOGRAFÍA AUTOEVALUACION FORMATIVO
UNIDAD TEMÁTICA Nº 08
RESUMEN DE LAS INSTRUCCIONES Y BANDERINES. RESUMEN DE LAS INSTRUCCIONES EL LENGUAJE ENSAMBLADOR DEL 80X86 6
69 69 69 70 71 72 72 73 76 76 77 78 79 79 81
Excelencia Académica
MAPAS DE KARNAUGH PARA 4 VARIABLES MAPAS DE KARNAUGH PARA 5 Y 6 VARIABLES RESUMEN BIBLIOGRAFÍA RECOMENDADA AUTOEVALUACION FORMATIVA
UNIDAD TEMÁTICA Nº 5
DECODIFICADORES Y MULTIPLEXORES DECODIFICADOR CODIFICADOR BCD A 7 SEGMENTOS MULTIPLEXOR BLOQUES ARITMÉTICOS Y CODIFICACIÓN NUMÉRICA SUMA RESTA COMPARACIÓN UNIDAD LÓGICA Y ARITMÉTICA ALU ALU RESUMEN BIBLIOGRAFÍA AUTOEVALUACION FORMATIVA
42 43 44 44 45 47 47 49 51 53 53 54 54 55 56 57 58 58
UNIDAD TEMÁTICA Nº 6 EL MICROPROCESADOR ARQUITECTURA VON NEWMAN. ARQUITECTURA VON NEWMAN. EL ENSAMBLADOR LA EVOLUCIÓN DEL MS-DOS. MICROPROCESADORES 8086 88, 286, 386, 486 Y GENERACIÓN-PENTIUM. CARACTERISTICAS GENERALES. RESUMEN BIBLIOGRAFÍA RECOMENDADA AUTOEVALUACION FORMATIVA
59 59 61 61 64 64 64 68 68 68
UNIDAD TEMÁTICA Nº 7 EL PROCESADOR REGISTROS DEL 80X86 Y DEL 80286. REGISTROS DE LOS DATOS REGISTROS DE SEGMENTO REGISTROS ÍNDICES REGISTROS DEL 386 Y PROCESADORES SUPERIORES ORGANIZACIÓN DE DIRECCIONES: SEGMENTACIÓN MODOS DE DIRECCIONAMIENTO. COMBINACIONES DE REGISTROS DE SEGMENTO Y DESPLAZAMIENTO LA PILA BIBLIOGRAFÍA AUTOEVALUACION FORMATIVO
UNIDAD TEMÁTICA Nº 08
RESUMEN DE LAS INSTRUCCIONES Y BANDERINES. RESUMEN DE LAS INSTRUCCIONES EL LENGUAJE ENSAMBLADOR DEL 80X86 6
69 69 69 70 71 72 72 73 76 76 77 78 79 79 81
Excelencia Académica
SINTAXIS DE UNA LÍNEA EN ENSAMBLADOR. CONSTANTES Y OPERADORES OPERADORES DE RETORNO DE VALORES. OPERADORES DE ATRIBUTOS DIRECTIVAS DE DEFINICIÓN DE DATOS DIRECTIVAS DE DEFINICIÓN DE SÍMBOLOS DIRECTIVAS DE CONTROL DEL ENSAMBLADOR DIRECTIVAS DE REFERENCIAS EXTERNAS. DIRECTIVAS DE DEFINICIÓN DE BLOQUE DIRECTIVAS CONDICIONALES DIRECTIVAS DE LISTADO. C:\8086\TASM FICHERO, FICHERO LAS FUNCIONES DEL DOS Y DE LA BIOS PRINCIPALES INTERRUPCIONES DEL BIOS Y DEL DOS PROCESO DE DISEÑO DE HARDWARE MACROS BIBLIOGRAFÍA AUTOEVALUACION FORMATIVO FORMATIVO
81 83 84 85 87 88 89 93 94 97 97 99 102 105 110 114 141 142
7
Excelencia Académica
8
Excelencia Académica
SISTEMAS NUMÉRICOS Existen diferentes sistemas de numeración los conocimientos sobre las diferentes características o propiedades que resultan de las operaciones que se realizan, es para comprender e interpretar de cómo funciona un computador
Al finalizar el estudiante la siguiente unidad temática podrá: -
Conocerá los diferentes sistemas de numeración. Conceptualizara las operaciones que se puedan realizar con los diferentes sistemas de numeración. Definirá la utilidad de los números binarios Resolverá operaciones y transformaciones de sistemas de numeración.
1.1. Sistemas Numéricos Posesiónales En el sistema de números decimales se dice que la base o raíz es 10 debido a que usa 10 dígitos, y los coeficientes se multiplican por potencias de 10. El sistema binario únicamente posee dos valores posibles que son 0 y 1, en los cuales cada coeficiente AJ se multiplica por 2J, como ejemplo tendremos el desarrollo del número binario 11010.11 el cual será representado por la siguiente manera : 1x24+1x23+0x22+1x21+0x20+1x2-1+1x2-2 16+8+0+2+0+0.5+0.25 = 26.75 Por lo tanto tenemos que un número en un sistema de base(r) tiene coeficientes multiplicados por potencias de (r) y quedaría representado de la siguiente manera : an*r n+ an*r n+ . . . + a2*r 2+ a1*r 1+ a0*r 0+ a-1*r -1+ . . . + a-m*r -m 1.2. Conversiones entre Sistemas Numéricos Un número binario x puede convertirse en decimal efectuando la suma de las potencias cuyo valor es uno. 9
Excelencia Académica
Ejemplo : (1010.011) 2 = 1x23+0x22+1x21+0x20+0x2-1+1x2-2+1x2-3 = 8+0+2+0+0+0.25+0.125 = 10.375 Para los números expresados en base r podríamos efectuar su conversión a decimal multiplicando cada coeficiente por la potencia correspondiente de r y sumando. Ejemplo : (630.4)8 = 6x82+3x81+0x80+4x8-1 = 384+24+0.5 = 408.5 Cuando deseamos efectuar la conversión de decimal a binario o ha cualquier otro sistema con base r es mas conveniente si el número se separa en parte entera y en una parte fraccionaria, y la conversión de cada parte se efectúa por separado : Ejemplo : Convertir el numero (41) 10 a binario 41 1 LSB 20 0 10 0 5 1 2 0 1 1 MSB (41) 10 = (101001) 2 Para convertir cualquier entero decimal han cualquier sistema de base r la división se hace entre r en lugar de 2. Ejemplo : Convertir el numero (153) 10 a base 8 153 1 LSB 198 3 2 2 MSB (153)10=(231) 8 Para convertir una fracción decimal a binario, el sistema que se sigue es similar al que utilizamos para los enteros, sin embargo, se usa la multiplicación en lugar de la división, y los enteros se acumulan en lugar de los residuos.
10
Excelencia Académica
Ejemplo : convertir (0.6875) 10 a base 2 Entero
Fracción
0.6875 0.3750 0.75 0.5
X X X X
2 2 2 2
Coeficiente
1.3750 a -1 0.75 a-2 1.5 a-3 1.0 a-4
= = = =
1 0 1 1
(0.6875)10=(0.1011)2 Cuando deseamos convertir una fracción decimal en número expresado en base r, el procedimiento es similar, la multiplicación se hace con r en lugar de 2 y los coeficientes se encuentran con los enteros. Ejemplo : convertir (0.513)10 a base 8 Entero 0.513 0.104 0.832 0.656 0.248 0.984
X * * * * *
Fracción 8 4 .104 a-1 8 0.832 a-2 8 6.656 a-3 8 5.248 a-4 8 1.984 a-5 8 7.872 a-6
Coeficiente = 4 = 0 = 6 = 5 = 1 = 7
Cuando deseamos hacer la conversión de un número decimal de una parte entera y una parte fraccionaria la conversión se hace por separado y posteriormente se combinan las dos respuestas. Ejemplo : (41.6875)10 -> (101001.1011) 2
1.3. Números octales y hexadecimales. Las conversiones entre código binario, octal y hexadecimal es muy importante en las comparaciones digitales, ya que cada dígito octal corresponde a tres dígitos binarios y a cada dígito hexadecimal corresponde cuatro dígitos binarios. (10110001101011.111100000110) 2 -> (26153.7406) 8 Cuando deseamos convertir un número binario a hexadecimal, el proceso es similar excepto que el número binario se divide en grupos de 4. 11
Excelencia Académica
(10110001101011.11110010) 2 -> (2C6B.F2)16 La conversión a hexadecimal en binario se realiza con un procedimiento inverso al anterior esto es ; cada dígito octal se convierte en su equivalente binario de tres dígitos y cada dígito hexadecimal se convierte en su equivalente binario de cuatro dígitos. Ejemplo : (613.124)8 -> (110001011.001010100) 2 (306.D)16 ->(001100000110.1101) 2 Los números binarios son difíciles de manejar ya que se requiere dos o cuatro veces mas dígitos que su equivalente decimal. Ejemplo : (111111111111) 2 -> (4095) 10 Una forma de reducir esta deficiencia es emplear la relación entre el sistema de números binarios con el sistema octal o hexadecimal. El número binario (111111111111) 2 tiene 12 dígitos y los podemos expresar en octal (7777) 8 (cuatro dígitos) o en hexadecimal como (FFF) 16 (tres dígitos), la representación octal o hexadecimal es mas deseable ya que se representa en forma mas compacta, como un tercio o un cuarto del número de dígitos requeridos por el número binario equivalente. 1.4. Representación de Números Negativos Debido a que muchas computadoras y calculadoras digitales manejan números negativos y positivos, se necesita algún medio de representación para el signo del número (+/-). Esto se lleva a cabo en general agregando otro bit al número, denominado bit del signo. En términos generales la convención común que se a adoptado es que un cero en el bit del signo representa un número positivo y un uno, representa un número negativo. Ejemplo : El registro A contiene los bits 0110100, el contenido cero en el bit de mas a la izquierda (A6) es el bit del signo que representa al signo (+). Los otros seis bits son la magnitud del número, que es igual a 5210. A6 A5 A4 A3 A2 A1 A0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 (+) Magnitud del numero De este modo el número almacenado en el registro A es +52. El bit del signo se usa 12
Excelencia Académica
para indicar si un número binario almacenado es positivo o bien negativo. Para los números positivos, el resto de los bits se utilizan siempre para representar la magnitud del numero en forma binaria. Para los números negativos, no obstante, existen tres formas posibles de representar la magnitud.
Forma de magnitud verdadera. Forma de complemento a 1 Forma de complemento a 2
Forma de magnitud verdadera. El ejemplo visto anteriormente, contiene un bit de signo y seis bits de magnitud. Los bits de magnitud son el equivalente binario verdadero de los valores binarios que se representan. Aunque este sistema de magnitud verdadera es directo y fácil de entender, no es de tanta utilidad como los otros dos sistemas para representar números binarios con signo. Forma de complemento a 1. La forma de complemento a 1 de un número binario cualquiera se obtiene simplemente cambiando cada cero del número por 1 y cada uno por cero. Ejemplo : El complemento de 1 del número 101101 es 010010 Cuando se quiere representar números negativos en forma de complemento 1 el bit de signo se convierte en 1 y la magnitud se transforma de forma binaria verdadera. -57 = 1 111001 (forma de magnitud real) = 1 000110 (forma de complemento a 1) NOTA : Observe que el bit de signo no se complementa sino que se conserva en un 1 a fin de indicar un número negativo. Forma de complemento 2. La forma de complemento 2 de un número binario se forma simplemente tomando el complemento 1 del número y sumando 1 a la posición del bit menos significativo. Ejemplo : convertir 111001 a su forma de complemento 2.
13
Excelencia Académica
000110 1 --------000111 De tal forma que -57 se escribirá como 1 000111 en su representación de complemento a 2. Ejemplo : Tres sistemas para representar números binarios con signo se muestran a continuación. Sistema de magnitud verdadera complemento 2 +57 -57
0 111001 1 111001
Sistema de complemento 1
0 111001 1 000110
Sistema de
0 111001 1 000111
NOTA : Un número positivo en cualquier representación tiene un cero en el bit de la extrema izquierda para un (+), seguido de un número positivo. Un número negativo siempre tiene un uno en el bit de la extrema izquierda para un (-),pero los bits de magnitud se representan de una forma diferente. En la representación de signo-magnitud, estos bits son el número positivo ; en la representación de complemento de 1, estos bits son el complemento del número binario y en la representación de complemento 2, el número esta en su forma de complemento 2. 1.5. Suma y Resta en Complemento a Dos El complemento 1 y 2 son muy semejantes pero el complemento 2 generalmente es mas usado debido a las ventajas que representa al aplicarse en circuitos. Ejemplo : La suma de 2 números positivos +9 y +4 +9 01001 cosumando +4 00100 sumando --- -------- ------------+13 01101 suma = +13 NOTA : Los bits de signo del cosumando y el sumando ambos son cero y pos lo tanto el bit del signo de la suma es cero, lo cual indica que la suma es positiva. Nótese que el cosumando y el sumando se forman con el mismo número de bits, esto siempre debe llevarse a cabo en el sistema de complemento 2. Ejemplo: Un número positivo y un número negativo menor. +9 01001 -4 11100 --- ---------+5 1 00101 14
Excelencia Académica
Este acarreo se desprecia de manera que el resultado es 00101 (+5) NOTA : En este caso el bit del signo del sumando es uno. Observe que el bit del signo (+) también participa en el proceso de adición, de hecho, se genera un corrimiento en la última posición de la suma, este corrimiento siempre es despreciado, de modo que la suma final es 00101 = (+5). Ejemplo: Un número positivo y un numero negativo mayor. -9 1 0111 +4 0 0100 --- --------5 1 1011 Se le saca el complemento 2 0100 1 --------0101 Se le agrega el bit de signo 10101 (-5). NOTA: La suma en este caso tiene un bit de signo 1, lo cual indica que es negativo, esta se encuentra en su forma de complemento 2 de manera que los últimos 4 bits (1011), representan en realidad el complemento 2 de la suma. Para determinar la magnitud verdadera de la suma, debemos de tomar el complemento 2 de 1011, el resultado será 0101(5). Ejemplo:2 números negativos -9 y -4. -9 1 0111 -4 1 1100 ---- ---------13 1 1 0011 Se toma el complemento 2 Resultado:1 1101 Este resultado final vuelve a ser negativo y esta en forma de complemento 2 con un bit de signo 1. Nótese que 0011 es el complemento 2 de 1101(+13). Ejemplo:2 números iguales y opuestos. - 9 1 0111 +9 0 1001 --- --------0 1 0 0000
15
Excelencia Académica
Sustracción con complementos a 2. Esta operación en realidad comprende la operación de adición que hace uso del sistema de complemento 2. Cuando se resta un número binario (el sustraendo) de otro número binario (el minuendo), el procedimiento es como sigue : 1.- Tómese el complemento 2 del sustraendo, incluye el bit del signo. Si el sustraendo es un número positivo, este se transforma en un número negativo en forma de complemento 2. Si el sustraendo es un número negativo, este se convertirá en uno positivo en forma binaria verdadera. En otras palabras se altera el signo del sustraendo. 2.- Después de formar el complemento 2 del sustraendo este se suma al minuendo. El minuendo se conserva en su forma original. El resultado de esta adición representa la diferencia que se pide. El bit del signo de esta diferencia determina si es positivo o bien negativo, y si esta en forma binaria verdadera o en forma de complemento 2. 3 :- Recuérdese que ambos números deben tener el mismo número de bits. Ejemplo: +9 01001 - +4 11100 --- --------+5 1 00101 1.6. Códigos: Numéricos y Alfanuméricos Tipos de Códigos - Códigos Decimales Los códigos binarios para dígitos decimales requieren un mínimo de cuatro bits. Se obtiene numerosos códigos diferentes al ordenar cuatro o mas bits en diez distintas combinaciones. - Códigos de Detección de Error La información binaria, se trata de señales de pulso modulado o bien, entrada o salida digital a computadora, puede transmitirse a través de alguna forma de medio de comunicación, como alambres u ondas de radio. Cualquier ruido externo que se introduce en un medio de comunicación física cambia los valores de bits de 0 a 1 y viceversa. - Código Reflejado Los sistemas digitales pueden diseñarse para procesar datos solo en una forma discreta. Muchos sistemas físicos suministran salida de información continua. Esta información puede 16
Excelencia Académica
convertirse en forma digital o discreta antes de que se aplique a un sistema digital. La información continua o analógica se convierte en forma digital mediante un convertidor de analógico a digital. - Códigos Alfanuméricos Muchas de las aplicaciones de las computadoras digitales requieren la manipulación de datos que constan no solo de números, sino también de letras. Por ejemplo, una compañía de seguros con millones de tenedores de póliza debe usar una computadora digital para procesar sus archivos. Para representar el nombre del tenedor de póliza en forma binaria, es necesario tener un código binario para el alfabeto. Además, el mismo código binario debe representar números decimales y algunos otros caracteres especiales. Un código alfanumérico (algunas veces abreviado alfanumérico) es un código binario de un grupo de elementos que consta de diez dígitos decimales, las 26 letras del alfabeto y cierto numero de símbolos especiales como $. El numero total de elementos en un grupo alfanumérico es mayor de 36. Por lo tanto, debe codificarse con un mínimo de 6 bits (2 6=64, pero 25=32 no es suficiente). Códigos Numéricos Digito Decimal 0 1 2 3 4 5 6 7 8 9
8421(BCD) 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Exceso -3 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100
84-2-1 00 0 0 01 1 1 01 1 0 01 0 1 01 0 0 10 1 1 10 1 0 10 0 1 10 0 0 11 1 1
2421 0000 0001 0010 0011 0100 1011 1100 1101 1110 1111
5043210(Biquinario) 0100001 0100010 0100100 0101000 0110000 1000001 1000010 1000100 1001000 1010000
Código reflejado de cuatro bits (Código Gray) Código Reflejado Decimal 0000 0 0001 1 0010 2 0011 3 0110 4 0111 5 0101 6 0100 7 1100 8 1101 9 1111 10 1110 11 1010 12 1011 13 17
Excelencia Académica
1001 1000
14 15
Códigos Alfanuméricos Carácter Codigo interno Código ASCII Código EBCDIC 6 - bits 7 - bits 8 - bits
Código de tarjeta 12 - bits
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
010 001 010 010 010 011 010 100 010 101 010 110 010 111 011 000 011 001 100 001 100 010 100 011 100 100 100 101 100 110 100 111 101 000 101 001 110 010 110 011 110 100 110 101 110 110 110 111 111 000 111 001
100 0001 100 0010 100 0011 100 0100 100 0101 100 0110 100 0111 100 1000 100 1001 100 1010 100 1011 100 1100 100 1101 100 1110 100 1111 101 0000 101 0001 101 0010 101 0011 101 0100 101 0101 101 0110 101 0111 101 1000 101 1001 101 1010
1100 0001 1100 0010 1100 0011 1100 0100 1100 0101 1100 0110 1100 0111 1100 1000 1100 1001 1101 0001 1101 0010 1101 0011 1101 0100 1101 0101 1101 0110 1101 0111 1101 1000 1101 1001 1110 0001 1110 0010 1110 0011 1110 0100 1110 0101 1110 0111 1110 1000 1110 1001
12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 11,1 11,2 11,3 11,4 11,5 11,6 11,7 11,8 11,9 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9
0 1 2 3 4 5 6 7 8 9
000 000 000 001 000 010 000 011 000 100 000 101 000 110 000 111 001 000 001 001
011 0000 011 0001 011 0010 011 0011 011 0100 011 0101 011 0110 011 0111 011 1000 011 1001
1111 0000 1111 0001 1111 0010 1111 0011 1111 0100 1111 0101 1111 0110 1111 0111 1111 1000 1111 1001
0 1 2 3 4 5 6 7 8 9
espacio
110 000
010 0000
0100 0000
no perforado
.
011 011
010 1110
0100 1011
12,8,3
(
111 100
010 1000
0100 1101
12,8,5
18
Excelencia Académica
+
010 000
010 1011
0100 1110
12,8,6
$
101 011
010 0100
0101 1011
11,8,3
*
101 100
010 1010
0101 1100
11,8,4
)
011 100
010 1001
0101 1101
11,8,5
-
100 000
010 1101
0110 0000
11
/
110 001
010 1111
0110 0001
0,1
,
111 011
010 1100
0110 1011
0,8,3
=
001 011
010 1101
0111 1110
8,6
Los sistema de numeración de base 10 (decimal), es debido a que usa 10 dígitos, y todas las operaciones matemáticas que conocemos, podemos realizarlos con los otros sistemas (sistema binario, sistema octal, sistema hexadecimal) y utilizando los mismos criterios que conocemos. El sistema binario posee dos valores posibles que son 0 y 1, con el tenemos que familiarizarnos mas por su aplicación en los sistemas digitales, puede ser manejado para desarrollar diferentes operaciones matemáticas.
*. DONALD A. REAMEN Analisis y Diseño de Circuitos Electrónicos Editorial Prentice-hall Primera Edición Méjico Año 1999 *. M. MORRIS MANOLógica digital y diseño de computadores Primera Edición Méjico Año 1982
Editorial Prentice-hall
*. ROBER L. BOYLESTAD, LOUIS NASHELSKY Electronica: Teoria de circuitos Edicion Prentice-hall Sexta Edición Mejico Año 1999A
19
Excelencia Académica
1.
Resolver:
2.
Convertir los siguientes números binarios:
3.
11111111+ 11011011 11110111 ------------
57810
numeración
base binaria
125410
numeración
base binaria
5748
numeración
base binaria
479316
numeración
base binaria
1110111001 2
numeración
base decimal
1001110012
numeración
base octal
679310
20
1000010 11111 ------------
Convertir los siguientes números a otra base:
numeración
4.
1111111 X 111 -------------
base decimal
numeración
47328 + 35278 -------
base hexadecimal
63278 + 74238 -----------
51348 02658 ---------
Excelencia Académica
ELECTRÓNICA DIGITAL Los sistemas digitales representan valores de magnitudes físicas mediante un conjunto de dígitos o cifras, cada uno de los cuales admite varias posibilidades o símbolos. La electrónica digital es binaria, es decir, cada dígito admite solamente dos posibilidades, que solemos expresar con los símbolos 0 y 1, de forma que el sistema de numeración que le es propio es el sistema de base 2 (binario).
-
Diferencia la electrónica digital de la analógica.
-
Aplica los sistemas de numeración binaria a la electrónica digital.
-
Realiza operaciones de minimización de funciones lógicas.
LA ELECTRÓNICA DIGITAL Las señales eléctricas son el soporte material de la información; según la manera de codificar la información (de representarla en forma de señales eléctricas) aparecen dos tipos de electrónica: la analógica y la digital. La analógica representa las cantidades “por analogía cuantitativa” (a mayor cantidad, mayor tensión) según una relación de proporcionalidad directa, mientras que la digital utiliza símbolos a través de un proceso de codificación abstracta. Tomemos el ejemplo de un termómetro analógico y otro digital; el primero representa la temperatura mediante una columna de mercurio (a mayor temperatura mayor longitud de la columna), en cambio el digital proporciona unos signos numéricos (que es preciso interpretar por referencia a un determinado código). Si observamos que la columna de mercurio ha aumentado, sabemos que ha subido la temperatura; en cambio, entre una indicación digital de 19° y otra de 23° no es obvio cuál de ellas indica mayor temperatura 21
Excelencia Académica
(solamente la interpretación de los símbolos, a través del código numérico, permite resolver la comparación). 2.1.
ELECTRÓNICA ANALÓGICA
La electrónica analógica representa los valores de una magnitud física mediante una tensión, a través de una relación de proporcionalidad V(t) = k. M(t); se utiliza una sola tensión, una constante de proporcionalidad relaciona la tensión con el valor que representa y el rango de valores de la tensión es continuo, entre dos valores extremos Vmáx y Vmín. Para trasladar el valor de la magnitud física a la correspondiente tensión se necesita un sensor adecuado (transductor magnitud física -> señal eléctrica). El dispositivo básico de la electrónica analógica es el amplificador, el cual suministra una tensión de salida proporcional a la tensión de entrada Vo = a.Vi, a expensas de recibir una energía eléctrica desde una fuente de alimentación VCC.
El amplificador se construye con dispositivos amplificadores (triodos o transistores), enmarcados en un circuito de polarización (ubicación en el punto de operación adecuado para que reciban la energía de la fuente de alimentación). Pueden diseñarse muy diversas etapas amplificadoras (de tensión, de intensidad o de ambas) y, con ellas, puede construirse un amplificador de muy alta ganancia y características ideales, el amplificador operacional, que permite configurar bloques correspondientes a operaciones aritméticas (derivadores, sumadores, restadores, comparadores, integradores, …); tales bloques constituyen los módulos básicos para el control de procesos (automatización). Asimismo, razonando en el espectro de frecuencias, con la correspondiente ayuda de condensadores y bobinas, las etapas amplificadoras pueden transformarse en filtros, sintonizadores, demoduladores, moduladores, amplificadores de antena, que son los módulos básicos para la comunicación por ondas (telecomunicación). Las matemáticas propias de la electrónica analógica son las que corresponden a la proporcionalidad, las operaciones lineales (suma, resta, producto por una constante, derivada, integral). Más específicamente, el control de procesos se basa conceptualmente en la realimentación y en la teoría derivada de ella que recibe el nombre de regulación automática, mientras que la 22
Excelencia Académica
telecomunicación utiliza el dominio de la frecuencia, apoyándose en la descomposición en serie de Fourier (espectro de frecuencias).
2.2.
ELECTRÓNICA DIGITAL Los sistemas digitales representan cada valor de una magnitud física mediante un
conjunto de dígitos o cifras, cada uno de los cuales admite varias posibilidades o símbolos. Por ejemplo, en el sistema de numeración decimal, cada dígito tiene diez posibilidades (0, 1, 2, 3, 4, 5, 6, 7, 8 y 9). La electrónica digital es binaria, es decir, cada dígito admite solamente dos posibilidades, que solemos expresar con los símbolos 0 y 1 (también, con los símbolos L y H), de forma que el sistema de numeración que le es propio es el sistema de base 2 (binario). La electrónica digital representa los valores de una magnitud física mediante m señales eléctricas, cada una de las cuales admite solamente dos valores de tensión que corresponden a los símbolos 0 y 1; para expresar un solo valor de la magnitud se necesitan m señales, la relación se establece mediante un proceso abstracto de codificación y el rango de cada señal es discontinuo, reducido a dos únicos valores Vmáx y Vmín (por ejemplo, 0V y 5V). Para trasladar el valor de la magnitud a la correspondiente representación digital es preciso utilizar el sensor que transforma la magnitud en tensión analógica, seguido de un conversor analógico-digital que aplique el correspondiente código. Por ejemplo, un sensor de temperatura aplicado a una temperatura de 17° puede proporcionar una tensión de 4,25 V (factor de proporcionalidad 1/4) y el conversor analógicodigital debe transformar dicha tensión en 10001 (que corresponde al número 17 en binario), que, en realidad, serán cinco tensiones en los terminales de salida del conversor: 5V 0V 0V 0V 5V. Los dispositivos básicos digitales de la electrónica digital es el conmutador o interruptor (con dos estados: abierto = no conduce y cerrado = conduce).
Al igual que en el caso del amplificador, el interruptor puede construirse con transistores ( también podría hacerse con triodos); para amplificadores se utiliza la zona lineal de 23
Excelencia Académica
operación del transistor mientras que para interruptores se emplean los extremos de dicha zona: corte ( I = 0) y saturación ( V = 0). Con interruptores (transistores) se construyen puertas lógicas (capaces de efectuar operaciones booleanas individuales) y agrupando dichas puertas se configuran funciones booleanas que son la base relacional de las variables digitales. Determinados conjuntos de funciones booleanas de utilidad general se agrupan en bloques combinacionales que, junto con los bloques con memoria (biestables, registros y contadores) constituyen los módulos básicos para el diseño digital. Los biestables provienen de establecer realimentación dentro de una función booleana y con ellos se configuran los registros y los contadores. En definitiva, todo en los sistemas digitales son funciones boleanas, las cuales se componen de conjuntos de puertas lógicas, construidas con interruptores. Por ello, la matemática propia de la electrónica digital es el álgebra de Boole: las funciones booleanas expresadas como combinación de operaciones del álgebra booleana. Complementariamente, los grafos de estado son una herramienta auxiliar apropiada para describir el comportamiento de los circuitos digitales con memoria. 2.3.
ELECTRÓNICA DIGITAL
La finalidad de la Electrónica Digital es procesar la información. Para ello utiliza las operaciones definidas por George Boole en su “investigación sobre las leyes del pensamiento”, publicada en 1854. En una época de triunfo de las matemáticas en la tarea de “modelizar” el mundo físico, George Boole dio también forma matemática a la combinación de proposiciones; Boole introdujo, a la vez, un lenguaje formal ( la lógica proposicional) y una estructura matemática (el álgebra de Boole) capaz de representar y de validar tal lenguaje. Casi un siglo después, en 1938, al estudiar los complejos circuitos de relés que se utilizaban en la comunicación telefónica, Claude E. Shannon demostró que las operaciones booleanas son aptas para describir los circuitos con conmutadores y, también, para expresar cálculos en el sistema de numeración de base 2. Shannon estableció la posibilidad de utilizar la misma estructura matemática ( el álgebra de Boole) como soporte de un sistema de numeración y cálculo ( el sistema binario) y proporcionó una forma de “construir” las operaciones del álgebra booleana mediante la conexión de dispositivos físicos ( los conmutadores). Boole y Shannon fijaron los “cimientos” conceptuales para el procesamiento digital de la información. Gracias a ellos disponemos de un lenguaje formalizado capaz de expresar la combinación de proposiciones, de un sistema de numeración capaz de soportar cálculos 24
Excelencia Académica
aritméticos y de una forma de “ materializar” ( es decir, de construir máquinas capaces de ejecutar) tanto el lenguaje como el sistema de numeración. La base matemática que soporta todo esto corresponde a la estructura de álgebra de Boole de dos elementos ( el 0 y el 1): álgebra booleana binaria. Las “máquinas digitales”, aunque solamente “saben” trabajar con el 0 y el 1 ( una lógica dual muy limitada), son capaces de manejar, a más alto nivel (por programación), la lógica difusa, las redes neuronales, la inferencia matemática, la inteligencia artificial,... Este tema presenta un resumen general de los conceptos fundamentales del álgebra de Boole y de sus operaciones, considerando en particular las tres álgebras binarias citadas: la lógica proposicional, el sistema de numeración con base 2 y el álgebra de conmutadores. Además, se expone la representación gráfica de las operaciones booleanas mediante puertas lógicas, como esquema para describir ( y forma de construir) los circuitos digitales, y se introducen las operaciones “unitarias” que permiten expresar, con sólo una de ellas, todo el álgebra booleana y, por lo mismo, permiten construir cualquier circuito digital con un solo tipo de puertas.
2.4.
ESTRUCTURA DE ÁLGEBRA DE BOOLE El álgebra de Boole es una estructura matemática definida sobre un conjunto de
elementos (a, b, c,...) por tres operaciones con las propiedades siguientes: • la complementación o negación, a ,
con propiedad de involución, a = a
• la operación "o", b + a ,
asociativa y conmutativa
•la operación "y", a.b,
también asociativa y conmutativa
•siendo estas dos últimas operaciones distributivas entre sí a . (b + c) = (a . b) + (a . c) a + (b . c) = (a+b) . (a + c) • y existiendo dos elementos únicos, 0 y 1, tales que 0 = 1 a+0=a
a +1 = 1
a + a = 1
a.0=0
a.1=a
a . a = 0
0=1y
Un ejemplo característico de álgebra booleana lo constituye el conjunto partes de un conjunto dado (conjunto de todos sus subconjuntos) con las operaciones de complementación, unión e intersección; tales operaciones pueden representarse gráficamente mediante los diagramas de Venn.
25
Excelencia Académica
En relación con el cuerpo de los números reales, contrastando sus operaciones aritméticas de suma y resta con las operaciones "o" e " y " booleanas, el álgebra de Boole presenta las siguientes diferencias: * “La propiedad distributiva es doble; no sólo de . respecto a +, sino también de + respecto a .. * No existen elementos inversos respecto a las operaciones " o" e " y" y por ello no están definidas las operaciones inversas (como son la resta y división aritméticas). * Existe, en cambio, el elemento complementario. * Considérese el diferente papel que desempeña el elemento complementario en relación con los elementos inversos: - complementario
a + a = 1
a . a = 0
- inversos
a+ (a) = 0
a . (1/a) a =1].
A partir de los axiomas que definen el álgebra de Boole pueden deducirse directamente, los siguientes teoremas operativos: • Dualidad : toda expresión booleana sigue siendo válida si se efectúan, a la vez, los siguientes cambios: a a + ( operación " o") . (operación "y") 0 1 • Idempotencia:
a+a=a
• Absorción:
a+a.b=a
a+a.b=a+b
a.(a+b) =a
a.( a+b) =a.b
• de Morgan:
•de Consenso:
(a+b)= a. b
a.a=a
(a.b)= a+b
a.b+a.c+b.c = a.b+a.c (a+b).( a+ c).(b+ c) =(a+b).( a+c)
Como simple ejemplo de demostración de teoremas, se incluye a continuación la correspondiente a los teoremas de idempotencia: a+a=a.1+ a.1=a.(1+1) =a.1=a a.a=(a+0).(a+0) =a+0.0 =a+0=a
26
Excelencia Académica
[En el primer paso, se hace uso de los axiomas a.1=a, a+0=a; en el segundo, se aplica la propiedad distributiva; en el tercer paso, se utilizan los axiomas a+1=1, a.0=0 y en el cuarto, se emplean los mismos axiomas que en el primer paso.] El teorema de Dualidad se deduce de que todos los axiomas siguen siendo válidos si se aplican sobre ellos dichos cambios (los tres a la vez) y, por tanto, tales cambios pueden generalizarse a cualquier expresión booleana. [Debe tenerse en cuenta que la Dualidad ha de ser aplicada a ambos miembros de una expresión booleana y no solamente a uno de ellos: Sea la función
y=a+c.b
No es válido hacer y=a+ c.b = a.(c+b)
sino
y = a.( c + b) . ]
El álgebra booleana más simple y de mayor interés práctico es la definida sobre un conjunto de sólo dos elementos, que necesariamente han de ser el 0 y el 1: negación
a+b
operación "o"
0=1
1=0
operación "y"
a.b
0+0
0
0.0
0
0+1
1
0.1
0
1+0
1
1.0
0
1+1
1
1.1
1
En la operación "o" predomina el valor 1, en el sentido de que si un operando tiene dicho valor 1, el resultado también es 1; mientras que para la operación " y" el valor que prevalece es el 0. Una operación compuesta muy frecuente en el álgebra binaria es la denominada " oexclusiva" b
a . , que corresponde a la función “ser diferente” o “desigualdad”; la
denominación "o-exclusiva" deriva de que esta operación coincide con la " o", salvo en el caso 11 que adopta el valor 0: 0 0=0
1 0 =1
b a vale 1 cuando a b
0 1=1 y
1 1=0
vale 0 cuando a = b,
es decir, b a = 1 si a = 0 y b = 1 o, también, si a =1 y b = 0 o sea, a b = a.b + a. b La expresión a.b+a. b representa la función "o-exclusiva" en términos de operaciones booleanas básicas, en la forma de “suma de productos”; también puede expresarse dicha operación como “producto de sumas”, en la forma siguiente: 27
Excelencia Académica
ab =
a.b+a.b =
( a.b+a.b) =
( ( a.b).
(a.
b)) =
((a+b).(
a+b)) =
(a.a+a.b+b.a+b.b) = (a.b+b.a) = (a.b). (b.a) = (a+b).(b+a) =
(a+b).(a+b) 2.5.
SISTEMA BINARIO DE NUMERACIÓN El sistema de numeración en base 2 emplea solamente los dígitos 0 y 1, siendo 2n el
valor relativo de la cifra que ocupa el lugar n (contado de derecha a izquierda, partiendo de 0). El esquema operativo de los cambios de base binario-decimal es el siguiente: edcba(base 2) = e.24+d.23+c.22+b.21+a.20(base 10) Ejemplo:100110001001012 = 1x8192+0x4096+0x2048+1x1024+1x512+0x256+ 0x128+0x64+1x32+0x16+0x8+1x4+0x2+1x1=9765 10 Nº10 r1
Ejemplo
2 2
C1 r2
2
C2 r3
C3 r4
2 C4 r5
2 2
C5 r6
1
cocientes
restos
9765
1
4882
0
2441
1
1220
0
610
0
305
1
152
0
76
0
38
0
19
1
9
1
4
0
2
0
1
1
nº10 =1r6r5r4r3r2r1 2 976510 = 100110001001012
La Electrónica Digital procesa la información utilizando las operaciones definidas por George Boole introduciendo un lenguaje formal ( la lógica proposicional) y una estructura matemática (el álgebra de Boole) capaz de representar y de validar tal lenguaje, demostrando que las operaciones booleanas son aptas para describir los circuitos con 28
Excelencia Académica
conmutadores y expresar cálculos en el sistema de numeración de base 2 y utilizar la misma estructura matemática como soporte de un sistema de numeración y cálculo.
*. DONALD A. REAMEN Análisis y Diseño de Circuitos Electrónicos Editorial Prentice-hall Primera Edición Méjico Año 1999 *. M. MORRIS MANO Editorial Prentice-hall
Lógica digital y diseño de computadores Primera Edición Méjico Año 1982
*. ROBER L. BOYLESTAD, LOUIS NASHELSKY Electrónica: Teoría de circuitos Editorial Prentice-hall Sexta Edición Mejico Año 1999
1.
Que entiende por Electrónica Analógica.
2.
Como podría definir a la electrónica digital u para que sirve.
3.
Elabore las propiedades del álgebra de booleana.
4.
Minimizar la siguiente función: F=(a.a+a.b+b.a+b.b)
29
Excelencia Académica
30
Excelencia Académica
OPERACIONES Las compuertas lógicas aplicadas a los diferentes circuitos digitales electrónicos fueron para describir la forma esquemática de una función booleana; corresponden a un conjunto de diseños gráficos que le dieron formas y que se estandarizaron sirviendo para elaborar circuito complejos aplicados a sistemas elaborados que dan lugar a sistemas computarizados.
3.1.
-
Reconoce las operaciones a realizar con variables de símbolos lógicos.
-
Explica la función que cumplen las compuertas lógicas.
-
Elabora pequeños circuitos. OPERACIONES APLICANDO 0 y 1 Cualquier operación de un sistema de numeración puede realizarse mediante un
algoritmo que contenga solamente sumas, restas y comparaciones. Ahora bien, en el caso del sistema binario estas tres operaciones pueden construirse con funciones booleanas sencillas; véase a continuación para dos números binarios de 1 solo dígito: OPERACIONES LOGICAS.
suma
resta
a
b
suma
acarreo
0 0 1 1
0 1 0 1
0 1 1 0
0 0 0 1
a
b
resta
acarreo
0
0
0
0
0
1
1
1
1
0
1
0
1
1
0
0
Acarreo = me llevo Suma = a.b+a. b = a b acarreo = a.b
Acarreo = me llevo resta = a.b+a. b = a b acarreo = a.b
31
Excelencia Académica
comparación
a
b
igual
mayor
menor
0
0
1
0
0
0
1
0
0
1
1
0
0
1
0
1
1
1
0
0
Igual = a. b+a.b = (a b) mayor = a. b menor = a.b
Obviamente las anteriores expresiones booleanas para la suma, resta y comparación de dos dígitos pueden extenderse a números binarios de más de 1 dígito como veremos mas adelante. 3.2
COMPUERTAS LÓGICAS
Las operaciones básicas del álgebra de Boole: Compuerta AND
Compuerta NAND
a 0 0 1 1
a 0 0 1 1
b 0 1 0 1 b 0 1 0 1
a.b 0 0 0 1
(a.b)
1 1 1 0
Donde Compuerta OR
a 0 0 1 1
b 0 1 0 1
a+b 0 1 1 1
Compuerta NOR
a 0 0 1 1
b 0 1 0 1
(a
Donde
32
+ b) 1 0 0 0
Excelencia Académica
Compuerta OR-EXCLUSIVA a 0 0 1 1
b 0 1 0 1
a b 0 1 1 0
Compuerta NOR-EXCLUSIVA
a 0 0 1 1
Donde Compuerta INVERSOR Donde
Compuerta BUFFER
3.3.
a 0 1 a 0 1
b 0 1 0 1
(a b)
1 0 0 1
a
1 0 a 0 1
FUNCIONES LÓGICAS Dentro del Álgebra de Boole de 2 elementos, una función booleana o función lógica
es una expresión de operaciones booleanas enlazando variables que solamente pueden adquirir los valores 0 y 1. Una función booleana es una aplicación que a cada conjunto de valores booleanos de sus variables le asigna un y sólo un valor booleano. La primera de las dos definiciones anteriores es de tipo “descriptivo”; describe la forma algebraica de una función booleana; mientras que la segunda es de tipo “conceptual”; identifica la función como correspondencia entre el conjunto de valores de las variables y el valor booleano de la variable dependiente. En una función f designaremos con el nombre de variables de entrada xi al conjunto de sus variables propias y denominaremos variable de salida y a la variable dependiente o resultado de la propia función y = f(xi). De acuerdo con las definiciones anteriores, las funciones lógicas pueden representarse en dos formas diferentes: - Por su expresión algebraica o fórmula booleana, como expresión de las operaciones que ligan a sus variables; 33
Excelencia Académica
- Por su tabla operativa o tabla de verdad, expresando en forma de tabla la correspondencia entre la variable de salida y cada combinación posible de valores de sus variables de entrada. También puede expresarse una función en forma de enunciado o texto que manifiesta las especificaciones o requisitos que dan lugar a dicha función y en forma gráfica como circuito digital o esquema de puertas lógicas que produce los valores de salida de la función al recibir los correspondientes valores en sus entradas. El proceso de síntesis o “construcción digital” de una función parte del enunciado o especificaciones de la misma, para configurar la “tabla de verdad” de la función y obtener, a través de ella, su expresión algebraica; una vez simplificada, dicha expresión puede ser directamente trasladada a un esquema de puertas como representación gráfica del circuito digital que “hace efectiva” dicha función. Enunciado
tabla funcional
expresión algebraica
esquema de compuertas
Dada una función de m variables, cada una de las posibles combinaciones de valores de dichas m variables recibe el nombre de vector de entrada; el número total de vectores de entrada será 2m y tal será el número de filas que ha de tener la tabla f uncional completa. Para cada vector de entrada podemos construir un término mínimo, formado por el producto booleano (operación " y") de las m variables de entrada, estando cada una de ellas afirmada si su valor en el vector de entrada es 1 y negada cuando vale 0. Un término mínimo da resultado 1 al asignar a sus variables los valores del vector de entrada que le corresponde y, en cambio, para cualquier otro vector de entrada da resultado 0. Así pues, tal como están construidos, los términos mínimos poseen la propiedad de “seleccionar” o “filtrar” a su propio vector de entrada: a cada vector de entrada le corresponde un término mínimo y cada termino mínimo es un D iscriminador o Selector del vector de entrada (a, b, c, d) al que corresponde. Los vectores de entrada determinan el numero de términos, si tenemos 4 vectores o variables, tendremos 16 términos mínimos posibles, por la relación 2 4 = 16.
34
Excelencia Académica
Binario
Variables
d c b a
d c
Equivalencia
Equivalencia
Equivalencia
Decimal
Hexadecimal
Octal
a
0
0
0
b a
0 0 0 0
d c b
0 0 0 1
d c b
a
1
1
1
0 0 1 0
d c b a
2
2
2
0 0 1 1
d c b a
3
3
3
0 1 0 0
d c b a
4
4
4
0 1 0 1
d c b
a
5
5
5
0 1 1 0
d c b a
6
6
6
0 1 1 1
d c b a
7
7
7
1 0 0 0
d c b a
8
8
10
1 0 0 1
d c b a
9
9
11
1 0 1 0
d c b a
10
A
12
1 0 1 1
d c b a
11
B
13
1 1 0 0
d
c b a
12
C
14
1 1 0 1
d
c b
a
13
D
15
1 1 1 0
d c b a d c b a
14
E
16
15
F
17
1 1 1 1
Para cada funcion podemos construir un término grafico, formado por la aplicación del producto booleano (operación "and" “or”) con variables de entrada, estando cada una de ellas ingresando a las compuertas lógicas, y saliendo de estas su valor que dependerá del vector de entrada, verdadera cuando vale 1 y negada cuando vale 0.
35
Excelencia Académica
*. DONALD A. REAMEN Analisis y Diseño de Circuitos Electronicos Editorial Prentice-hall Primera Edición Méjico Año 1999 *. M. MORRIS MANO Lógica digital y diseño de computadores Editorial Prentice-hall Primera Edición Méjico Año 1982 *. ROBER L. BOYLESTAD, LOUIS NASHELSKY Electronica: Teoria de circuitos Editorial Prentice-hall Sexta Edición Mejico Año 1999
1.
Demostrar como funcionan las compuertas lógicas aplicando su tabla de verdad:
Compuerta and Compuerta nand Compuerta or Compuerta nor Compuerta or-exclusiva Compuerta inversor
36
Excelencia Académica
OPERACIONES UNITARIAS Aunque en la definición del álgebra de Boole se establecen tres operaciones básicas, existen tipos especiales de operaciones que con ellas se puede realizar toda el álgebra y aplicarlos a los circuitos digitales.
-
Aplica el álgebra de bool para minimizar funciones y elabora su circuito.
-
Utiliza mapas de Karnaugh para minimizar funciones y elaborar u circuito.
4.1.
OPERACIONES CON FUNCIONES Los circuitos lógicos para sistemas digitales pueden ser combinacionales o
secuenciales. Un circuito combinacional consta de compuertas lógicas cuyas salidas en cualquier momento están determinadas en forma directa por la combinación presente de las entradas sin tomar en cuenta las entradas previas Ejemplos: Simplificar la siguiente función y diagramar el circuito: Y = c. b.a + c.b. a + c.b.a + c. b.a + c.b.a = c.a(b+b) + c.a( b.b) + c.b. a = c.a + c.a + c.b. a
Se eliminan por complementarios
= a(c + c) + c.b. a = a+ c.b. a Y = a+ c.b
Por la propiedad de Absorción
circuito de la función minimizada
37
Excelencia Académica
4.2.
COMPUERTA OR EXCLUSIVA
Una puerta "or-exclusiva" (función diferente o desigual) se representa con el símbolo de la figura y equivale a la combinación de cinco puertas básicas:
Compuerta nor-exclusiva La negación de la puerta "or-exclusiva" se denomina "nor-inclusiva" (porque coincide con la operación "y" incluyendo el caso 00) y corresponde a la función igualdad: dando un resultado 1 cuando los dos operandos son iguales 00, 11.
Ejemplos: Veamos el siguiente ejemplo de transformación de expresiones booleanas con operaciones básicas a expresiones con puertas "y-negada": Por ultimo, transformar la siguiente función Y2:
38
Excelencia Académica
4.3.
MAPAS DE KARNAUGH
La aplicación de los teoremas del álgebra permite simplificar las funciones, reduciendo el número de puertas necesarias para su configuración; en concreto, los teoremas más útiles para la simplificación son los de idempotencia y absorción ejemplo, en la siguiente función, para minimizar se aplica los diferentes teoremas de tal forma que la función final sea lo mas 39
Excelencia Académica
pequeña posible para elaborar un circuito con pocas puertas lógicas y por ende mas sencillo de ensamblar físicamente: La aplicación directa de teoremas booleanos para simplificar las funciones requiere una cierta habilidad, cuyos resultados dependen de la complejidad de la función y de la experiencia e intuición de quien la realiza. Existen métodos de simplificación que aportan una formulación sistemática del proceso y que aseguran la máxima simplificación; los más utilizados de ellos son el método gráfico de los mapas de Karnaugh, que se describe a continuación, y el método algorítmico de QuineMcCluskey. Los mapas de Karnaugh son el método habitual de simplificación cuando se hace a mano y el número de variables de la función no es superior a 6 y determinra el numero de celdas que tendrá el mapa de Karnaugh (n= Nº de variables entonces el numero de celda será 2 n ). Para mayores número de variables se recurre a la ayuda del computador, con programas de simplificación automática que suelen estar basados en el algoritmo de Quine- MacCluskey. La simplificación de una función por medio de los mapas de Karnaugh se realiza dibujando su tabla de operación en un diagrama bidimensional según la estructura siguiente: 4.4.
MAPAS DE KARNAUGH
La numeración que le asignaremos a las celdas del mapa de Karnaugh no es la única, si investigamos encontraremos otras formas de numeración de celdas. 4.5.
MAPAS DE KARNAUGH PARA 2 VARIABLES
Para 2 variables el mapa de Karnaugh tendrá 4 celdas (2 2 =4).
Ejemplo: Simplificar la siguiente función: Y=1,2,3 Solucion: Aplicando variables es igual a Y = 01+10+11 entonces Y = b.a + b.a + b.a
40
Excelencia Académica
Formamos 2 grupos de 2 celdas, por que dichas celdas pertenecen a un uno logico.
Circuito de la función Y = a + b
4.6.
MAPAS DE KARNAUGH PARA 3 VARIABLES
Para 3 variables el mapa de Karnaugh tendrá 8 celdas (2 3 =8). OBS: Analizando el mapa de Karnaugh nos daremos cuenta que las celdas no tienen una
numeración secuencial. Vemos que las celdas 3 , 2 y 7 , 6 están alternados, quiere decir que la ultima columna pasa a ser la penúltima y la penúltima columna pasa a ser la ultima pero con sus respectivas numeraciones. Ejemplo: Simplificar la siguiente función: Y = 0,2,4,5,6,7 Solucion: Aplicando variables es igual a Y = 000 + 010 + 100 + 101 + 110 + 111 Entonces Y = c.b.a + c.b.a + c.b.a + c.b.a + c.b.a + c.b.a
41
Excelencia Académica
Al aplicar Karnaugh a la funcion, notaremos que formamos grupos de 4 celdas que tienen un uno lógico, las celdas en blanco son de cero lógico. Al formar dos grupos de cuatro celdas se tiene en cuenta el sistema binario (2 n), por lo tanto no existirá grupos de 3, 5, 6, 7, 9, 10,.... celdas. 4.6.
Circuito de la función simplificada Y = a + c MAPAS DE KARNAUGH PARA 4 VARIABLES
Para 4 variables el mapa de Karnaugh tendrá 16 celdas (2 4 =16).
OBS: OBS: El primer mapa de Karnaugh esta numerado en el sistema decimal para mayor comprensión y el segundo mapa de Karnaugh esta numerado en el sistema hexadecimal. Analizando el mapa de Karnaugh nos daremos cuenta que las celdas no tienen una numeración secuencial. secuencial. Vemos que las las celdas 3,2 - 7,6 - 15,14 y 11,10 están alternados, alternados, quiere decir que la ultima columna pasa a ser la penúltima y la penúltima columna pasa a ser la ultima, igualmente igualmente vemos que las celdas 12,8 - 13,9 - 15,11 y 14,10 están alternados,
42
Excelencia Académica
quiere decir que la ultima fila pasa a ser la penúltima y la penúltima fila pasa a ser la ultima pero con sus respectivo numero. Ejemplo: Simplificar la siguiente siguiente función: Y = 0,1,2,3,5,7,8,9,A,B,D,F 0,1,2,3,5,7,8,9,A,B,D,F Solucion: Aplicando cuatro (a, (a, b ,c d) variables a la función función dada, tendremos: tendremos: Y = 0000+0001+0010+0011+0101+0111+1000+1001+1010+1011+1101+1111 Entonces: Y=d.c.b.a+d.c.b.a+d.c.b.a+d.c.b.a+d.c.b.a+d.c.b.a+ d.c.b.a+d.c.b.a+d.c.b.a+d. c.b.a+d.c.b.a+d.c.b.a
Al aplicar Karnaugh a la función, notaremos que formamos un grupo de 4 celdas que tienen un uno lógico y un grupo de 8 celdas que tienen un uno lógico, las celdas en blanco son de cero lógico. Al formar dos grupos de cuatro celdas se tiene en cuenta el sistema binario (2n), por lo tanto no existirá grupos de 3, 5, 6, 7, 9, 10,11,12,13,14,15,.... celdas. Circuito de la función simplificada Y =a+ a. c 4.7.
MAPAS DE KARNAUGH PARA 5 y 6 VARIABLES
Mapa de Karnaugh para 5 variables donde contamos
32
celdas (25 = 32).
43
Excelencia Académica
Mapa de Karnaugh para 6 variables donde contamos 64 celdas (26 = 64).
Los circuitos combinacionales se construyen más a menudo con compuertas AND, OR, NAND o NOR. Las compuertas NAND y NOR son más comunes desde el punto de vista del hardware, ya que están disponibles en la forma de circuitos integrados y los circuitos que realizamos pueden ser elaborados físicamente con diferentes dispositivos que encontramos en el mercado de la electrónica.
*. DONALD A. REAMEN Análisis y Diseño de Circuitos Electrónicos Editorial Prentice-hall Primera Edición Méjico Año 1999 *. M. MORRIS MANO Lógica digital y diseño de computadores Editorial Prentice-hall Primera Edición Méjico Año 1982 *. ROBER L. BOYLESTAD, LOUIS NASHELSKY Electrónica: Teoría de circuitos Editorial Prentice-hall Sexta Edición Mejico Año 1999
44
Excelencia Académica
1.
Minimizar las siguientes funciones aplicando el álgebra de bool y elaborar el circuito utilizando compuertas logicas: F= 0,2,4,5,6 F=1,3,5,4,7 F= 0,2,4,6,10,12,14,15 F=1,3,5,4,7,9,11,13,15 2.
Minimizar las siguientes funciones aplicando el mapas de Karnaugh y elaborar el circuito utilizando compuertas logicas: F= 0,2,4,5,6 F=1,3,5,4,7 F= 0,2,4,6,10,12,14,15 F=1,3,5,4,7,9,11,13,15 3 Hacer la ecuación del siguiente circuito.
45
Excelencia Académica
46
Excelencia Académica
DECODIFICADORES Y MULTIPLEXORES Decodificadores y multiplexores son selectores de línea: - Un decodificador activa una de entre n líneas de salida - Un multiplexor selecciona una de entre n líneas de entrada y la pone en comunicación con su línea de salida. Cada uno de ellos proporciona una forma de configurar una función de sus variables de control: - la forma canónica a partir de un decodificador (suma de términos mínimos m.) -La forma tabular sobre un multiplexor ( look-up-table LUT). Ambas formas de construir una función booleana no precisan de la expresión algebraica de la misma; se obtienen directamente de su tabla funcional.
5.1.
-
Explica el funcionamiento y la aplicación de un codificador y decodificador.
-
Explica el funcionamiento y la aplicación de un multiptlexor. DECODIFICADOR
Sean tres variables de entrada; podemos construir todos sus términos mínimos: bastarán para ello 8 puertas AND de 3 entradas y 3 inversores. Este «bloque digital», cuyas salidas corresponden a los diversos términos mínimos de sus entradas, recibe el nombre de decodificador ; tal denominación se debe a que decodifica un número binario de m dígitos sobre 2 m líneas, de forma que para cada número o vector de entrada activa una salida diferente. Un decodificador es un bloque digital con m líneas de entrada y 2 m líneas de salida que corresponden a los 2 m posibles vectores de entrada (números binarios de m bits): la línea de salida correspondiente al número binario establecido en las entradas se encontrará a 1 y el resto de líneas de salida estará a 0.
47
Excelencia Académica
La figura representa un decodificador de 3 líneas de entrada: en cada momento el número binario presente en ellas determina cuál de las 8 líneas de salida se encuentra activada (valor booleano 1). En el decodificador están presentes todos los términos mínimos de sus entradas; para construir una función booleana de tales entradas, según su forma canónica, bastará reunir sobre una puerta "OR" los términos mínimos que corresponden a valor 1 en la tabla de la función, es decir, llevar a una puerta "OR" las salidas del decodificador que corresponden a vectores de entrada que «activan» la función (dan resultado 1). Ejemplo: Para construir de esta forma la función "ser número primo" de dígitos utilizaremos un decodificador de 4 líneas de control seguido de una puerta " OR" que recibe aquellas salidas con valor 1 que se ve en la tabla de verdad de la función (corresponden a los números primos 1, 2, 3, 5, 7, 11 y 13).
48
Excelencia Académica
Ejemplo: 5.2.
CODIFICADOR BCD A 7 SEGMENTOS
Las cifras decimales (del 0 al 9) se expresan en BCD con cuatro dígitos binarios (del 0000 al 1001); pero también dichas cifras se pueden representar mediante un visualizador de 7 segmentos para lo cual hay que codificarlas en 7 bits, cada uno de los cuales controla (enciende) uno de los segmentos:
El conversor entre el código BCD y el de 7 segmentos ha de tener 4 entradas y 7 salidas; la tabla de conversión representará las 7 funciones booleanas de 4 entradas que realizan dicho cambio de código; a partir de ella, pueden obtenerse directamente las expresiones algebraicas de dichas funciones que servirán para controlar cada uno de los 7 segmentos. El conversor entre el código BCD y el de 7 segmentos ha de tener 4 entradas y 7 salidas; la tabla de conversión representará las 7 funciones booleanas de 4 entradas que realizan dicho cambio de código; a partir de ella, pueden obtenerse directamente las expresiones algebraicas de dichas funciones que servirán para controlar cada uno de los 7 segmentos.
49
Excelencia Académica
A partir de ella, utilizando para simplificar los correspondientes diagramas de Karnaugh y expresando las funciones resultantes en términos de puertas "andnegada", se obtienen
las siguientes expresiones: La configuración del circuito tendrá que utilizar: - 2puertas "nand" de 4 entradas - 4 puertas "nand" de 3 entradas - 11 puertas "nand" de 2 entradas - 5 inversores En total:
22 puertas booleanas.
Circuito del Conversor BCD .7segmentos (con puertas Nand)
50
Excelencia Académica
5.3.
MULTIPLEXOR El multiplexor es un bloque digital que selecciona una de entre 2n líneas de entrada; para ello dispone de n líneas de control y en cada momento el número binario establecido en ellas determina la línea de entrada que queda conectada a la salida. Para seleccionar cada línea de entrada por su número binario bastará realizar la operación "and" entre la línea de entrada y el término mínimo que corresponde a dicho número binario; una posterior operación "or " en la salida recogerá el resultado de dicha selección (recibirá las salidas de las citadas puertas "and"). Ejemplo: La siguiente figura representa un multiplexor de 4 líneas de entrada y 2 de control; en cada momento el número binario presente en las entradas de control determina cuál de las 4 líneas de entrada se encuentra conectada con la salida. 51
Excelencia Académica
La
función
booleana
que
corresponde a este multiplexor es la siguiente: Y = L0 . b.a + L1 . b.a + L2 .b. a + L3 . b.a se diseño con puertas Nand. Para construir una función booleana utilizando un multiplexor bastará con fijar en sus líneas de entrada los valores de la tabla de verdad de la misma; de esta forma, las variables de control seleccionan sobre la propia tabla de la función el valor booleano que le corresponde al vector de entrada. Esta forma de configurar funciones booleanas mediante multiplexores, cuyas líneas de entrada reciben los valores de la tabla de verdad de la función, se denomina look-up-table (LUT). Ejemplo: La función "ser número primo" de 4 dígitos, para construirla con un multiplexor de 4 líneas de control, conectaremos a 1 las líneas de entrada del multiplexor que presentan tal valor en la tabla de verdad de la función (las correspondientes a los números primos 1, 2, 3, 5, 7, 11 y 13); el resto de las líneas de entrada se conectarán a 0. Obs: Decodificadores y multiplexores son selectores de lí nea: - Un decodificador activa una de entre n líneas de salida. - Un multiplexor selecciona una de entre n líneas de entrada y la pone en comunicación con su línea de salida. Cada uno de ellos proporciona una forma de configurar una función de sus variables de control: -La forma canónica a partir de un decodificador (suma de términos mínimos m)
52
Excelencia Académica
- La forma tabular sobre un multiplexor (look-up-table LUT). Ambas formas de construir una función booleana no precisan de la expresión algebraica de la misma; se obtienen directamente de su tabla funcional. 5.4.
BLOQUES ARITMÉTICOS Y CODIFICACIÓN NUMÉRICA
SUMA A partir de la celda sumadora básica de dos dígitos a y b más un tercero de carreo (me llevo: carry) c. Puede configurarse un sumador de dos números binarios de n dígitos mediante la conexión en cadena de n celdas.
A su vez, estos bloques sumadores de n cifras pueden conectarse en cadena, con la salida C de cada uno de ellos unida a la entrada C- del siguiente más significativo, para formar sumadores de mayor número de cifras binarias. En la celda sumadora, la función
arrastre
C
obtenida mediante un mapa
de
Karnaugh
queda un poco más simplificada
que
la
anterior: c=a.b+c(b+a)
53
Excelencia Académica
Esta expresión simplificada nos interesa para compararla con la que resulta en el caso de una celda restadora. En los sumadores de muchos bits, los tiempos de propagación de las celdas sucesivas se suman y resulta un tiempo de propagación global alto, lo cual puede limitar mucho la velocidad de estos sumadores. RESTA Para restar dos números positivos A-B es preciso que A = B; en otro caso, el arrastre más significativo valdrá 1, indicando que B es mayor que A y, por tanto, el resultado no corresponde a un número positivo. [En el apartado 4 de este mismo capítulo se estudiará la representación y forma de operar con números negativos]. Comparando las funciones básicas de sumadores y restadores se observa que difieren solamente en las relativas al arrastre y, en éstas, solamente en la negación de una variable: arrastre de la resta c = b.a + c-.(b + a) Resulta sencillo construir bloques sumadores/restadores, capaces de efectuar las dos operaciones, con una entrada de selección d que diferencie entre ambas; bastará añadir una operación "or-exclusiva" a
d, para determinar cuándo la variable a debe actuar
afirmada (d=0: suma) o negada (d=1: resta) en las funciones que calculan los arrastres:
5.5.
COMPARACIÓN
Un comparador entre dos números binarios de n dígitos puede construirse conectando en cadena n celdas: la celda básica compradora tiene como entradas, además de los dígitos correspondientes de los números a comparar ai bi, las que le informan sobre si los conjuntos de dígitos anteriores (de menor valor significativo) son iguales ( i- ) y sobre si es mayor el que corresponde al número A (m- ), y tiene dos salidas que indican igualdad i y "A mayor que B" m, respectivamente. La tercera función de comparación " A menor que B" resulta redundante con las otras dos: A menor que B = (i + m) =i. m. - Para comparar dos números hay que comenzar por la cifra más significativa y, caso de que ambos dígitos sean iguales, irse desplazando hacia la derecha efectuando la comparación cifra a cifra;
54
Excelencia Académica
- La función igualdad de una celda comparadora se activará cuando sus dos dígitos a b son iguales (es decir, cuando ambos valen 0 o ambos valen 1:a.b+a.b) y, además, la información que reciba por su entrada i- respecto a los siguientes dígitos sea de que son iguales (i- = 1); - La función "A mayor que B" se activará cuando a=1 y b=0 o cuando ambos dígitos son iguales (a.b+a.b) y la información que reciba por su entrada m- respecto a los siguientes dígitos sea de que "A mayor que B" (m- =1).
5.6. Unidad lógica y aritmética ALU También podemos considerar como bloques operacionales a los que realizan operaciones booleanas, constituidos por conjuntos de n puertas iguales de dos entradas que efectúan la operación lógica correspondiente (sea esta operación "o", "y","o-exclusiva", "y-negada", "onegada",...) sobre dos palabras de n dígitos o bits, operación lógica que se realiza individualmente, bit a bit. En la siguiente figura, se representa uno de estos bloques, configurado por un conjunto de 4 puertas que realizan la operación " y" entre dos palabras de 4 bits.
Bloque operacional lógico ("AND") para palabras de 4 bits
55
Excelencia Académica
Disponemos, pues, de bloques con capacidad de efectuar las operaciones básicas de cálculo binario (suma, resta, comparación,...) y de otros capaces de hacer operaciones booleanas ("+", ".", ".", "*", ".",...) sobre dos números o palabras binarias de n dígitos o bits. La longitud de palabra de los bloques operacionales integrados n suele ser de 4, 8 ó 16 bits; pero este número no es limitativo en modo alguno pues, salvo el caso particular de producto, la longitud de los operandos se puede ampliar indefinidamente sin más que conectar en cadena bloques iguales: • En el caso de suma o resta, la interconexión entre ellos se refiere al bit de acarreo. • En la comparación, cada bloque ha de comunicar al siguiente sus salidas ("=" y ">") • En las operaciones lógicas, no es precisa interconexión alguna (son bit a bit). Un paso más en la complejidad y posibilidades funcionales de los bloques operacionales es la configuración de un «operador genérico», capaz de realizar no una sino toda una amplia serie de operaciones aritméticas y lógicas sobre dos palabras de n bits: un bloque multifunción diseñado para efectuar k operaciones distintas, de forma que en cada momento se selecciona la operación que interesa mediante unas entradas de control. ALU Un bloque digital de este tipo recibe el nombre genérico de unidad aritmética y lógica ALU. Recibirá como entradas dos operandos de n dígitos y los terminales de salida de las diversas operaciones serán únicos, apareciendo sobre ellos el resultado de la operación seleccionada. La siguiente figura representa una ALU de tipo sencillo que opera sobre palabras de 8 bits y tiene capacidad para 16 operaciones (4 entradas de c ontrol). Dos salidas adicionales y sus correspondientes entradas permiten la ampliación de la ALU para palabras de más de 8 dígitos: la entrada y salida de acarreo c para la suma y la resta y la entrada y salida de resultado nulo n, que se activa cuando todos los dígitos del resultado son 0.
56
Excelencia Académica
La operación de comparación (entre ambos números A y B) se realiza mediante una operación de resta A-B, quedando el resultado reflejado sobre las salidas n (resultado nulo) y c (acarreo), en la forma siguiente: n=1 -> A=B c=1 -> A
A>B La siguiente tabla detalla posibles operaciones a realizar por una ALU: la entrada de selección S3 distingue entre operaciones aritméticas S3 =0 y operaciones lógicas S3 = 1, mientras que los ocho valores posibles de las otras t res entradas de control S2 S1 S0 permiten seleccionar ocho operaciones de cada uno de ambos tipos:
57
Excelencia Académica
El presente capitulo se refiere a la forma de codificar, multiplexar los datos (0,1), con mas complejidad, posibilitando que los bloques de datos puedan ser transportados o aplicados de acuerdo a nuestra conveniencia por tener una configuración de un operador genérico, capaz de realizar una serie de operaciones aritméticas y lógicas sobre palabras de n bits: un bloque multifunción diseñado para efectuar k operaciones distintas, de forma que en cada momento se selecciona la operación que interesa mediante unas entradas de control.
*. DONALD A. REAMEN Análisis y Diseño de Circuitos Electrónicos Editorial Prentice-hall Primera Edición Méjico Año 1999 *. M. MORRIS MANO Lógica digital y diseño de computadores Editorial Prentice-hall Primera Edición Méjico Año 1982 *. ROBER L. BOYLESTAD, LOUIS NASHELSKY Electrónica: Teoría de circuitos Editorial Prentice-hall Sexta Edición Mejico Año 1999
1.C 0 0 0 0 1 1 1 1
B A 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1
Hacer circuito decodificador para el siguiente arreglo de displey d c b a
2.-
Por que los multiplexores son muy utilizados para el transporte de datos.
3.-
Diseñe un comparador de datos.
58
Excelencia Académica
EL MICROPROCESADOR Los Microprocesadores se usan para procesar datos e instrucciones que tienen un significado (información) durante la operación de un bloque de información recibe el apoyo de diferentes dispositivos. Las memorias donde el uso importante de las ROM es en el almacenamiento de programas en microcomputadoras. Ya que todas las ROM son no volátiles, estos programas no se pierden cuando la microcomputadora es apagada. Cuando se enciende la maquina, pueden empezar de inmediato a ejecutar el programa almacenado en la ROM. También se emplean para almacenar programas y datos en quipo controlado por microprocesadores como complejas cajas registradoras electrónicas.
-
Comprende el funcionamiento del microprocesador.
-
Conoce las arquitecturas del computador.
-
Comprende el funcionamiento de los periféricos,
6.1.
ARQUITECTURA VON NEWMAN.
Es prácticamente la primera arquitectura que aparece desde el inicio de los ordenadores y se sigue desarrollando actualmente. Claro es que está siendo remplazada por otra que permiten una mayor velocidad de proceso, la RISC. El los primeros tiempos de los ordenadores, con sistemas de numeración decimal, una electrónica sumamente complicada muy susceptible a fallos y un sistema de programación cableado o mediante fichas, Von Newman propuso dos conceptos básicos que revolucionarían la incipiente informática:
59
Excelencia Académica
a) La utilización del sistema de numeración binario. Simplificaba enormemente los problemas que la implementación electrónica de las operaciones y funciones lógicas planteaban, a la vez proporcionaba una mayor inmunidad a los fallos (electrónica digital). b) Almacenamiento de la secuencia de instrucciones de que consta el programa en una ,memoria interna, fácilmente accesible, junto con los datos que referencia. De esta forma la velocidad de proceso experimenta un considerable incremento; recordemos que anteriormente una instrucción o un dato estaban codificados en una ficha en el mejor de los casos. Tomando como modelo las máquinas que aparecieron incorporando las anteriores características, el ordenador se puede considerar compuesto por las siguientes partes: -
La Unidad Central de Proceso.
-
La Memoria Interna.
-
Unidad de Entrada y Salida.
Realicemos a continuación una descripción de lo que se entiende por cada una de estas partes y cómo está relacionadas entre sí: La Unidad Central de Proceso (CPU) viene a ser el cerebro del ordenador y tiene por
-
misión efectuar las operaciones aritmético-lógicas y controlar las transferencias de información a realizar. La Memoria Interna: contiene el conjunto de instrucciones que ejecuta la CPU en el
-
transcurso de un programa. Es también donde se almacenan temporalmente las variables del mismo, todos los datos que se precisan y todos los resultados que devuelve. Unidades de Entrada y Salida (I/O): son las encargadas de la comunicación d ela
-
máquina con el exterior, proporcionando al operador una forma de introducir al ordenador tanto los programas como los datos y obtener los resultados. Como es de suponer, estas tres partes principales de que consta el ordenador deben estar íntimamente conectadas; aparece en este momento el concepto de bus: el bus es un conjunto de líneas que enlazan los distintos componentes del ordenador, por ellas se realiza la transferencia de datos entre todos sus elementos. Se distinguen dos tipos de bus:
60
Excelencia Académica
-
De Datos: De tipo bidireccional, fluyen los datos entre las distintas partes del ordenador.
-
De direcciones: Como vimos, la memoria está dividida en pequeñas unidades de almacenamiento que contienen las instrucciones del programa y los datos. El bus de direcciones consta de un conjunto de líneas que permite seleccionar de qué posición de la memoria se quiere leer su contenido. También direcciona los puertos de E/S.
Adicionalmente contamos con líneas de control que seleccionan desde dónde y hacia dónde va dirigida la información, también las que marcan la secuencia de los pasos a seguir para dicha transferencia. La forma de operar del ordenador en su conjunto es direccionar una posición de la memoria en busca de una instrucción mediante el bus de direcciones, llevar la instrucción a la unidad central de proceso –CPU- por medio de bus de datos, marcando la secuencia de la transferencia el bus de control. En la CPU la instrucción se decodifica, interpretando qué operandos necesita; si son de memoria, es necesario llevarles a la CPU; una vez que la operación es realizada, si es preciso se devuelve el resultado a la memoria. ARQUITECTURA VON NEWMAN. Un salto importante en la evolución de los ordenadores lo introdujo el microprocesador: se trata de una unidad central de proceso contenida totalmente en un circuito integrado. Esta formado por: -
Unidad aritmético-lógico: Es donde se efectúan las operaciones aritméticas (suma, resta y a veces producto y división) y lógicas (and, or, not, etc).
-
Decodificador de instrucciones : Allí se interpretan las instrucciones que van llegando y que componen el programa.
-
Bloque de Registros: Los registros son celdas de memoria en donde queda almacenado un dato temporalmente. Existe un registro especial llamado de Indicadores, estado o flags, que refleja el estado operativo del microprocesador.
-
Bloque de Control de buses internos y externos: supervisa todo el proceso de transferencias de información dentro del microprocesador y fuera de él.
6.3.
EL ENSAMBLADOR
El ensamblador es un lenguaje de programación que, por la traducción directa de los mnemónicos a instrucciones máquina, permite realizar aplicaciones rápidas, solucionando situaciones en los que los tiempos de ejecución constituye el factor principal para que le 61
Excelencia Académica
proceso discurra con la suficiente fluidez. Esta situación, que indudablemente se influye sobre la elección del lenguaje de programación a utilizar en el desarrollo de una determinada rutina, y dada la aparición de nuevos compiladores de lenguaje de alto nivel que optimizan el código generado a niveles muy próximos a los que un buen programador es capaz de realizar en ensamblador, no es la única razón para su utilización. Es sobradamente conocido que los actuales sistemas operativos son programados en su mayor parte en lenguajes de alto nivel, especialmente C, pero siempre hay una parte en la que el ensamblador se hace casi insustituible bajo DOS y es la programación de los Drivers para dos controladores de dispositivos, relacionados con la tareas de más bajo nivel de una máquina, fundamentalmente las operaciones de entrada/salida en las que es preciso actuar directamente sobre los demás chips que acompañan al microprocesador. EL ENSAMBLADOR En 1973, el centro de investigación de Xerox en Palo Alto desarrolló un equipo informático con el aspecto externo de un PC personal actual. Además de pantalla y teclado, disponía de un artefacto similar al ratón; en general, este aparato (denominado Alto) introdujo, mucho antes de que otros los reinventaran, algunos de los conceptos universalmente aceptados hoy en día. El desarrollo del primer microprocesador por Intel en 1971, el 4004 (de 4 bits), supuso el primer paso hacia el logro de un PC personal, al reducir drásticamente la circuitería adicional necesaria. Sucesores de este procesador fueron el 8008 y el 8080, de 8 bits. Ed Roberts construyó en 1975 el Altair 8800 basándose en el 8080; aunque esta máquina no tenía teclado ni pantalla (solo interruptores y luces), era una arquitectura abierta (conocida por todo el mundo) y cuyas tarjetas se conectaban a la placa principal a través de 100 terminales, que más tarde terminarían convirtiéndose en el bus estándar S-100 de la industria. El Apple-I apareció en 1976, basado en el microprocesador de 8 bits 6502, en aquel entonces un recién aparecido aunque casi 10 veces más barato que el 8080 de Intel. Fue sucedido en máximo de 48 Kbytes de memoria. El 12 de Agosto de 1981 IBM presentó el IBM PC. Estaba basado en el microprocesador 8088, de 16 bits. El equipamiento de serie consistía en 16 Kbytes de memoria ampliables a 64 en la placa base (y a 256 añadiendo tarjetas); el almacenamiento externo se hacía en cintas de casete, aunque pronto aparecieron las unidades de disco de 51/4 pulgadas y 62
Excelencia Académica
simple cara (160/180 Kb por disco) o doble cara (320/360 Kb). En 1983 apareció el IBM PCXT, que traía como novedad un disco duro de 10 Mbytes. Un año más tarde aparecía el IBM PC-AT, introduciendo el microprocesador 286, así como ranuras de expansión de 16 bits (el bus ISA de 16 bits) en contraposicón con las de 8 bits del PC y el XT (bus ISA de 8 bits), además incorporaba un disco duro de 20 Mbytes y diskete de 51/4 pero con 1.2 Mbytes. Alrededor del PC se estaba construyendo un imperio de software más importante que el propio hardware: estamos hablando del sistema operativo PC-DOS. Cuando aparecieron máquinas compatibles con el PC de IBM, tenían que respetar la compatibilidad con ese sistema, lo que fue sencillo (ya que Microsoft, le gustar o no a IBM, desarrolló MS-DOS, compatible con el PC-DOS pero que no requería la BIOS del ordenador original, cuyo copyright era de IBM). Incluso, el desarrollo de los microprocesadores posteriores ha estado totalmente condicionado por el MS-DOS. A partir de 1986, IBM fue paulatinamente dejando de tener la batuta del mercado del PC. La razón es que la propia IBM tenía que respetar la compatibilidad con el anterior, y en ese terreno no tenía más facilidades par innovar que la competencia. El primer problema vino con la aparición de los procesadores 386: los demás fabricantes se adelantaron a IBM y lanzaron máquinas con ranuras de expansión aún de 16 bits, que no permitían obtener todo el rendimiento. IBM desarrolló demasiado tarde, en 1987, la arquitectura Microchannel, con bus de 32 bits pero cerrada e incompatible con tarjetas anteriores (aunque se desarrollaron nuevas tarjetas, eran caras) y la incluyó en su gama de ordenadores PS/2 (alguno de cuyos modelos era aún realmente ISA). La insolente respuesta de la competencia fue la arquitectura EISA, también de 32 bits pero compatible con la ISA anterior. EISA también era caro, así que los fabricantes orientales, cruzada ya la barrera de los años 90, desarrollaron con la norma VESA las placas con bus local (VESA Local Bus); básicamente es una prolongación de las patillas de la CPU a las ranuras de expansión, lo que permite tarjetas rápidas de 32 bits pero muy conflictivas entre sí. Esta arquitectura de bus se popularizó mucho con los procesadores 486. Sin embargo, al final el estándar que se ha impuesto ha sido el propuesto por el propio fabricante de las CPU: Intel, con su bus PCI, que con el Pentium se ha convertido finalmente en el único estándar del bus de 32 bits. Estas máquinas aún admiten no obstante las viejas tarjetas ISA, suficientes para algunas aplicaciones de baja velocidad (modems,…etc).
63
Excelencia Académica
6.5.
LA EVOLUCIÓN DEL MS-DOS.
1981. presentación del MS-DOS 1.0 original.
1983. MS-DOS 2.0 introducido con el XT: reescritura del núcleo en C; mejoras en el sistema de ficheros (FAT, subdirectorios,…); separación de los controladores de dispositivo del sistema. 1984. MS-DOS 3.0: Añade soporte para disketes de 1.2M y discos duros de 20 Mb. No
sería necesaria una nueva versión del DOS para cada nuevo formato de disco si el controlador integrado para A:, B:, y C: lo hubieran hecho flexible algún día.
1985. MS-DOS 3.1: Soporte para redes locales.
1987. MS-DOS 3.3: Soporte para idsketes de 1.44M (31/2-HD). Permite particiones secundarias en los discos duros. Soporte Internacional: páginas de códigos. 1988. MS-DOS 4.0: soporte para discos duros de más de 32 Mb (cambio radical interno
que forzó la reescritura de muchos programas de utilidad) hasta 2Bb. Controlador de memoria EMM386. Precipitada salida al mercado. 19991. MS-DOS 5.0: Soporte para memoria superior.
6.6
MICROPROCESADORES 8086 88, 286, 386, 486 Y GENERACIÓN-PENTIUM.
CARACTERISTICAS GENERALES. El 8088 y 8086 poseen una arquitectura interna de 16 bits y pueden trabajar con operandos de 8 y 16 bits; una capacidad de direccionamiento de 20 bits (hasta un Mb) y comparten el mismo juego de instrucciones. La filosofía de diseño de la familia del 8086 se basa en la compatibilidad y la creación de sistemas informáticos integrados, por lo que disponen de diversos coprocesadores como el 8089 de E/S y el 8087, coprocesador matemático de coma flotante. De acuerdo a esta filosofía y para permitir la compatibilidad con los anteriores sistemas de 8 bits, el 8088 se diseñó con un bus de datos de 8 bits, lo cual le hace más lento que su hermano el 8086, pues éste es capaz de cargar una palabra ubicada en una dirección par en un solo ciclo de memoria mientras el 8088 debe realizar dos ciclos leyendo cada vez un byte. Dispones de 92 tipos de instrucciones, que pueden ejecutar con hasta 7 modos de direccionamiento. Tienen una capacidad de direccionamiento con puertos de entrada y salida de hasta 64K (65536 puertos), por lo que las máquinas construidas entorno a esos 64
Excelencia Académica
microprocesadores no suelen emplear la entrada/salida por mapa de memoria, como veremos. Entre estas instrucciones, las más rápidas se ejecutan en dos ciclos teóricos de reloj y unos 9 reales (se trata del movimiento de datos entre registros internos) y las más lentas en 206 (división entera con signo del acumulador por una palabra extraída de la memoria). Las frecuencias internas de reloj típicas son 4.77 MHz en la versión 8086; 8MHz en la versión 8086-2 y 10 MHz en la 8086-1. Recuérdese que un MHz son un millón de ciclos de reloj, por lo que un Pc estándar a 4.77 MHz puede ejecutar de 20.000 a unos 0.5 millones de instrucciones por segundo, según la complejidad de las mismas (un 486 a 50 MHz, incluso sin memoria caché externa es capaz de ejecutar entre 1.8 y30 millones de estas instrucciones por segundo). El microprocesador Intel 80286 se caracteriza por poseer dos modos de funcionamiento completamente diferenciados: el modo real en el que se encuentra nada más ser conectado a la corriente y el modo protegido en el que adquiere capacidad de proceso multitarea y almacenamiento en memoria virtual. El proceso multitarea consiste en realizar varios procesos de manera aparentemente simultánea, con la ayuda del sistema operativo para conmutar automáticamente de uno a otro optimizando el uso de la CPU, ya que mientras un proceso está esperando a que un periférico complete una operación, se puede atender otro proceso diferente. La memoria virtual permite al ordenador usar más memoria de la que realmente tiene, más memoria de la que realmente existe; cuando acceden a una parte de la memoria lógica que no existe físicamente, se produce una interrupción y el sistema operativo se encarga de acceder al disco y traerla. Cuando la CPU está en modo protegido, los programas de usuario tienen un acceso limitado al juego de instrucciones; sólo el proceso supervisor -normalmente el sistema operativoestá capacitado par realizar ciertas tareas. Esto es así para evitar que los programas de usuario puedan campar a sus anchas y entrar en conflictos unos con otros, en materia de recursos como memoria periféricos, Además, de esta manera, aunque un error software provoque el cuelgue de un proceso, los demás pueden seguir funcionando normalmente, y el sistema operativo podría abortar el proceso colgado. Por desgracia, con el DOS el 286 no está en modo protegido y el cuelgue de un solo proceso –bien el programa principal o una rutina operada por interrupciones- significa la caída inmediata de todo el sistema.
65
Excelencia Académica
El 8086 no posee ningún mecanismo para apoyar la multitarea ni la memoria virtual desde el procesador, por lo que es difícil diseñar un sistema multitarea para el mismo casi imposible conseguir que sea realmente operativo. Obviamente, el 286 en modo protegido pierde absolutamente toda la compatibilidad con los procesadores anteriores. Las características generales del 286 son: tiene un bus de datos de 16 bits, un bus de direcciones de 24 bits (16 Mb); posee 25 instrucciones más que el 8086 y admite 8 modos de direccionamiento. En modo virtual permite direccionar hasta 1 Gigadyte. Las frecuencias de trabajo típicas son de 12 y 16 MHz, aunque existen versiones de 20 y 25 MHz. Aquí la construcción más lenta es la misma que el caso de 8086, solo que emplea 29 ciclos de reloj en lugar de 206. Un 286 de categoría media (16MHz) podría ejecutar más de medio millón de instrucciones de estas en un segundo, casi 15 veces más que un 8086 medio a 8 MHz. Sin embargo, transfiriendo datos en el registro la diferencia de un procesador a otro se reduce notablemente, aunque el 286 es más rápido y no sólo gracias a los MHz adicionales. Por su parte, el 386 dispone de una arquitectura de registros de 32 bits, con un bus de direcciones también de 32 bits (direcciona hasta 4 Gigabytes = 4096 Mb) y más modos posibles de funcionamiento: el modo real (compatible 8086), el modo protegido (relativamente compatible con el del 286), un modo protegido propio que permite romper la barrera de los tradicionales segmentos y el modo “virtual 86”, en el que puede emular el funcionamiento simultáneo de varios 8086. Una vez más, todos los modos son incompatibles entre sí y requieren de un sistema operativo específico. Normalmente, los 386 suelen operar en modo real (debido al DOS) por lo que no se aprovechan las posibilidades multitarea ni de gestión de memoria. Por otra parte, aunque que puedan emplear los registros de 32 bits en modo real, ello no suele hacerse –para mantener la compatibilidad con procesadores anteriores- con lo que de entrada se está tirando a la basura un 50% de la capacidad de proceso del chip, aunque por fortuna estos procesadores suelen trabajar a frecuencias de 16/20 MHz (obsoletas) y normalmente de 33 y hasta 40 MHz. El 486 se diferencia del 386 en la integración en un solo chip del coprocesador 387. También se ha mejorado la velocidad de operación: la versión de 25 Mhz dobla en términos reales a un 386 a 25 MHz equipado con el mismo tamaño de memoria caché. La versión 486sx no se diferencia en el tamaño del bus, también de 32 bits, sino en la ausencia del 387 (que puede ser añadido externamente). Una tendencia iniciada por el 486 fue la de duplicar la velocidad del reloj interno (pongamos por caso de 33 MHz) aunque en las comunicaciones con los buses exteriores se respeten los 33 MHz. Ello agiliza la ejecución de las instrucciones más largas: bajo DOS, el rendimiento general del sistema se puede 66
Excelencia Académica
considerar prácticamente el doble. Son los chips DX2 (también hay una variante a 50 MHz: 25 x 2). La culminación de esta tecnología viene de la mano de los DX4 a 75/100 MHz (25/33 x 3). El Pentium, se diferencia respecto al 486 en el bus de datos (ahora de 64 bits, lo que agiliza los accesos a memoria) y en un elevadísimo nivel de optimización y segmentación que le permite, empleando compiladores optimizados, simultanear en muchos casos la ejecución de dos instrucciones consecutivas. Posee dos cachés internas, tiene capacidad para predecir el destino de los saltos y la unidad de coma flotante experimenta elevadas mejoras. Sin embargo, bajo DOS, un Pentium básico sólo es unas 2 veces más rápido que un 486 a la misma frecuencia de reloj. Comenzó en 60/90 MHz hasta los 166/200/233 MHz de las últimas versiones (Pentium Pro y MMX), que junto a diversos clones de otros fabricantes, mejoran aún más el rendimiento. Todos los equipos Pentium emplean las técnicas DX, ya que las placas base típicas corren a 60 MHz. Un equipo Pentium MMX a 200 MHz es cerca de 2000 veces más rápido en aritmética entera que el IBM PC original de inicios de la década de los 80; en coma flotante la diferencia aumenta incluso algunos órdenes más de magnitud. Aunque no hay que olvidar la revolución del resto de los componentes: 100 veces más memoria (central y de vídeo), 1000 veces más grande el disco duro. Una característica de los microprocesadores a partir del 386 es la disponibilidad de memorias caché de alta velocidad de acceso –muy pocos nanosegundos- que almacenan una pequeña porción de la memoria principal. Cuando la CPU accede a una posición de memoria, cierta circuitería de control se encarga de ir depositando el contenido de esa posición y el de las posiciones inmediatamente consecutivas en la memoria caché. Cuando sea necesario acceder a la instrucción siguiente del programa, ésta ya se encuentra en la caché y el acceso es muy rápido. Lo ideal sería que toda la memoria del equipo fuera caché, pero esto no es todavía posible actualmente. Una caché de tamaño razonable puede doblar la velocidad efectiva de proceso de la CPU. El 8088 carecía de memoria caché, pero si estaba equipado con una unidad de lectura adelantada de instrucciones con una cola de prebúsqueda de 4 bytes: de esta manera, se agilizaba ya un tanto la velocidad de proceso al poder ejecutar una instrucción al mismo tiempo que iba leyendo la siguiente.
67
Excelencia Académica
El Microprocesador dispone de una arquitectura de registros con un bus de direcciones con un funcionamiento en modo real y modo protegido todos los microprocesadores permite romper la barrera de los tradicionales segmentos y el modo “virtual 86”, en el que puede emular el funcionamiento simultáneo de varios 8086. Una vez más, todos los modos son incompatibles entre sí y requieren de un sistema operativo específico.
*. GRANADOS LY ALFREDO Microprocesadores y Lenguaje Assembler INICTEL PERU Año 2001. *. BARRY B. BREY Los microprocesadores Intel Edit Prentice may Hispanoamericana S. A. Tercera Edición Méjico Año 1996 *. Peter Norton, Richard Wilton Guia del Programador EL IBM PC y PS/2 ANAYA Multimedia Segunda Edición Madrid Año 1990
68
1.
Explique las diferencias de las arquitecturas del computador.
2.
Como fue el desarrollo del microprocesador desde sus inicios hasta la actualidad.
3.
Cual es la función del sistema operativo en el computado.
4.
Que función cumple el ensamblador.
Excelencia Académica
EL PROCESADOR Los procesadores disponen de registros, la misión de estos registros es almacenar las posiciones de memoria donde se van a almacenar datos. No todos los registros sirven para almacenar datos, algunos está especializados en apuntar a las direcciones de memoria y la función de los programas consiste en cargar los registros con datos de la memoria o de un puerto de E/S, para ser procesados los datos y devolver el resultado a la memoria,
-
Analiza el proceso que realiza el microprocesador.
-
Explica el funcionamiento de las banderas y de las interrupciones.
-
Conoce el funcionamiento de los periféricos.
7.1.
REGISTROS DEL 80X86 Y DEL 80286. Estos procesadores disponen de 14 registros de 16 bits (el 286 alguno má, pero no
se suele emplear bajo el DOS). La misión de estos registros es almacenar las posiciones de memoria que van a experimentar repetidas manipulaciones, ya que los accesos a memoria son mucho más lentos que los accesos a los registros. No todos los registros sirven para almacenar datos, algunos está especializados en apuntar a las direcciones de memoria. La mecánica básica de funcionamiento de un programa consiste en cargar los registros con datos de la memoria o de un puerto de E/S, procesar los datos y devolver el resultado a la memoria o a otro puerto de E/S. Obviamente, si un dato sólo va a experimentar un cambio, es preferible realizar la operación directamente sobre la memoria, si ello es posible. A continuación se describen los registros del 8086. 7.2.
Registros de los datos:
AX,BX,CX,DX; pueden utilizarse bien como registros de 16 bits o como dos registros separados de 8 bits (byte superior e inferior) cambiando la X por H o L según queramos 69
Excelencia Académica
referirnos a la parte alta o baja respectivamente. Por ejemplo, AX se descompone en AH (parte alta) y AL (parte baja). Evidentemente, ¡cualquier cambio sobre AH o AL altera AX!: valga como ejemplo que al incrementar AH se le está añadiendo 256 unidades a AX. AX = Acumulador: es el registro principal, es utilizado en las instrucciones de multiplicación y división y en algunas instrucciones aritméticas especializadas, así como en ciertas operaciones de carácter específico como entrada, salida y traducción. Obsérvese que el 8086 es suficientemente potente para realizar las operaciones lógicas, la suma y la resta sobre cualquier registro de datos, no necesariamente el acumulador. BX = Base: se usa como registro base para referenciar direcciones de memoria con direccionamiento indirecto, manteniendo la dirección de la base o comienzo de tablas o matrices. De esta manera, no es preciso indicar una posición de memoria fija, sino la número BX (así, haciendo avanzar de unidad en unidad a BX, por ejemplo, se puede ir accediendo a un gran bloque de memoria en un bucle). CX = Contador: Se utiliza comúnmente como contador en bucles y operaciones repetitivas de manejo de cadenas. En las instrucciones de desplazamiento y rotación se utiliza como contador de 8 bits. DX = Datos: Usado en conjunción con AX en las operaciones de multiplicación y división que involucran o generan datos de 32 bits. En las de entrada y salida se emplea para especificar la dirección del puerto E/S. 7.3.
REGISTROS DE SEGMENTO:
Definen áreas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. Estas áreas pueden solaparse total o parcialmente. No es posible acceder a una posición de memoria no definida por algún segmento: si es preciso, habrá de moverse alguno. CS = Registro de segmento de código (code segment): Contiene la dirección del segmento con las instrucciones del programa. Los programas de más de 64 Kb requieren cambiar CS periódicamente. DS = Registro de segmento de datos (data segment): Segmento del área de datos del programa. SS = Registro de segmento de pila (stack segment): Segmento de pila.
70
Excelencia Académica
ES = Registro de segmento extra (extra segment): Segmento de ampliación para zona de datos. Es extraordinariamente útil actuando en conjunción con DS: con ambos se puede definir dos zonas de 64 Kb, tan alejadas como se desee en el espacio de direcciones, entre las que se pueden intercambiar datos. Registros punteros de pila: SP = Puntero de pila (stack pointer): Apunta a la cabeza de la pila. Utilizado en las instrucciones de manejo de pila. BP = Puntero base (base pointer): Es un puntero de base, que apunta a una zona dentro de la pila dedicada al almacenamiento de datos (variables locales y parámetros de las funciones en los programas compilados). 7.4.
REGISTROS ÍNDICES:
SI = Índice fuente (source index): utilizado como registro de índice en ciertos modos de direccionamiento indirecto, también se emplea para guardar un valor de desplazamiento en operaciones con cadenas. DI = Índice destino (destination index): Seusa en determinados modos de direccionamiento indirecto y para almacenar un desplazamiento en operaciones de cadenas. Puntero de Instruc ciones o contador de programa: IP = Puntero de instrucción (Instrucción pointer): Marca el desplazamiento de la
instrucción en curso dentro del segmento de código. Es automáticamente modificado con la lectura de una instrucción. Registro de estado o de indicadores (flags). Es un registro de 16 bits de los cuales 9 son utilizados para indicar diversas situaciones durante la ejecución d eun programa. Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condición, que reflejan los resultados de operaciones del programa; los bits del 8 al 10 son indicadores de control y el resto no se utilizan. Estos indicadores pueden ser comprobados por las
71
Excelencia Académica
instrucciones de salto condicional, lo que permite variar el flujo secuencial del programa según el resultado de las operaciones. CF (Carry Flag): Indicador de acarreo. Su valor más habitual es lo que nos llevamos en
una suma o resta. OF (Overflow Flag): Indicador de desbordamiento. Indica que el resultado de una
operación no cabe en el tamaño del operando destino.
ZF (Zero Flag): Indicador de resultado 0 o comparación igual.
SF (Sign Flag): Indicador de resultado o comparación negativa.
PF (Parity Flag):Indicador de paridad. Se activa tras algunas operaciones aritméticológicas para indicar que el número de bits a uno resultante es par.
AF (Auxiliary Flag): Para ajuste en operaciones BCD.
DF (Direction Flag): Indicador de dirección. Manipulando bloques de memoria, indica el sentido de avance (ascendente/descendente).
IF (Interrupt Flag): Indicador de interrupciones: puesto a 1 están permitidas.
TF (Trap Flag): Indicador de atrape (ejecución paso a paso).
7.5.
REGISTROS DEL 386 Y PROCESADORES SUPERIORES
Los 386 y superiores disponen de muchos más registros de los que vamos a ver ahora. Sin embargo, bajo el sistema operativa DOS sólo se suelen emplear los que veremos, que constituyen básicamente una extensión a 32 bits de los registros originales del 8086. Se amplía el tamaño de los registros de datos (que pueden ser accedidos en fragmentos de 8, 16 ó 32 bits) y se añaden dos nuevos registros de segmento multipropósito (FS y GS). Algunos de los registros aquí mostrados son realmente de 32 bits (como EIP en vez de IP), pero bajo sistema operativo DOS no pueden ser empleados de manera directa, por lo que no les consideraremos. 7.6.
ORGANIZACIÓN DE DIRECCIONES: SEGMENTACIÓN.
Como ya sabemos, los microprocesadores 8086 y compatibles poseen registros de un tamaño máximo de 16 bits que direccionarían hasta 64K; en cambio, la dirección se compone de 20 bits con capacidad para 1Mb, hay por tanto que recurrir a algún artificio para direccionar toda la memoria. Dicho artificio consiste en la segmentación: se trata de dividir la 72
Excelencia Académica
memoria en grupos de 64K. Cada grupo se asocia con un grupo de segmento; el desplazamiento (offset) dentro de ese segmento lo proporciona otro registro de 16 bits. la dirección absoluta se calcula multiplicando por 16 el valor del registro de segmento y sumando el offset, obteniéndose una direccción efectiva de 20 bits. Esto equivale a concebir el mecanismo de generación de la dirección absoluta, como si se tratase de que los registros de segmento tuvieron 4 bits a 0 (imaginarios) a la derecha antes de sumarles el desplazamiento: Dirección = segmento * 16 + offset En la práctica, una dirección se indica con la notación SEGMENTO: OFFSET; además, una misma dirección puede expresarse de más de una manera: por ejemplo, 3S00h:0300h es equivalente a 3D30: 0000h. Es importante resaltar que no se puede acceder a más de 64 Kb en un segmento de datos. Por ello, en los procesadores 386 y superiores no se deben emplear registro de 32 bit para generar direcciones (bajo DOS), aunque para los cálculos pueden ser interesantes (no obstante, si sería posible configurar estos procesadores para poder direccionar más memoria bajo DOS con los registros de 32 bits, aunque no resulta por lo general práctico). 7.7
MODOS DE DIRECCIONAMIENTO. Son los distintos modos de acceder a los datos en memoria por parte del procesador.
Antes de ver los modos de direccionamiento, echaremos un vistazo a la sintaxis general de las instrucciones, ya que pondremos alguna en los ejemplos: INSTRUCCIÓN DESTINO, FUENTE Donde destino indica dónde se deja el resultado de la operación en la que pueden participar (según casos) FUENTE e incluso el propio DESTINO. Hay instrucciones, sin embargo, que sólo tiene un operando, como la siguiente, e incluso ninguno: INSTRUCCIÓN DESTINO Como ejemplos, aunque no hemos visto aún las instrucciones utilizaremos un para de ellas: la de copia o movimiento de datos (MOV) y la de suma (ADD).
73
Excelencia Académica
Direccionamiento inmediato: el operando es una constante situada detrás del código de la instrucción. Sin embargo, como registro destino no se puede indicar uno de segmento (habrá que utilizar uno de datos como paso intermedio). ADD AX,0FFFFh El número hexadecimal 0fffh es la constante numérica que en el direccionamiento inmediato se le sumará al registro AX. Al trabajar con ensambladores, se pueden definir símbolos constantes (ojo, no variables) y es más intuitivo: Dato EQU 0fffh
; símbolo constante
MOV AX, dato Si se referencia a la dirección de memoria de una variable de la siguiente forma, también se trata de un caso de direccionamiento inmediato: Dato DW 0fffh
; ahora es una variable
MOV AX, OFFSET dato
;AX = “dirección de mmoria” de dato
Porque hay que tener en cuenta que cuando traduzcamos a números el símbolo podría quedar: 17F3: 0A11 DW FFF MOV AX,0A11 Direccionamiento de registro: Los operandos, necesariamente de igual tamaño, está contenidos en los registros indicados en la instrucción: MOV DX,AX MOV AH,AL Direccionamiento directo o absoluto: EL operando está situado en la dirección indicada en la instrucción, relativo al segmento que se trate: MOV AX,[57D1h] 74
Excelencia Académica
MOV AX,ES:[429Ch] Esta sintaxis (quitando la ‘h’ de hexadecimal) sería la suma que admite el programa DEBUG (realmente habría que poner, en el segundo caso, ES: en una línea y el MOV en otra). Al trabajar con ensambladores, las variables en memoria se pueden referenciar con etiquetas simbólicas: MOV AX,dato MOV AX,ES:dato Dato DW
1234h variable del programa
En el primer ejemplo se transfiere a AX el valor contenido en la dirección apuntada por la etiqueta dato sobre el segmento de datos (DS) que se asume por defecto; en el segundo ejemplo se indica de forma explícita el segmento tratándose del segmento ES. La dirección efectiva se calcula de la forma ya vista con anterioridad: Registro de Segmento * 16 + desplazamiento_de_dato (este desplazamiento depende de la posición al ensamblar el programa). Direccionamiento indirecto: el operando se encuentra en una dirección señalada por un registro de segmento* 16 mas un registro base (BX/BP) o índice (SI/DI). (Nota: BP actúa por defecto con SS). MOV AX,[BP]
;AX = [SS* 16 + BP]
MOV ES,[DI],AX
;[ES* 16 + DI] = AX
Indirecto con índice o indexado: el operando se encuentra en una dirección determinada por la suma de un registro de segmento* 16, un registro de índice, SI o DI y un desplazamiento de 8 ó 16 bits. Ejemplo: MOV AX,[DI + DESP]
ó
MOV AX,desp[DI]
ADD [SI + DESP],BX
ó
ADD
desp[SI],BX
75
Excelencia Académica
Indirecto con base e índice o indexado a base: el operando se encuentra en una dirección específica por la suma de un registro de segmento* 16, uno de base, uno de índice y opcionalmente un desplazamiento de 8 ó 16 bits: MOV AX,ES:[BX + DI + DESP]
ó
MOV AX,ES:desp[BX][DI]
MOV CS:[BX + SI + DESP],CX
ó
Mov
7.8
CS:desp[BX][SI],CX
COMBINACIONES DE REGISTROS DE SEGMENTO Y DESPLAZAMIENTO.
Como se ve en los modos de direccionamiento, hay casos en los que se indica explícitamente el registro de segmento a usar para acceder a los datos. Existen unos segmentos asociados por defecto a los registros a de desplazamiento (IP, SP, BP, BX, DI, SI); sólo es necesario declarar el segmento cuando no coincide con el asignado por defecto. En este caso, el ensamblador genera un byte adicional (a modo de prefijo) para indicar cuál es el segmento referenciado. La siguiente tabla relaciona las posibles combinaciones de los registros de segmento y los de desplazamiento: CS
SS
DS
ES
IP
Sí
No
No
No
SP
No
Sí
No
No
BP
Con prefijo
Por defecto
Con prefijo
Con prefijo
BX
Con prefijo
Con prefijo
Por defecto
Con prefijo
SI
Con prefijo
Con prefijo
Por defecto
Con prefijo
DI
Con prefijo
Con prefijo
Por defecto
Con prefijo(1)
(1) También por defecto en el manejo de cadenas Los 386 y superiores admiten otros modos de direccionamiento más sofisticados, que se verán en el p´roximo capítulo, después de conocer todas las instrucciones del 8086. Por ahora,con todos estos modos se puede considerar que hay más que suficiente. De hecho, algunos se utilizan en muy contadas ocaciones. 7.8
LA PILA.
La pila es un bloque de memoria de estrucctura LIFO (Last Input First Ouput: último en entrar y primero en salir) que se direcciona mediante desplazamientos desde el registro SS 76
Excelencia Académica
(segmento de pila). Las posiciones individuales dentro de la pila se calculan sumando el contenido de segmento de pila SS un desplazamiento contenido en el registro puntero de pila SP. Todos los datos que se almacenan en la pila son de longitud palabra, y cada vez que se introduce algo en ella por medio de las instrucciones de manejo depila (PUSH y POP), el puntero se decrementa en dos; es decir, la pila avanza hacia direcciones decrecientes. El registro BP suele utilizarse normalmente para apuntar a una cierta posición de la pila y acceder indexadamente a sus elementos –generalmente en el caso de variablessin necesidad de desapilarlos para consultarlos. La pila es utilizada frecuentemente al principio de una subrutina para preservar los registros que no se desean modificar; al final de la subrutina basta con recuperarlos en orden inverso al que fueron depositados. En estas operaciones conviene tener cuidado, ya que la pila en los 8086 es común al procesador y al usuario, por lo que se almacenan en ella también las direcciones de retorna de las subrutinas. Esta última es, de hecho, la más importante de sus funciones. La estructura de pila permite que unas subrutinas llamen a otras que a su vez pueden llamar a otras y así sucesivamente: en la pila se almacenan las direcciones de retorno, que serán las de la siguiente instrucción que provocó la llamada a la subrutina. Así, al retornar de la subrutina se extrae de la pila la dirección a donde volver.
Los compiladores de los lenguajes de alto nivel la emplean también para pasar los parámetros de los procedimientos y para generar en ella las variables automáticas – Variables locales que existen durante la ejecución del subprograma y se destruyen inmediatamente después - Por ello, una norma básica es que se debe desapilar siempre todo lo apilado para evitar una pérdida de control inmediata del ordenador.
*. GRANADOS LY ALFREDO PERU Año 2001.
Microprocesadores y Lenguaje Assembler
INICTEL
77
Excelencia Académica
*. BARRY B. BREY Los microprocesadores Intel Edit Prentice may Hispanoamericana S. A. Tercera Edición Méjico Año 1996 *. MIGUEL ANGEL ROSELLO 8088-80x86 / 8087Programacion ENSAMBLADOR en entorno DOS ANAYA Multimedia Primera Edición Méjico Año 1990
1.- Diferencias entre memorias RAM dinámica y RAM estática, de algunos ejemplos de cada uno y describa sus características técnicas y aplicaciones. 2.- Cual es la función de los CHIP-SET del norte y del sur en los computadores cual de ellos determina el tipo de placa madre. 3.- Cuales son las funciones básicas en una PC del Microprocesador, Memoria principal y Puerto 4.- La computadora trabaja en modo Real y modo Protegido, defina cada uno. 5.- Como se genera una Dirección Física.
78
Excelencia Académica
RESUMEN DE LAS INSTRUCCIONES Y BANDERINES Hasta ahora se ha visto las instrucciones que pasadas a su correspondiente código binario que entiende el microprocesador. Se realiza un gran avance al introducir los mnemónicos respecto a programar directamente en lenguaje máquina aún así resultaría tedioso tener que realizar los cálculos de los desplazamientos en los saltos a otras partes del programa en las transferencias de control.
-
Interpreta las diferentes instrucciones en lenguaje de bajo nivel.
-
Desarrolla programas en un lenguaje de bajo nivel.
-
Se familiariza con los códigos maquina mas usados.
8.1
RESUMEN DE LAS INSTRUCCIONES
Nota : En el efecto de las instrucciones sobre el registro de estado se utilizará la siguiente notación: -
bit no modificado
?
desconocido o indefinido
x
modificado según el resultado de la operación
1
puesto siempre a 1
0
puesto siempre a 0
Instrucción
Sintaxis
AAA AAD AAM AAS ADC dst,fnt ADD dst,fnt AND dst,fnt
AAA AAD AAM AAS ADC dst,fnt ADD dst,fnt AND dst,fnt
O ? ? ? ? x x 0
D -
I -
T -
S ? x x ? x x x
Z ? x x ? x x x
A X ? ? x x x ?
P ? x x ? x x x
C X ? ? x x x 0 79
Excelencia Académica
CALL dsp CBW CLC CLD CLI CMC CMP dst,fnt CMPS/CMPSB CMPSW cdst,cfnt CWD DAA DAS DEC dst DIV fnt ESC opcode,fnt HLT IDIV fnt IMUL fnt IN acum,port INC dst INT interrup INTO IRET Jcc (JA,JBE…) JMP JCXZ dsp LAHF LDS dst, fnt LEA dst, fnt LES dst, fnt LOCK LODS/LODSB/ LODSW cfnt LOOP LOOPcc (LOOPE..) MOV dst, fnt MOVS/MOVSB/ MOVSW cdst, cfnt MUL fnt NEG dst NOP NOT dst OR dst, fnt OUT port,acum POP DST POPF PUSH dst PUSHF RCL dst, cnt RCR dst, cnt REP/REPE/REPZ/ REPNE/REPNZ RET [val] 80
CALL dsp CBW CLC CLD CLI CMC CMP dst,fnt
x
0 -
0 -
-
x
x
x
x
0 x x
CMPSW cdst,cfnt CWD DAA DAS DEC dst DIV fnt ESC opcode,fnt HLT IDIV fnt IMUL fnt IN acum,port INC dst INT interrup INTO IRET Jcc dsp JMP dsp JCXZ dsp LAHF LDS dst, fnt LEA dst, fnt LES dst, fnt LOCK
x ? x ? ? x x x -
x -
0 0 x -
0 0 x -
x x x x ? ? ? x x -
x x x x ? ? ? x x -
x x x x ? ? ? x x -
x x x x ? ? ? x x -
x x x ? ? x x -
LODS mem LOOP dsp LOOPcc dsp MOV dst, fnt
-
-
-
-
-
-
-
-
-
MOVS cdst, cfnt MUL fnt NEG fst NOP NOT dst OR dst, fnt OUT port,acum POP DST POPF PUSH dst PUSHF RCL dst, cnt RCR dst, cnt
X X 0 X X X
X -
X -
X -
? X X X -
? X X X -
? X ? X -
? X X X -
X X 0 X X X
REP RET [val]
- - - - - - - - - - - - - - - - -
Excelencia Académica
RETF [val] ROL dst, cnt ROP dst, cnt SAHF SAL/SHL dst, cnt SAR dst, cnt SBB dst, fnt SCAS/SCASB/ SCASW cdst SHR dst, cnt STC STD STI STOS/STOSB/ STOSW cdst SUB dst, fnt TEST dst, fnt WAIT XCHG dst, fnt XLAT tfnt XOR dst, fnt
8.2
RETF [val] ROL dst, cnt ROP dst, cnt SAHF SAL dst, cnt SAR dst, cnt SBB dst, fnt
X X X X X
-
-
-
X X X X
X X X X
X X X X X X
SCAS cdst SHR dst, cnt STC STD STI
X X -
1 -
- - X X X X - - X X ? X - - - - - - 1 - - - -
X X 1 -
STOS cdst SUB dst, fnt TEST dst, fnt WAIT XCHG dst, fnt XLAT tfnt XOR dst, fnt
X 0 0
-
-
X 0 0
X X X
X X X X
X X X
X ? ? X
X ? ?
X X X
EL LENGUAJE ENSAMBLADOR DEL 80X86 Hasta ahora hemos visto los mnemónicos de las instrucciones que pasadas a su
correspondiente código binario ya puede entender el microprocesador. Si bien se realiza un gran avance al introducir los mnemónicos respecto a programar directamente en lenguaje máquina – es decir, con números en binario o hexadecimal- aún resultaría tedioso tener que realizar los cálculos de los desplazamientos en los saltos a otras partes del programa en las transferencias de control, reservar espacio de memoria dentro de un programa para almacenar datos, etc... Para facilitar estas operaciones se utilizan las directivas que indican al ensamblador qué debe hacer con las instrucciones y los datos . 8.3.
SINTAXIS DE UNA LÍNEA EN ENSAMBLADOR.
Un programa fuente en ensamblador contiene dos tipos de sentencias: las instrucciones y las directivas. Las instrucciones se aplican en tiempo de ejecución, pero las directivas sólo son utilizadas durante el ensamblaje. El formato de una sentencia de instrucción es el siguiente: [etiqueta] nombre_instrucción [operandos] [ comentario] 81
Excelencia Académica
Los corchetes, como es normal al explicar instrucciones en informática, indican que loo especificado entre ellos es opcional, dependiendo de la situación que se trate. Campo de etiqueta. Es el nombre simbólico de la primera posición de una instrucción, puntero o dato. Consta de hasta 31 caracteres que pueden ser las letras de la A a la Z, los números del 0 al 9 y algunos caracteres especiales como «@», «_»,«.», y «$». Reglas: -
Si se utiliza el punto «.» éste debe colocarse como primer carácter de la etiqueta.
-
El primer carácter no puede ser un dígito.
No se pueden utilizar los nombres de instrucciones o registros como nombres de etiquetas. Las etiquetas son de tipo NEAR cuando el campo de etiqueta finaliza con dos puntos (:); esto es, se considera cercana: quiere esto decir que cuando realizamos una llamada sobre dicha etiqueta el ensamblador considera que está dentro del mismo segmento de código (llamadas intrasegmento) y el procesador sólo carga el puntero de instrucciones IP. Téngase en cuenta que hablamos de instrucciones; las etiquetas empleadas antes de las directivas como las directivas de definición de datos por ejemplo, no llevan los dos puntos y sin embargo no son cercanas. Las etiquetas son de tipo FAR si el campo de etiqueta no termina con los dos puntos: en estas etiquetas la instrucción a la que apunta no se encuentra en el mismo segmento de código sino en otro. Cuando es referenciada en una transferencia de control se carga el puntero de instrucciones IP y el segmento de código CS (llamadas intersegmento). Campo de nombre. Contiene en mnemónico de las instrucciones, o bien una directiva. Campo de operandos. Indica cuales son los datos implicados en la operación. Puede haber 0 , 1 ó 2; en el caso de que sean dos al 1° Se le llama destino y al 2° -separado por una coma- fuente. mov ax, es: [di]
--->
ax
destino
es: [di] origen
82
Excelencia Académica
Campo de comentarios. Cuando en una línea hay un punto y coma (;) todo lo que sigue en la línea es un comentario que realiza aclaraciones sobre lo que se está haciendo en ese programa, resulta de gran utilidad de cara a realizar futuras modificaciones al mismo. 8.4
CONSTANTES Y OPERADORES. Las sentencias fuente –tanto instrucciones como directivas- pueden contener
constantes y operadores. CONSTANTES: Pueden ser binarias (ej. 10010b), decimales (ej. 34d), hexadecimales (ej. 0E0h) u octales (ej. 21 ó 21q); también las hay de cadena (ej. 'pepe', “juan”) e incluso con comillas dentro de comillas de distinto tipo (como 'hola,”amigo”'). En las hexadecimales, si el primer dígito no es numérico hay que poner un 0. Sólo se puede poner el signo (-) en las decimales (en las demás, calcúlese el complemento a dos). Por defecto, las numéricas están en base 10 si no se indica lo contrario con una directiva (poco recomendable como se verá). OPERADORES ASIMÉTRICOS. Pueden emplearse libremente (+), (-), (*) y (/) –en este último caso la división es siempre entera-. Es válida, por ejemplo, la siguiente línea en ensamblador (que se apoya en la directiva DW, que se verá más adelante, para reservar memoria para una palabra de 16 bits): dato
DW
12*(número+65)/7
También se admiten los operadores MOD (resto de la división) y SHL/SHR (desplazar a la izquierda /derecha cierto número de bits). obviamente, el ensamblador no codifica las instrucciones de desplazamiento (al aplicarse sobre datos constantes el resultado se calcula en tiempo de ensamblaje): dato
DW
(12 SHR 2) + 5
OPERADORES LÓGICOS.
83
Excelencia Académica
Puede ser el AND, OR, XOR y NOT. Realizan las expresiones lógicas en las expesiones. Ej.: MOV BL, (255 AND 128) XOR 128 ; BL = 0 8.5
OPERADORES RELACIONALES.
Devuelven condiciones de cierto (0FFFFh ó 0FFh) o falso (0) evaluando una expresión. Pueden ser: EQ (igual), NE (no igual), LT (menor que), GT (mayor que), LE (menor o igual que), GE (mayor o igual que). Ejemplo: dato
EQU 100
: «dato» vale 100
MOV
AL,dato GE 10
: AL = 0FFh (cierto)
MOV
AH,dato EQ 99
: AH = 0 (falso)
8.6.
OPERADORES DE RETORNO DE VALORES.
Operador SEG: devuelve el valor del segmento de la variable o etiqueta, sólo se puede emplear en programas de tipo EXE: MOV AX,SEG tabla_datos Operador OFFSET: devuelve el desplazamiento de la variable o etiqueta en su
segmento: MOV AX,OFFSET variable Si se desea obtener el offset de una variable respecto al grupo (directiva GROUP) de segmentos en que está definida y no respecto al segmento concreto en que está definida: MOV AX,OFFSET nombre_grupo:variable También es válido: MOV AX,OFFSET DS:variable Operador .TYPE: devuelve el modo de la expresión indicada en un byte. El bit 0 indica modo «relativo al código» y el 1 modo«relativo a datos », si ambos bits están inactivos significa modo absoluto. El bit 5 indica si la expesión es local (0 si está definida externamente o indefinida); el bit 7 indica si la expresión contiene una referencia externa. El TASM utiliza también el bit 3 para indicar algo que desconozco. Este operador es útil sobretodo en las macros para determinar el tipo de los parámetros: 84
Excelencia Académica
info
.TYPE variable
Operador TYPE: devuelve el tamaño (bytes) de la variable indicada. No válido en variables DUP: kilos
DW
76
MOV AX,TYPE kilos
; AX = 2
Tratándose de etiquetas –en lugar de variables- indica si es lejana o FAR (0FFFEh) o cercana o NEAR (OFFFFh). Operadores SIZE y LENGHT: devuelven el tamaño (en bytes) o el nº de elementos, respectivamente, de la variable indicada (definida obligatoriamente con DUP): matriz DW 100 DUP (12345) MOV AX,SIZE matriz
; AX = 200
MOV BX,LENGTH matriz
; BX = 100
Operqadores MASK y WITH: informan de los campos de un registro de bits (véase RECORD). 8.7.
OPERADORES DE ATRIBUTOS.
Operador PTR: redefine el atributo de tipo (BITE, WORD, DWORD, QWORD, TBYTE) o el de distancia (NEAR o FAR) de un operando de memoria. Por ejemplo, si se tiene una tabla definida de la siguiente manera: Tabla
DW
10 DUP (0)
; 10 palabras a 0
Para colocar en AL el primer byte de la misma, la instrucción MOV AL,tabla es incorrecta, ya que tabla (una cadena 10 palabras) no cabe en el registro AL. Lo que desea el programador debe indicárselo en este caso explícitamente al ensamblador de la siguiente manera: MOV AL,BYTE PTR tabla Trabajando con varios segmentos, PTR puede redefinir una etiqueta NEAR de uno de ellos para convertirla en FAR desde el otro, con objeto de poder llamarla. 85
Excelencia Académica
Operadores CS:, DS:, ES:, y SS: el ensamblador genera un prefijo de un byte que indica al microprocesador el segmento que debe emplear para acceder a los datos en memoria. Por defecto, se supone DS para los registros BX, DI o SI (o sin registros de base o índice) y SS para SP y BP. Si al acceder a un dato éste no se encuentra en el segmento por defecto, el ensamblador añadirá el byte adicional de manera automática. Sin embargo, el programador puede forzar también esta circunstancia: MOV AL,ES:variable En el ejemplo, variable se supone ubicada en el segmento extra. Cuando se referencia una dirección fija hay que indicar el segmento, ya que el ensamblador no conoce en qué segmento está la variable, es uno de los pocos casos en que debe indicarse. Por ejemplo, la siguiente línea dará un error al ensamblar: MOV AL,[0] Para solucionarlo hay que indicar en qué segmento está el dato (incluso aunque éste sea DS): MOV AL,DS:[0] En este último ejemplo el ensamblador no generará el byte adicional ya que las instrucciones MOV operan por defecto sobre DS (como casi todas), pero ha sido necesario indicar DS para que el ensamblador nos entienda. Sin embargo, en el siguiente ejemplo no es necesario, ya que midato está declarado en el segmento de datos y el ensamblador lo sabe: MOV AL,midato Por lo general no es muy frecuente la necesidad de indicar explícitamente el segmento: al acceder a una variable el ensamblador mira en qué segmento está declarada (véase la directiva SEGMENT) y según como estén asignados los ASSUME, pondrá o no el prefijo adecuado según sea conveniente. Es responsabilidad exclusiva del programador inicializar los registros de segmento al principio de los procedimientos para que el ASSUME no se quede en tinta mojada... si se emplean con bastante frecuencia, sin embargo, los prefijos CS en las rutinas que gestionan interrupciones (ya que CS es el único registro de segmento que apunta en principio a las mismas, hasta que se cargue DS u otro).
86
Excelencia Académica
Operador SHORT: indica que la etiqueta referenciada, de tipo NEAR, puede alcanzarse con un salto corto (-128 a +127 posiciones) desde la actual situación del contador de programa. El ensamblador TASM, si se solicitan dos pasadas, coloca automáticamente instrucciones SHORT allí donde es posible, para economizar memoria (el MASM no). Operador ‘$’: indica la posición del contador de posiciones («Location Counter») utiliado por el ensamblador dentro del segmento para llevar la cuenta de por dónde se llega ensamblando. Muy útil: frase longitud
DB
“simpático”
EQU $-OFFSET frase
En el ejemplo, longitud tomará el valor 9. Operadores HIGH y LOW: devuelven la parte alta o baja, respectivamente (8 bits) de la expresión: Dato EQU 1025
8.8
MOV AL,LOW dato
; AL = 1
MOV AH,HIGH dato
; AH = 4
PRINCIPALES DIRECTIVAS.
La sintaxis de una sentencia directiva es muy similar a la de una sentencia de instrucción: [nombre] nombre_directiva [operandos] [comentario] Sólo es obligatorio el campo «nombre_directiva»; los campos han de estar separados por al menos un espacio en blanco. La sintaxis de «nombre» es análoga a la de la «etiqueta» de las líneas de instrucciones, aunque nunca se pone el sufijo «:». El campo de comentario cumple también las mismas normas. 8.9
DIRECTIVAS DE DEFINICIÓN DE DATOS.
DB (definir byte), DW (definir palabra), DD (definir doble palabra), DQ (definir cuádruple palabra), DT (definir 10 bytes): sirven para declarar las variables, asignándolas un valor inicial: 87
Excelencia Académica
anno
DW
1991
mes
DB
12
numerazo
DD
12345678h
texto
DB
“Hola”,13,10
Se pueden definir números reales de simple precisión (4 bytes) con DD, de doble precisión (8 bytes) con DQ y «reales temporales» (10 bytes) con DT; todos ellos con el formato empleado por el procesador. Para que el ensamblador interprete el número como real ha de llevar el punto decimal: temperatura DD
29.72
espanoles91 DQ
38.9E6
Con el operando DUP pueden definirse estructuras repetitivas, Por ejemplo, para asignar 100 bytes a cero y 25 palabras de contenido indefinido (no importa lo que el ensamblador asigne): ceros
DB 100 DUP (0)
basura
DW
25 DUP (?)
Se admiten también los anidamientos. El siguiente ejemplo crea una tabla de bytes donde se repite 50 veces la secuencia 1,2,3,7,7: tabla 8.10
DB
50 DUP (1, 2, 3, 2 DUP (7))
DIRECTIVAS DE DEFINICIÓN DE SÍMBOLOS.
EQU (EQUivalence): Asigna el valor de una expresión a un nombre simbólico fijo:
olimpiadas EQU
2000
Donde olimpiadas ya no podrá cambiar de valor en todo el programa. Se trata de un operador muy flexible. Es válido hacer:
88
Excelencia Académica
edad EQU [BX+DI+8] MOV AX,edad = (signo ‘=’): asigna el valor de la expresión a un nombre simbólico variable: Análogo al anterior pero con posibilidad de cambiar en el futuro. Muy usada en macros (sobre todo con REPT). num = 19 num = pepe + 1 dato = [BX+3] dato = ES:[BP+1] 8.11. DIRECTIVAS DE CONTROL DEL ENSAMBLADOR ORG (OriGin): pone el contador de posiciones del ensamblador, que indica el offset donde se deposita la instrucción o dato, donde se indique. En los programas COM (que se cargan en memoria con un OFFSET 100h) es necesario colocar al principio un ORG 100h, y un ORG 0 en los controladores de dispositivo (aunque si se omite se asume de hecho un ORG 0). END [expresión]: indica el final del fichero fuente. Si se incluye, expresión indica el punto sonde arranca el programa. Puede omitirse en los programas EXE si éstos constan de un sólo módulo. En los COM es preciso indicarla y, además, la expresión -realmente una etiqueta- debe estar inmediatamente después del ORG 100h. .286, .386 y .8087 obligan al ensamblador a reconocer instrucciones específicas del 286, el 386 y del 8087. También debe ponerse el «.» inicial. Con .8086 se fuerza a que de nuevo sólo se reconozcan instrucciones del 8086 (modo por defecto). La directiva .386 puede ser colocada dentro de un segmento (entre las directivas SEGMENT/ENDS) con el ensamblador TASM, lo que permite emplear instrucciones de 386 con segmentos de 16 bits; alternativamente se puede ubicar fuera de los segmentos (obligatorio en MASM) y definir éstos explícitamente como de 16 bits con USE16.
89
Excelencia Académica
EVEN: fuerza el contador de posiciones a una posición par, intercalando un byte con la instrucción NOP si es preciso. En buses de 16 ó más bits (8086 y superiores, no en 8088) en dos veces más rápido el acceso a palabras en posición par: EVEN dato_rapido DW
0
.RADIX n: cambia la base de numeración por defecto. Bastante desaconsejable dada la notación elegida para indicar las bases por parte de IBM/Microsoft (si se cambia la base por defecto 16, ¡los números no pueden acabar en ‘d’ ya que se confundirían con el sufijo de decimal!: lo ideal sería emplear un prefijo y no un sufijo, que a menudo obliga además a iniciar los números por 0 para distinguirlos de las etiquetas). 8.12
DIRECTIVAS DE DEFINICIÓN DE SEGMENTOS Y PROCEDIMIENTOS.
SEGMENT-ENDS: SEGMENT indica el comienzo de un segmento (código, datos, pila, etc.) y ENDS su final. El programa más simple, de tipo COM, necesita la declaración de un segmento (común para datos, código y pila). Junto a SEGMENT puede aparecer, opcionalmente, el tipo de alineamiento, la combinación, el uso y la clase: nombre SEGMENT [alineamiento] [combinación] [uso] [‘clase’] . . . nombre ENDS Se puede definir unos segmentos dentro de otros (el ensamblador los ubicará unos tras otros). El alineamiento puede ser BYTE (ninguno) , WORD (el segmento comienza en posición par), DWORD (comienza en posición múltiplo de 4), PARA (comienza en una dirección múltiplo de 16, opción por defecto) y PAGE (comienza en dirección múltiplo de 256). La combinación puede ser: (No indicada): los segmentos se colocan unos tras otros físicamente, pero son
-
lógicamente independientes: cada uno tiene su propia base y sus propios offsets relativos.
90
Excelencia Académica
-
PUBLIC: usado especialmente cuando se trabaja con segmentos definidos en varios ficheros que se ensamblan por separado o se compilan con otros lenguajes, por ello debe declararse un nombre entre comillas simples-‘clase’- para ayudar al linkador. Todos los segmentos PUBLIC de igual nombre y clase tienen una base común y son colocados adyacentemente unos tras otros, siendo el offset relativo al primer segmento cargado.
-
COMMON: similar, aunque ahora los segmentos de igual nombre y clase se solapan. Por ello, las variables declaradas han de serlo en el mismo orden y tamaño.
-
AT: asocia un segmento a una posición de memoria fija, no para ensamblar sino para declarar variables (inicializadas siempre con ‘?’) de cara a acceder con comodidad a zonas de ROM, vectores de interrupción, etc. Ejemplo: vars_bios SEGMENT AT 40H p_serie0
DW ?
vars_bios ENDS De esta manera, la dirección del primer puerto serie puede obtenerse de esta manera (por ejemplo): MOV AX, variable_bios ; segmento MOV ES,AX MOV AX,ES:p_serie0 -
STACK: segmento de pila, debe existir uno en los programas de tipo EXE; además el linkador de Borland (TLINK 4.0) exige obligatoriamente que la clase de éste sea también ‘STACK’, con el LINK de Microsoft no siempre es necesario indicar la clase del segmento de pila. Similar, por lo demás, a PU BLIC.
-
MEMORY: segmento que el linkador ubicará al final de todos los demás, lo que permitiría saber dónde acaba el programa. Si se definen varios segmentos de este tipo el ensamblador acepta el primero y trata a los demás como COMMON. Téngase en cuenta que el linkador no soporta esta característica, por lo que emplear MEMORY es equivalente a todos los efectos a utilizar COMMON. Olvídate de MEMORY.
91
Excelencia Académica
El uso indica si el segmento es de 16 bits o de 32; al emplear la dirctiva .386 se asumen por defecto segmentos de 32 bits por lo que es necesario declarar USE16 para conseguir que los segmentos sean interpretados como de 16 bits por el linkador, lo que permite emplear algunas instrucciones del 386 en el modo real del microprocesador y bajo el sistema operativo DOS. Por último, ‘clase’ es un nombre opcional que empleará el linkador para encadenar los módulos, siendo conveniente nombrar la clase del segmento de pila con ‘STACK’. ASSUME (Suponer): Indica al ensamblador el registro de segmento que se va a utilizar para direccionar cada segmento dentro del módulo. Esta instrucción va normalmente inmediatamente después del SEGMENT. El programa más sencillo necesita que se «suponga» CS como mínimo para el segmento de código, de lo contrario el ensamblador empezará a protestar un montón al no saber que registro de segmento asociar al código generado. También conviene hacer un assume del registro de segmento DS hacia el segmento de datos, incluso en el caso de que éste sea el mismo que el de código: si no, el ensamblador colocará un byte de prefijo adicional en todos los accesos a memoria para forzar que éstos sean sobre CS. Se puede indicar ASSUME NOTHING para cancelar un ASSUME anterior. También se puede indicar el nombre de un grupo o emplear «SEG variable» o «SEG etiqueta» en ves de nombre_segmento: ASSUME reg_segmento:nombre_segmento[,…] PROC-ENDP permite dar nombre a una subrutina, marcando con claridad su inicio y su fin. Aunque es redundante, es muy recomendable para estructurar los programas. cls PROC ... cls ENDP El atributo FAR que aparece en ocasiones junto a PROC indica que es un procedimiento lejano y las instrucciones RET en su interior se ensamblan como RETF (los CALL hacia él serán, además, de 32 bits). Observar que la etiqueta nunca termina con dos puntos.
92
Excelencia Académica
8.12. DIRECTIVAS DE REFERENCIAS EXTERNAS. PUBLIC: permite hacer visibles al exterior (otros ficheros objeto resultantes de otros listados en ensamblador u otro lenguaje) los símbolos –variables y procedimientos- indicados. Necesario para programación modular e interfaces con lenguajes de alto nivel. Por ejemplo: PUBLIC proc1, var_x proc1
PROC FAR …
proc1
ENDP
var_x
DW
0
Declara la variable var_x y el procedimiento proc1 como accesibles desde el exterior por medio de la directiva EXTRN. EXTRN: Permite acceder a símbolos definidos en otro fichero objeto (resultante de otro ensamblaje o de una compilación de un lenguaje de alto nivel); es necesario también indicar el tipo del dato o procedimiento (BYTE, WORD o DWORD; NEAR o FAR; se emplea además ABS para las constantes numéricas): EXTRN proc1:FAR, var_x:WORD En el ejemplo se accede a los símbolos externos proc1 y var_x (ver ejemplos de PUBLIC) y a continuación sería posible hacer un CALL proc1 o un MOV CX, var_x, Si la directiva EXTRN se coloca dentro de un segmento, se supone el símbolo dentro del mismo. Si el símbolo estáa en otro segmento, debe colocarse EXTRN fuera de todos los segmentos indicándose explícitamente el prefijo de registro de segmento (o bien hacer el ASUME apropiado) al referenciarlo. Evidentemente, al final, al linkar habrá que enlazar este módulo con el que define los elementos externos. INCLUDE nombre_fichero: Añade al fichero fuente en proceso de ensamblaje el fichero indicado, en el punto en que aparece el INCLUDE. Es exactamente lo mismo que mezclar ambos ficheros con un editor de texto. Ahorra trabajos en fragmentos de código que se repiten en varios programas (como quizá una librería de macros). No se recomiendan INCLUDE’s anidados. 93
Excelencia Académica
8.13
DIRECTIVAS DE DEFINICIÓN DE BLOQUES.
NAME nombre_modulo_objeto: indica el nombre del módulo objeto. Si no incluye NAME, se tomará la directiva TITLE o, en su defecto, del nombre del propio fichero fuente. GROUP segmento1, segmento2,... permite agrupar dos o más segmentos lógicos en uno sólo de no más de 64 Kb totales (ojo: el ensamblador no comprueba este extremo, aunque si el enlazador). Ejemplo: superseg GROUP datos, código, pila código
SEGMENT ...
código
ENDS
datos
SEGMENT
dato
DW 1234
datos
ends
pila
SEGMENT STACK ‘STACK’ DB 128 DUP (?)
pila
ENDS
Cuando se accede a un dato definido en algún segmento de un grupo y se emplea el operador OFFSET es preciso indicar el nombre del grupo como prefijo, de lo contrario el ensamblador no generará el desplazamiento correcto: MOV AX,dato
; ¡incorrecto!
MOV AX,supersegmento:dato ; correcto La ventaja de agrupar segmentos es poder crear programas COM y SYS que contengan varios segmentos. En todo caso, téngase en cuenta aún en ese caso que no pueden emplearse todas las características de la programación con segmentos (por ejemplo, no se puede utilizar la directivaSEG ni debe existir segmento de pila).
94
Excelencia Académica
LABEL: permite referenciar un símbolo con otro nombre, siendo factible redefinir el tipo. La sintaxis es: nombre LABEL tipo (tipo=BYTE, WORD, DWORD, NEAR o FAR). Ejemplo: palabra
LABEL WORD
byte_bajo
DB
0
Byte_alto
DB
0
En el ejemplo, con MOV AX,palabra se accederá a ambos bytes a la vez (el empleo de MOV AX,byte_bajo daría error: no se puede cargar un solo byte en un registro de 16 bits y el ensamblador no supone que realmente pretendíamos tomar dos bytes consecutivos de la memoria). STRUC – ENDS: permite definir registros al estilo de los lenguajes de alto nivel, para acceder de una manera más elegante a los campos de una información con cierta estructura. Estos campos pueden componerse de cualquiera de los tipos de datos simples (DB, DW, DD, DQ, DT) y pueden ser modificables o no en función de si son simples o múltiples, respectivamente: alumno mote
STRUCT DB’0123456789’
edadalturaDB 20,175
; modificable
; no modificable
peso
DB 0
otros
DB 10 DUP(0) ; no modificable
telefono
DD ?
alumno
; modificable ; modificable
ENDS
La anterior definición de estructura no lleva implícita la reserva de memoria necesaria, la cual ha de hacerse expresamente utilizando los ángulos ‘<’ y ‘>’: felipe alumno <’gordinflas’,,101,,251244> En el ejemplo se definen los campos modificables (los únicos definibles) dejando sin definir (comas consecutivas) los no modificables, creándose la estructura ‘felipe’ que ocupa 27 bytes. Las cadenas de caracteres son rellenadas con espacios en blanco al final si no alcanzan el tamaño máximo de la declaración. El TASM es más flexible y permite definir
95
Excelencia Académica
también el primer elemento de los campos múltiples sin dar error. Tras crear la estructura, es posible acceder a sus elementos utilizando un (.) para separar el nombre del campo: MOV AX,OFFSET felipe.telefono LEA
BX,felipe
MOV CL,[BX].peso ; equivale a [BX+12] RECORD: similar a STRUCT pero operando con campos de bits. Permite definir una estructura determinada de byte o palabra para operar con comodidad. Sintaxis: nombre
RECORD nombre_de_campo:tamaño[=valor],...
Donde nombre permitirá referenciar la estructura en el futuro, nombre_de_campo identifica los distintos campos, a los que se asigna un tamaño (en bits) y opcionalmente un valor por defecto. registro RECORD a:2=3, b:4=5, c:1 La estructura registro totaliza 7 bits, por lo que ocupa un byte. Está dividida en tres campos que ocupan los 7 bits menos significativos del byte: el campo A ocupa los bits 6 y 5, el B los bits del byte: el campo A ocupa los bi1 al 4 y el C el bit 0: 65
4321
11
0101
0 ?
La reserva de memoria se realiza, por ejemplo, de la siguiente manera: reg1
registro <2,,1>
Quedando reg1 con el valor binario 1001011 (el campo B permanece inalterado y el A y C toman los valores indicados). Ejemplos de operaciones soportadas: MOV
AL,A
; AL = 5 (desplazamiento del bit ;
96
menos significativo de A)
MOV
AL,MASK A
; AL = 01100000b (máscara de A)
MOV
AL,UIT A
; AL = 2 (anchura de A)
Excelencia Académica
DIRECTIVAS CONDICIONALES. Se empelan para que el ensamblador evalúe unas condiciones y, según ellas, ensamble o no ciertas zonas de código. Es frecuente, por ejemplo, de cara a generar código para varios ordenadores: pueden existir ciertos símbolos definidos que indiquen en un momento dado si hay que ensamblar ciertas zonas del listado o no de manera condicional, según la máquina. En los fragmentos en ensamblador del código que generan los compiladores también aparecen con frecuencia (para actuar de manera diferente, por ejemplo, según el modelo de memoria). Es interesante también la posibilidad de definir un símbolo que indique que el programa está en fase de pruebas y ensamblar código adicional en ese caso con objeto de depurarlo. Sintaxis: IFxxx [símbolo/exp./arg.] ; xxx es la condición ... ELSE
; el ELSE es opcional
... ENDIF IF
expresión
(expresión distinta de cero)
IFE
expresión
(expresión igual a cero)
IF1
(pasada 1 del ensamblador)
IF2
(pasada 2 del ensamblador)
IFDEF
símbolo
(símbolo definido o declarado como externo)
IFNDEF
símbolo
(símbolo ni definido ni declarado como externo)
IFB
(argumento en blanco en macros – incluir ‘ <’ y ‘>’-)
IFNB (lo contrario, también es obligado poner ‘ <’ y ‘>’)
8.13
IFIDN ,
(arg1 idéntico a arg2, requiere ‘ <’ y ‘>’)
IFDIF ,
(arg1 distinto de arg2, requiere ‘ <’ y ‘>’)
DIRECTIVAS DE LISTADO.
PAGE num_lineas, num_columnas: formatea el listado de salida; por defecto son 66 líneas por página (modificable entre 10 y 255) y 80 columnas (seleccionable de 60 a 132). PAGE 97
Excelencia Académica
salta de página e incrementa su número.<> indica capítulo nuevo ( y se incrementa el número). .TITLE título: indica el título que aparece en la primera línea de cada página (máximo 60 caracteres). .SUBTTL subtítulo: Ídem con el subtítulo (máx. 60 caracteres). .LALL: Listar las macros y sus expansiones. .SALL: No listar las macros ni sus expansiones. .XALL: Listar sólo las macros que generan código objeto. .XCREF: Suprimir listado de referencias cruzadas (listado alfabético de símbolos junto al n° de línea en que son definidos y referenciados, de cara a facilitar la depuración). .CREF: Restaurar listado de referencias cruzadas. .XLIST: Suprimir el listado ensamblador desde ese punto. .LIST: Restaurar de nuevo la salida de listado ensamblador. COMMENT delimitador comentario delimitador: Define un comentario que puede incluso ocupar varias líneas, el delimitador (primer carácter no blanco ni tabulador que sigue al COMMENT) indica el inicio e indicará más tarde el final del comentario. ¡No olvidar cerrar el comentario!. %OUT mensaje: escribe en la consola el mensaje indicado durante la fase de ensamblaje y al llegar a ese punto del listado, excepto cuando el listado es por pantalla y no en fichero. .LFCOND: Lista los bloques de código asociados a una condición falsa (IF). .SFCOND: Suprimir dicho listado. .TFCOND: Invertir vigente del listado de los bloques asociados a una condición falsa. 98
Excelencia Académica
Programando en Assembler 5.1.- TASM/MASM. Es el programa que convierte nuestro archivo fuente en código objeto, es decir, lenguaje máquina en el que sólo faltan las referencias a rutinas externas. Permite la obtención de listado de código y de referencias cruzadas (símbolos, etiquetas, variables). En general, bastará con hacer TASM nombre_programa (se supone la extensión .ASM por defecto). El fichero final tiene la extensión OBJ. La s intaxis es (tanto para TASM como para MASM): C:/8086/TASM fichero_fuente, fichero_listado, fichero_referencias_cruzadas A continuación se listan los parámetros comunes a TASM:0(y posterior) y MASM 4.0/5.0 (NO la 6.x): /a y /s /c
/D
/e /Iruta /l[a] /m
/n /p /t /w /X /z /Zd /Z¡
Seleccionan un orden alfabético o secuencial de los segmentos. Genera un listado de referencias cruzadas en un fichero de extensión CRF listo para ser procesado por CREF (MASM) añadiendo además números de línea al listado, o bien incluye el listado de referencias cruzadas directamente dentro del listado del programa (caso de DASM). Las referencias cruzadas son un listado de todos los símbolos del programa, indicando los números de línea del mismo que en que son definidos y referenciados. De la manera /Dsímbolo. [=valor] permite crear el símbolo indicado, cuya presencia puede comprobarse en el programa con una directiva IF (es útil para definir externamente un símbolo que indique que el programa está en fase de depuración de cara a ensamblar cierto código adicional). Aunque /d (en minúsculas) es un obsoleto parámetro de MASM para obtener un listado de la primera pasada del ensamblador, MASM 4.0 es capaz de darse cuenta de que se pretende definir un símbolo con /d a menos que se indique sólo /d. Emula las instrucciones de punto flotante del 80x87, apoyándose en una librería al efecto. Permite indicar el directorio donde el ensamblador debe de buscar los ficheros indicados en el programa fuente con INCLUDE. Con /I se genera un listado de ensamblaje y con /Ia un listado expandido. Con /m se indica el nivel de preservación del sentido de mayúsculas y minúsculas en los símbolos: /ml hace que se considere diferentes mayúsculas de minúsculas en todos los símbolos, /mx sólo con símbolos globales y /mu hace que se mayusculicen todos los símbolos globales. Al ensamblar módulos para usar desde lenguajes C hay que indicar por lo menos /mx. En MASM 6.X se emplea /Cx en lugar de /mx, /Cp en lugar de /ml y /Cu en vez de /mu. Suprime las tablas de símbolos en el listado. Verifica que el código generado para el modo protegido es correcto (al emplear la directiva para generar instrucciones de modo protegido) Suprime los mensajes si el ensamblaje es correcto Indica el nivel de advertencias: /w0, ninguna /w1 sólo las serias y /w2 sólo consejos Lista las condiciones falsa (ensamblaje condicional) Visualiza la línea del error y no sólo el número de la misma. Incluye solo la información del número de línea Genera información simbólica para los depuradores de código 99
Excelencia Académica
5.2.-
TLINK/LINK
El montador o linkador permite combinar varios módulos objeto, realizando las conexiones entre ellos y, finalmente los convierte en módulo ejecutable de tipo EXE. El linkador permite el uso de librerías de funciones de rutinas. TLINK, a diferencia de LINK, permite generar un fichero de tipo COM directamente de un OBJ si se indica el parámetro/t, lo que agiliza aún más el proceso. Puede obtenerse ejecutándolo sin parámetros. Los parámetros de TLINK son sensibles a mayúsculas y minúsculas, por lo que /T no es lo mismo que /t. Con LINK se obtiene ayuda indicando /HELP. Aunque los parámetros de uno y otro son bastante distintos, la sintaxis genérica de ambos es: C:\8086\TLINK fich_obj(s), fich_exe, fich_map, fich_librería, fich_def Los ficheros no necesarios se pueden omitir (o indicar NUL): para linkar el fichero pro1.obj y el prog2.obj con la librería math.lib generando PROG.EXE basta con ejecutar TLINK prog1+prog2 math. 8.14
EXE2BIN.
Los ficheros EXE generados por TLINK o LINK no son copia exacta de lo que aparece en la memoria, sino que el DOS tras cargarlos debe realizar una última operación de “montaje”. Un programa COM en memoria es una copia del fichero del disco, es algo más corto y mas sencillo de desensamblar. EXE2BIN, permite transformar un fichero EXE en COM siempre que el módulo ocupe menos de 64K y que este ensamblado con ORG 100h. Sino se indicó el parámetro /t en TLINK, será necesario este programa (al igual que cuando se utiliza LINK). Cuando se crean programas SYS (que se diferencian de los COM básicamente en que no tienen ORG 100h) no se puede ejecutar TLINK /t, por lo que es necesario la ayuda de EXE2BIN para convertir el programa EXE en SYS. Sintaxis: C:\8086\EXE2BIN fich.exe (a veces hay que indicar EXE2BIN fich.exe fich.com) Si el programa no contiene ORG 100h , EXE2BIN genera un fichero binario puro de extensión BIN. Si además existen referencias absolutas a segmentos, EXE2BIN preguntará el segmento en que va a correr (algunas versiones permiten indicarlo de la manera 100
Excelencia Académica
/Ssegmento): esto permite generar código para ser ejecutado en un segmento determinado de la memoria (como puede ser una memoria EPROM o ROM). TLIB/LIB. El gestor de librerías permite reunir módulos objeto en un único fichero para poder tomar de él las rutinas que se necesiten en cada caso. La sintaxis es la siguiente: C:\8086\TLIB fichero_librería comandos, fichero_listado Si no se indican comandos se obtiene simplemente información del contenido de la librería en el fichero de listado (que puede ser CON para listado por pantalla). Los comandos son de la forma nombre_de_módulo y pueden ser los siguientes: +
añade el módulo objeto indicado a la librería.
-
borra el módulo indicado de la librería.
*
saca el módulo de la librería sin borrarlo (extrae fichero OBJ).
-+
alternativamente +-, reemplaza el módulo existente en la librería.
-*
alternativamente *-, extrae el módulo de la librería y lo borra de ella.
Por ejemplo, para añadir el módulo QUICK. OBJ, borrar el SLOW. OBJ y reemplazar el SORT.OBJ por una nueva versión en LIBRERÍA. LIB se ejecutaría: C:\8086\TLIB librería+quick-slow-+sort Si la lista es muy larga se puede incluir en un fichero y ejecutar TLIB @fichero para que la lea del mismo (sin no cabe en una línea del fichero puede escribirse & al final antes de pasar a la siguiente). TCREF/CREF. Esta utilidad genera listados en orden alfabético de los símbolos, como ayuda a la depuración. Con el MASM la opción /c crea un fichero de referencias cruzadas de extensión CRF (respondiendo afirmativamente cuando pregunta por el mismo o indicándolo explícitamente en la línea de comandos); la poción /c de TASM lo incluye en el listado, aunque si se indica el nombre del fichero de referencias cruzadas genera un fichero de extensión XRF, CREF y TCREF interpretan respectivamente los ficheros CRF y XRF 101
Excelencia Académica
generando un fichero de texto con extensión REF que contiene el listado de referencias cruzadas. Ejemplo:
8.15. C:\8086\TASM fichero,,,fichero C:\8086\TCREF fichero Las referencias cruzadas son un listado de todos los símbolos del programa, indicando los números de línea del mismo en que son referenciados (línea en que son definidos se marca con #); estos números de línea son relativos al listado de ensamblaje del programa (y no al fichero fuente). Es útil para depurar programas grandes y complejos. MAKE. Esta utilidad se apoya en unos ficheros especiales, al estilo de los BAT del DOS, de cara a automatizar el proceso de ensamblaje. Sólo es recomendable para programas grandes, divididos en módulos, en los que MAKE chequea la fecha y hora para ensamblar sólo las partes que hayan sido modificadas. 8.15
LAS FUNCIONES DEL DOS Y DE LA BIOS.
El código de la BIOS, almacenado en las memorias ROM del ordenador, constituye la primera capa de software de los ordenadores compatibles. La BIOS accede directamente al hardware, liberando a los programas de usuario de las tareas más complejas. Parte del código de la BIOS es actualizado durante el arranque del ordenador, con los ficheros que incluye el sistema operativo. El sistema operativo o DOS propiamente dicho se instala después: el DOS no realiza ningún acceso directo al hardware, en su lugar se apoya en la BIOS, constituyendo una segunda capa de software. El DOS pone a disposición de los programas de usuarios unas funciones muy evolucionadas para acceder a los discos y a los recursos del ordenador. Por encima del DOS se suele colocar habitualmente al COMMAND.COM, aunque realmente el COMMAND no constituye capa alguna de software: es un simple programa de utilidad, como cualquier otro, ejecutado sobre el DOS y que además no pone ninguna función a disposición del sistema (al menos, documentada), su única misión es cargar otros programas.
102
Excelencia Académica
8.16
FUNCIONES DE LA BIOS
Las funciones de la BIOS se invocan, desde los programas de usuario, ejecutando una interrupción software con un cierto valor inicial en los registros. La BIOS emplea un cierto rango de interrupciones, cada una encargada de una tarea específica: INT 10h: Servicios de video (texto y gráficos). INT 11h: Informe sobre el tamaño de la memoria convencional. INT 13h: Servicios de disco (muy elementales: pistas, sectores, etc.) INT 14h: Comunicaciones en serie. INT 15h: Funciones casette (PC) y servicios especiales del sistema (AT). INT 16h: Servicios de teclado. INT 17h: Servicios de impresora. INT 18h: Llamar a la ROM DEL BASIC (sólo máquinas IBM). INT 19h: Reinicialización del sistema. INT 1Ah: Servicios horarios. INT 1Fh: Apunta a la tabla de los caracteres ASCII 128 – 255 (8x8 puntos). La mayoría de las interrupciones se invocan solicitando una función determinada (que se indica en el registro AH al llamar) y se limitan a devolver un resultado en ciertos registros, realizando la tarea solicitada. FUNCIONES DEL DOS El DOS emplea varias interrupciones, al igual que la BIOS; al igual que la BIOS; sin embargo, cuando se habla de funciones del DOS, todo el mundo sobreentiende que se trata de llamar a la INT 21h, la interrupción mas importante con diferencia. INT 20h: Terminar programa INT 21h: Servicio del DOS. INT 22h: Control de finalización de programas INT 23h:Tratamiento de Ctrl-C. INT 24h: Tratamiento de errores críticos. INT 25h: Lectura absoluta de disco (sectores lógicos). INT 26h: Lectura absoluta en disco (sectores lógicos). INT 27h: Terminar dejando residente el programa (en desuso). INT 28h: Idle (ejecutada cuando el ordenador está inactivo). INT 29h: Impresión rápida en pantalla ( no tanto ). INT 2Ah: Red Local MS NET. 103
Excelencia Académica
INT 2Bh-2Dh: Uso interno del DOS. INT 2Eh: Procesos Batch. INT 2Fh: Interrupción Múltiplex. INT 30h – 31h: Compatibilidad CP/M-80. INT 32h: Reservada. Las funciones del DOS se invocan llamando a la INT 21h e indicando en el registro AH él número de función a ejecutar. Sólo modifican los registros en que devuelven los resultados, devolviendo normalmente el acarreo activo cuando se produce un error (con un código de error en el acumulador). Muchas funciones de los lenguajes de programación frecuentemente se limitan a llamar al DOS. 8.17
ACCESO A LAS INTERRUPCIONES DEL BIOS Y DOS DESDE ROM
El ROM BIOS y DOS contiene rutinas que pueden ser usadas en los programas. Estas rutinas usualmente no son invocadas por procedimientos usuales, pero pueden ser accedido por mecanismos de interrupción. La mayoría de los programadores típicamente organizan los programas por interrupciones CALL. El BIOS y la funciones del DOS están en forma de código objeto, y se encuentran en direcciones de memoria, en el lenguaje ensamblador hay instrucción denominada INT que genera una interrupción de software, en un microprocesador 80x86 que provee una solución a determinado código de interrupción. El 80x86 usa código de interrupciones como índice en una tabla para localizar la rutina a ejecutar cuando la interrupción ocurre. Esta tabla de funciones son conocidas como Tabla del Vector de Interrupción (IVT) y las funciones son conocidas como Interrupciones Rutinarias de Servicio (ISR´s). El IVT esta localizado en el primer 1,024 Byte de Memoria y contiene 256 entradas . Desde cada dirección ISR es de la forma CS:IP cada entrada en el IVT requiere de 4 Byte de almacenamiento (256*4=1,024 B). El 80x86 recibe señal de interrupción primero empuja (PUSH) los flags, CS y el registro IP que se encuentra en la pila de ese orden, luego el CPU usa el numero de interrupción para endexarlo en el vector de interrupción (IVT) y luego salta a las rutinas de servicio de interrupción (ISR´s) para esa interrupción. El ISR´s termina con IRET (Interrup RETRY) los cuales remueve los datos de la pila (POP) el intrusión Pointer (IP), el Code Segmnet (CS) y Flags de la Stack (Pila) por la cual retorna el control a la interrupción del programa
104
Excelencia Académica
Rutinas del ROM BIOS
Manejo dela INTS
IRET
Programa objeto
INTS
Tabla del Vector de Interrupción
Dirección INTS
Incremento de la d irección
Memoria
. Ej: 1.- Ejecutando la interrupción 5 ocasiona que el microprocesador grave el siguiente estado y salta a la función de la tabla IVS en la entrada de la interrupción 5, 2.- El microprocesador ejecuta el código que maneja en esa interrupción (imprimir pantalla), 3.- Cuando IRET es ejecutado se devuelve el control justo después del comando colocado en el programa objeto. PRINCIPALES INTERRUPCIONES DEL BIOS Y DEL DOS Int 2
Tipo BIOS
5
BIOS
8
BIOS
9
BIOS
Descripción Este tipo de interrupción no se puede evitar. Utiliza el BIOS NEM2, procedimiento NMI-INT y aparece cuando se detectan errores en la memoria sobre la tarjeta del sistema (Perity Chekc 1) o se tiene problemas con tarjetas que se añaden al sistema (Parity Chekc 2) Esta interrupción se encarga de imprimir el c ontenido de la pantalla bajo el control del programa. El llamado al procedimiento tipo FAR en PRINT SCREEN y la dirección 0050;0000 contiene el estado. Esta rutina maneja la interrupción del temporizador proveniente del canal 0 del temporizador 8253. La rutina lleva el conteo del numero de interrupciones desde que se energizó la computadora. Esta rutina es un procedimiento FAR KB-INT. La rutina continua en la dirección F000;EC32 y constituye la interrupción del teclado. La INT 16h 105
Excelencia Académica
E
BIOS
F 10
DOS BIOS
11
BIOS
12 13
BIOS BIOS
14
BIOS
15
BIOS
es la rutina de E/S del teclado y es mas flexible. Este procedimiento de tipo FAR, DISK-INT maneja la interrupción del diskette. Activa la misma llamada que type 4. El conjunto de rutinas asociados con este procedimiento NEAR VIDEO – E/S, constituye interfaz con el TRC. El procedimiento proporciona el número de puertos para la impresora, adaptadores de juegos, interfaces RS-232C,número de unidades de Diskettes, modos de video y tamaños del RAM Proporciona el tamaño de la memoria Llama a varias rutinas para llevar operaciones de entrada y salidas del disco. Este procedimiento permite al usuario la entrada y salida de datos desde el puerto de comunicaciones desde el puerto de comunicaciones RS232C. Interrupción empleada para controlar las operaciones de E/S en casettes.
16
BIOS
Esta interrupción utiliza a AX para leer el teclado
17
BIOS
18
BIOS
Esta rutina proporciona la comunicación con la impresora. Los parámetros necesarios son colocados en los registros AX y DX. Esta interrupción llama al casette de basic.
19
BIOS
1A
BIOS
1B
DOS
1C
BIOS
1D
BIOS
1E
DOS
Esta tabla de bytes y rutinas necesarias para establecer varios parámetros para gráficos. Tabla de diskette.
1F
DOS
Tabla de gráficos.
20
DOS
21
DOS
22
DOS
23
DOS
Esta interrupción es generada por DOS para salirse un programa, es la primera dirección del área correspondiente al segmento prefijo del programa. Esta interrupción consta de varias opciones, una de ellas es solicitar funciones. Cuando termina la ejecución de un programa esta interrupción transfiere el control a la dirección especificada por el vector de interrupción. Esta interrupción nunca debe generase de manera directa. Esta interrupción es generada como respuesta a un CRTL BREAK.
24
DOS
25
DOS
106
La rutina asociada con esta interrupción, lee el sector uno de la pista cero del disco en la unidad A, a la que le transfiere el control. Esta rutina permite seleccionar o leer el contenido del reloj que lleva la hora. El registro CX contiene la palabra mas significativa del conteo mientras que en DX se encuentra la menos significativa. Esta interrupción se presenta cada vez que se genera una interrupción proveniente del teclado. Esta interrupción provoca la ejecución IRET
Esta interrupción se llama cada ves que ocurre un error crítico dentro de dos, como puede ser un error de disco. Esta interrupción transfiere el control, para lectura, al manejador del dispositivo (driver).
Excelencia Académica
26
DOS
27
DOS
2F
DOS
Esta interrupción transfiere el control, para escritura, a manejador del dispositivo. Este vector es empleado, para que al termino de un programa este permanezca residente en la memoria del sistema una vez que DOS toma de nuevo el control. Esta interrupción define una interfaz general entre dos procesos, el número especificado en Ah indica a cada manejador y Al contiene la función del manejador.
8.18. TEORIA DEL MICROPROCESADOR El microprocesador es la parte mas importante de la computadora diseñada para llevar a cabo o ejecutar los programas. El cerebro de la PC y compatibles es el 8086 de INTEL. Los procesadores varían en velocidad y capacidad de memoria, registros y el tamaño del bus de datos. El bus de datos transfiere datos entre el procesador, la memoria y dispositivos de entrada y salida. Todo microprocesador realiza acceso a memoria y a puertos de entrada y salida, ya sea escribir o leer. Esto significa que cualquier sistema digital basado en un microprocesador requerirá de al menos una memoria donde se ubiquen las instrucciones a ejecutar (programa) y al menos puerto de salida o entrada /salida. ALGUNAS CARACTERÍSTICAS DEL 8088
Interfaz de bus de datos de 8 bits.
Arquitectura interna de 16 bits.
Capacidad de direccionamiento de 1MB de memoria.
Software compatible con los microprocesadores 8086.
14 registros de trabajo.
24 modos de direccionamiento en operaciones.
Operaciones en byte, word y bloques de estos.
Operaciones aritméticas, lógicas y de transferencia de 8 bits y 16 bits en binario o decimal.
Puede trabajar a una frecuencia de 5Mhz (8088) ó 8Mhz(8088 – 2).
ORGANIZACIÓN DE LA MEMORIA: El procesador prevé un bus de direcciones de 20bist hacia la memoria el cual ubica el byte de referencia, la memoria esta organizada como un arreglo lineal de un millón de byte direccionados desde 00000H hasta FFFFFH. La memoria esta lógicamente separada en segmentos de código, datos, datos extra y pila, cada una de 64 KB, cada segmento continua 107
Excelencia Académica
con un limite de 16 bytes todas las referencias de memoria están hechas con relación a las direcciones contenidas en el registro de segmento. Los tipos de segmentos escogidos son basados en las necesidades de direcciones de los programas. El registro de segmento para ser escogido tiene que cumplir la siguiente regla: Toda la información en un segmento tipo comparte los mismos atributos lógicos (Ejemplo: código o datos). Para estructurar la memoria dentro de áreas rescatables de características similares, y para selección automática de registros de segmentos, los programas son cortos, veloces y mas estructuradados. La palabra de 16 bits puede ser ubicada (localizada) en borde par o impar. Para direcciones y datos es decir operandos, el último byte significativo de la palabra es almacenada la ubicación de la dirección mas baja y el mas significativo en la próxima dirección mas alta. Ciertas posiciones de memoria están reservadas para operaciones específicas del CPU, posiciones de direcciones del FFFFOH hasta FFFFFH son reservados para operaciones que incluyen saltos hacia la rutina de inicialización del sistema, siguiendo el RESET. El microprocesador siempre ejecutará el código de la posición FFFFOH donde debe ser ubicado una instrucción de salto ubicaciones del OOOOOH hasta OO3FFH son reservadas para operaciones de interrupción (4 bytes indicadores), conformado por la dirección de segmento de 16 bits y de desplazamiento de 16 bits. El microprocesador no puede realizar todo el trabajo de control del computador, existen unos chips de soporte que le ayudan a gestionar, controlar y hacen posible que todo el sistema funcione en forma coordinada. El microprocesador se comunica con estos dispositivos a través de las cuales pasa la información, tanto si viaja desde o hacia un dispositivo de entrada /salida como un teclado, una impresora. Cada puerto se identifica por una dirección de 16 bits, el cual puede variar desde 0000H hasta FFFFH, debido a las 2 instrucciones de manejo de puerto: in al,dx--------------(entrada) out dx,al-------------(salida) donde el registro DX contiene la dirección del puerto. Esto le da un total de 65536 puertos de entrada /salida. No pueden haber 2 puertos con una misma dirección, esto crearía un conflicto en el sistema digital. El acceso es similar que el acceso a memoria, es decir; el microprocesador utiliza el bus de direcciones para generar el número del puerto y por el bus de datos viajará la información hacia el microprocesador o sale de este. Pero aquí se genera otra señal de control para distinguir el acceso a la memoria (IO/M). En otras palabras una dirección de puerto no es lo
108
Excelencia Académica
mismo que una dirección de memoria. El que determina el acceso en calidad es la instrucción que se ejecuta. En las computadoras, las direcciones de los puertos de entrada/salida la determinan los diseñadores de la placa principal (mainboard). Los programas que hagan uso de los puertos de entrada /salida deben de tener cuidado de los números de los puertos, así como de su uso y significado IMPLEMENTACION DE UN SISTEMA DIGITAL BASADO EN EL 8088
OBJETIVOS:
Familiarizarse con el microprocesador 8088
Construir un sistema con un microprocesador, es decir un sistema digital programable, flexible, versátil, etc.
Incidir sobre todo en el hardware, ya que en la mayoría está familiarizado con el software.
Familiarizarse con el seguimiento y detección de fallas de sistemas digitales basados con microprocesadores.
Familiarizar al alumno con microprocesadores para diseñar sistemas aplicados en la industria control e instrumentos.
DISPOSITIVOS Y COMPONENTES ELECTRÓNICOS, HERRAMIENTAS
Un microprocesador 8088
Un generador de reloj 8284
Un oscilador de 20Mhz.
Una memoria EPROM 27XX.
Dos latch 74LS373.
Un latch 74LS374.
Dos buffer bidireccional 74LS245.
Decodificadores 74LS138.
Compuertas: 74LS08, 74LS32, 74LS00.
Resistores: iK, 330 ohm, leds
Dip switch de 8.
Condensadores de tantalio de 0.1uf.
109
Excelencia Académica
8.19. PROCESO DE DISEÑO DEL HARDWARE El sistema digital basado en el microprocesador 8088 debe reunir las condiciones básicas de acceso a memoria, así como la lectura y escritura de los puertos de entrada y salida, de tal forma que el sistema sea capaz de procesar información digital externa. Para elaborar este sistema realizamos la descripción lógica de los siguientes bloques: 1
EL MICROPROCESADOR 8088.- Es un microprocesador de 16 bits con una
capacidad de direccionamiento de 1MB y con un bus de datos externo de 8 bits. Las líneas de datos esta multiplexadas con las primeras 8 líneas, por ello es necesario utilizar un circuito de multiplexación para separar los datos y direcciones. Entre las líneas mas importantes de control tenemos el ALE (Habilitador de latch de direcciones), DT/R(Transmisión o recepción de datos), M/IO(acceso a memoria o puertos de entrada / salida), RD(Lectura), WR(Escritura) y DEN(Habilitador de datos). 1.
LA MEMORIA EPROM.- Es el lugar donde se almacenará el código de maquina, producto del programa realizado en lenguaje assembler. Este dispositivo debe de estar ubicado en la región , mas alta de la memoria, teniendo en cuenta que después de realizar el RESET al microprocesador el registro puntero de instrucción (IP) contiene el valor 0000H y el registro de segmento de código (CS) toma el valor de FFFFH. Esta memoria una vez gravada nos servirá como programa monitor del sistema.
2.
EL RELOJ GENERADOR.- Es el encargado de generar la señal de reloj apropiada para el microprocesador. El 8284, también genera las señales de RESET y READY, necesarias para el funcionamiento del sistema. Internamente divide la frecuencia de reloj a la tercera parte de la frecuencia de ingreso. Si trabajamos con el oscilador de 20 Mhz, el 8088 trabajará a una frecuencia de reloj de 7Mhz aproximadamente.
3.
LOGICA DE DEMULTIPLEXADOR DEL BUS DE DATOS Y DECODIFICACIÓN PARA LA HABILITACIÓN DE LA MEMORIA Y PUERTOS DE ENTRADA/SALIDA.La bascula cerrojo 74373: para demultiplexar las direcciones, se habilita con
-
ALE. El buffer bidireccional 74245: para el soporte del bus de datos.
-
Decodificador 74138: para tener acceso a memoria y puertos de entrada /salida de acuerdo a las direcciones determinadas para cada uno de ellos.
-
Compuertas lógicas: 7404, 7408, 7432 se utilizan para elaborar la condición de acceso a memoria o puertos de entrada/salida.
4.
INTERFAZ BASIC DE I/O UTILIZÁNDOLE BUFFER 74245 Y EL LATCH 74374.- La interfaz de entrada utiliza un buffer 74245 fijado a una sola dirección (puede utilizar el 74244). Este CI se habilitará cada vez que el microprocesador ejecute la instrucción: IN
110
Excelencia Académica
AL,DX; donde DX contiene la dirección del puerto de entrada (300h) y el registro AL contiene el dato que ha ingresado al sistema. La decodificación del puerto 300H sería de la siguiente forma: A9 A8 A7 A6 A5 A4 A3 A2 1
1
0
0
0
0
0
A1 A0 0
0
0
Se utilizan las 10 líneas de menor peso del bus de direcciones, para la compatibilidad con el diseño de interfaces para computadoras. El puerto de salida lo conforma el latch 74374, este CI se habilitará cuando el microprocesador ejecute la instrucción: OUT DX,AL donde el registro DX contiene la dirección del puerto de salida (301H) y el registro AL contiene el dato que esta saliendo del sistema. En el sistema a implementar ingresamos un dato proveniente de un switch conectado al buffer de entrada; y en la salida conectaremos 8 leds, para visualizar el dato que esta saliendo del sistema. PROCESO DE DISEÑO DEL SOFTWARE El programa a escribir deberá ser escrito en lenguaje assembler , se supone que el alumno ya tiene un cierto dominio en la programación. La información binaria a almacenar en la memoria EPROM deberá ser el código de máquina del programa escrito. A continuación se muestra un programa que lee un puerto de entrada invierte el dato leido y lo envía al puerto de salida. Aquí también se muestra la dirección que ocupa la instrucción en memoria y el código de máquina correspondiente de la instrucción. Posición de
Código de
mem.
maquina
Programa en assembler
1
code segment
2
assume cs: code
3
inicio
4 FFFF0
BA0300
5 FFFF3
EC
in al, dx
6 FFFF4
34FF
xor al, 0FFH
7 FFFF6 8 FFFF7
mov dx, 300H
42 EE
inc dx out dx, al 111
Excelencia Académica
9 FFFF8
EBF6
10 FFFFA
jmp inicio code ends
11
end inicio
Hay que tener en cuenta la forma en que se debe almacenar los datos en memoria, y también el tamaño del programa. Cuando se produce un RESET el microprocesador apunta al último párrafo de memoria (16 bytes) que son suficientes para alojar el programa escrito anteriormente. PROCEDIMIENTO: 1.
Siguiendo el esquema del circuito, implementar el sistema digital teniendo mucho cuidado en cuidar un orden al momento de cablear el bus de datos y el bus de direcciones; es decir, utilizar un determinado color de cable para cada bus. Con respecto a las líneas de control utilice otro color y colóquele unas etiquetas a las siguientes señales: Lectura de memoria (MEMRD) Escritura de puerto (IOWR) Lectura de puerto (IORD) Habilitación de la EPROM (CS) Reloj del sistema (CLK) Habilitación del latch de direcciones (ALE) Habilitación de datos(DEN) Habilitación del buffer de entrada (INPORT). Señal de reloj del latch de salida (OUTPORT).
2.
Grabar en la memoria EPROM el programa que será ejecutado por el microprocesador cada vez que se inicialice el sistema.
3.
Con una fuente de alimentación del laboratorio regule una salida de 5 voltios de DC y aplíquele al circuito. Antes de aplicar verifique que no haya ningún corto, ya que podría malograr los chips.
4.
Si el sistema esta funcionando. Anote y dibuje los siguientes valores y añada a su informe final: Señal de lectura de puerto Señal de escritura de puerto. Señal de reloj Consumo de corriente de todo el circuito
112
Excelencia Académica
5.
Si el sistema no funciona, utilice el osciloscopio y con ayuda del profesor trate de encontrar el posible error o falla del circuito.
PROGRAMA QUE PERMITE VISUALIZAR A TRAVES DE 2 DISPLAYS EL CODIGO ASCII DE UNA TECLA PULSADA Para este proyecto se tomarán en cuenta las siguientes condiciones:
Se tendrán como salida un número de 8 bits.
De estas salidas. 7 irán conectadas directamente a un display; mientras que el bit restante servirá para controlar un LATCH (a cuya entrada se tienen almacenados las mismas 7 salidas anteriormente mencionadas) que tienen conectado a su salida otro display (de 7 segmentos)
Los display utilizados para visualizar el código ASCII son de ánodo común; luego, los diferentes valores para cada uno de los números convertidos al formato de 7 bits se pueden observar en la siguiente . Tabla. D7
D6
D5 D4 D3 D2 D1 D0
SISTEMA
RELO
SISTEMA
DECIMAL
J
g
f
e
d
c
B
a
0
0
1
0
0
0
0
0
0
40h
1
0
1
1
1
1
0
0
1
79h
2
0
0
1
0
0
1
0
0
24h
3
0
0
1
1
0
0
0
0
30h
4
0
0
0
1
1
0
0
1
19h
5
0
0
0
1
0
0
1
0
12h
6
0
0
0
0
0
0
1
0
02h
7
0
1
1
1
1
0
0
0
78h
8
0
0
0
0
0
0
0
0
00h
9
0
0
0
1
1
0
0
0
18h
A
0
0
0
0
1
0
0
0
08h
B
0
0
0
0
0
0
1
1
03h
C
0
1
0
0
0
1
1
0
46h
D
0
0
1
0
0
0
0
1
21h
E
0
0
0
0
0
1
1
0
06h
F
0
0
0
0
1
1
1
0
0Eh
HEXADECIMAL
113
Excelencia Académica
CONVERSIÓN EN ASCII DE LA TECLA PULSADA A TRAVES DEL DISPLAY Aquí, con un cero lógico en el puerto paralelo, el display encenderá uno de sus segmentos, ya que este último es de tipo ánodo común. Según el tipo de señal a mandar el segmento se prenderá esta señal es mandada 2 veces (1º dato mandado por el puerto paralelo: DO – D7), en la primera señal mandada así como en la segunda, solo variará el octavo (D7), y manteniéndose D0 – D6 constante, todo esto con el propósito de activar al reloj; La primera señal será un “0” (D7==) Y La segunda señal será “1” (D7=1) ver figura 2 (estos datos se repetirán 30 veces para asegurar al primer dato y al reloj) en este primer dato los displays reciben el mismo dato. Luego de mandar la señal 30 veces (1er dato), se precede a enviar el segundo dato por el puerto paralelo cambiando entonces el 2do display, pero manteniéndose el primer display, ya que no se hace variar el octavo bit(D7), por lo tanto el display2 queda con el dato anterior (para que cambie tiene que mandarse un “0” seguido del “1” para activar el latch, por flanco positivo) y el segundo display con el 2do dato, quedando entonces, el número deseado de la tecla pulsada convertido en ASCII, visualizando en los dos displays. MACROS Cuando un conjunto de instrucciones en ensamblador aparecen frecuentemente repetidas a lo largo de un listado, es conveniente agruparlas bajo un nombre símbolo que las sustituirá en aquellos puntos donde aparezcan. Esta es la misión de las macros; por el hecho de soportarlas el ensamblador eleva categoría a la de macroensamblador, al ser las macros una herramienta muy cotizada por los programadores. No conviene confundir las macros con subrutinas: es estas últimas, el conjunto de instrucciones aparece una sola vez en todo el programa y luego se invoca con CALL. Sin embargo, cada vez que se hace referencia a una macro, el código que esta representa se expande en el programa definitivo, duplicándose tantas veces como se use la macro. Por ello, aquellas tareas que puedan ser realizadas con subrutinas siempre será mas conveniente realizarlas con las mismas, con objeto de economizar memoria, es cierto que las macros son algo más rápidas que las subrutinas (se ahorra un CALL y un RET) pero la diferencia es tan mínima que a la práctica es despreciable en el 99,99% de los casos. DEFINICION Y BORRADO DE LAS MACROS. La macro se define por medio de la directiva MACRO. Es necesarios definir la macro antes de utilizarla. Una macro puede llamar a otra. Con frecuencia, las macros se colocan 114
Excelencia Académica
juntas en fichero independiente y luego se mezclan en el programa principal con la directiva INCLUDE. IF1 INCLUDE fichero.ext ENDIF La sentencia IF1asegura que el ensamblador lea el fichero fuente de las macros sólo en la primera pasada, para acelerar el ensamblaje y evitar que aparezcan en el listado no consume memoria, por lo que en la práctica es indiferente declarar cientos que ninguna macro: Nombre_simbólico MACRO parámetros … …
; instrucciones de la macro
ENDM El nombre simbólico es el que permitirá en adelante hacer referencia a la macro, y se construye casi con las mismas reglas que los nombres se las variables y demás símbolos. La macro puede contener parámetros de manera opcional. A continuación vienen las instrucciones que engloba y, finalmente, la directiva ENDM señala el final de la macro. No se debe repetir el nombre simbólico junto a la directiva ENDM, ello provocaría un error un tanto curioso y extraño por parte del ensamblador (algo así como “Fin del fichero fuente inesperado, falta directiva END”), al menos con MASM 5.0 Y TASM 2.0. En realidad, y a diferencia de lo que sucede con los demás símbolos, el nombre de una macro puede coincidir con el de una instrucción máquina o una directiva del ensamblador : a partir de ese momento, la instrucción o directiva machacada pierde su significado original. El ensamblador dará además un aviso de advertencia si se emplea una instrucción o directiva como nombre de macro, aunque tolerará la operación. Normalmente se las asignará nombres normales, como a las variables. Sin embargo, si alguna vez se redefiniera una instrucción máquina o directiva, para restaurar el significado original del símbolo, la macro puede ser borrada o simplemente porque ya no va a ser usada a partir de cierto punto del listado, y así ya no consumirá espacio en las tablas de macros que mantiene en memoria el ensamblador al ensamblar. No es necesario borrar las macros antes de redefinirlas, para borrarlas, la sintaxis es la siguiente: PURGE Nombre_simbólico {, Nombre_simbólico,….} EJEMPLO DE UNA MACRO SENCILLA
115
Excelencia Académica
Desde el 286 existe una instrucción muy cómoda que introduce en la pila 8 registros, otra que lo saca(PUSHA y POPA). Quien este acostumbrado a emplearlas, puede crear unas macros que simulen estas instrucciones en los 8086; SUPERPUSH MACRO PUSH AX PUSH CX PUSH DX PUSH BX PUSH SP PUSH BP PUSH SI PUSH DI ENDM La creación de SUPERPOP es análoga, sacando los registros en orden inverso. El orden elegido no es por capricho y se corresponde con el de la instrucción PUSHA original, para compatibilizar. A partir de la definición de esta macro, tenemos a nuestra disposición una nueva instrucción máquina (SUPERPUSH) que puede ser usada con libertad dentro de los programas. PARAMETROS FORMALES Y PARÁMETROS ACTUALES Cuando se llama a una macro se le pueden pasar opcionalmente un cierto número de parámetros de cierto tipo. Estos parámetros se denominan parámetros actuales. En la definición de la macro, dichos parámetros aparecen asociados a ciertos nombres arbitrarios cuya única misión es permitir distinguir unos parámetros de otros e indicar en que orden son entregados: son los parámetros formales. Cuando el ensamblador expanda la macro a ensamblar, los parámetros formales serán sustituidos por sus correspondiente parámetros actuales. Considerar el siguiente ejemplo: SUMAR
MACRO
PUSH AX MOV AX,a ADD AX,b MOV total,AX POP AX ENDM …… 116
a,b,total
Excelencia Académica
SUMAR positivos, negativos, total En el ejemplo “a” , “b” y “total” son los parámetros formales y “positivos”, “negativos” y “total” son los parámetros actuales. Tanto “a” como “b” pueden ser variables, etiquetas, etc. en otro punto del programa; sin embargo, dentro de la macro, se comportan de manera independiente. El parámetro formal “total” ha coincidido en el ejemplo y por casualidad con su correspondiente actual. El código que genera el ensamblador al expandir la macro será el siguiente: PUSH AX MOV AX,positivos ADD AX,negativos MOV total,AX POP AX Las instrucciones PUSH y POP sirven para no alterar el valor de AX y conseguir que la macro se comporte como una caja negra; no es necesario que esto sea así pero es una buena costumbre de programación para evitar que los programas hagan cosas raras. En general, las macros de este tipo no deberían alterar los registros y, si los cambian, hay que tener muy claro cuáles. Si se indican más parámetros de los que una macro necesita, se ignorarán los restantes. En cambio, si faltan, el MASM asumirá que son nulos (0) y dará un mensaje de advertencia, el TASM es algo más rígido y podría dar un error. En general, se trata de situaciones atípicas que deben ser evitadas. También puede darse el caso de que no sea posible expandir la macro. En el ejemplo, no hubiera sido posible ejecutar SUMAR AX, BX, DL porque DL es de 8 bits y la instrucción MOV DL, AX sería ilegal. ETIQUETAS DENTRO DE MACROS. VARIABLES LOCALES Son necesarias normalmente para los saltos condicionales que contengan las macros más complejas. Si se pone una etiqueta a donde saltar, la macro sólo podría ser empleada una vez en todo el programa para evitar que dicha etiquete aparezca duplicada. La solución está en emplear la directiva LOCAL que ha de ir c olocada justo después de la directiva MACRO:
117
Excelencia Académica
MINIMO
Ya_esta:
MACRO
dato1, dato2, resultado
LOCAL
ya_esta
MOV
AX, dato1
CMP
AX, dato2
; ¿es dati1 el menor?
JB
ya_esta
; sí
MOV
AX, dato2
; no, es dato2
MOV
resultado, AX
ENDM En el ejemplo, al invocar la macro dos veces el ensamblador no generará la etiqueta “ya_esta” sino las etiquetas ? ?0000, ??0001, … y así sucesivamente. La directiva LOCAL no sólo es útil para los saltos condicionales en las macros, también permite declarar variables internas a los mismos. Se puede indicar un número casi indefinido de etiquetas con la directiva LOCAL, separándolas por comas. 8.20. OPERADORES DE MACROS. * Operador ;; Indica que lo que viene a continuación es un comentario que no debe aparecer al expansionar la macro. Cuando al ensamblar se genera un listado del program, las macros suelen aparecer expandidas en los puntos en que se invocan; sin embargo sólo aparecerán los comentarios normales que comiencen po (;). Los comentarios relacionados con el funcionamiento interno de la macro deberían ir con (;;), los relativos al uso y sintaxis de la misma con (;). Esto es addemás conveniente porque durante el ensamblaje son mantenidos en memoria los comentarios de macros (no los del resto del programa) que comienzan por (;), y no conviene desperdiciar memoria… * Operador & Utilizado par concatenar texto o símbolos. Es necesario para lograr que el ensamblador sustituya un parámetro dentro de una cadena de caracteres o como parte de un símbolo: SALUDO Etiqueta&c:
MACRO
c
MOV
AL, “&c”
CALL
imprimir
ENDM
118
Excelencia Académica
Al ejecutar SALUDO A se producirá la siguiente expansión: MOV AL, “A” Etiqueta A:
CALL imprimir
Si no se hubiera colocado el & se hubiera expandido como MOV AL, “c” Cuando se utilizan estructuras repetitivas REPT, IRP o IRPC existe un problema adicional al intentar crear etiquetas, ya que el ensamblador se come un & al hacer la primera sustitución, generando la misma etiqueta a menos que se duplique el operador &: MEMORIA X&j
MACRO
x
IRP
i, <1, 2>
DB
i
ENDM ENDM Si se invoca MEMORIA ET se produce el error de “etiqueta Sti repetida2, que se puede salvar añadiendo tantos ‘&’ como niveles de anidamiento halla en las estructuras repetitivas empleadas, como se ejemplifica a continuación: MEMORIA X&&i
MACRO
x
IRP
i,<1, 2>
DB
i
ENDM ENDM Lo que con MEMORIA ET generará correctamente las líneas: ET1
DB1
ET2
DB2
* Operador ! o <> Empleado para que el carácter que viene a continuación debe ser interpretado literalmente y no como un símbolo. Por ello, !; es equivalente a <;>. * Operador %
119
Excelencia Académica
convierte la expresión que el sigue –generalmente un símbolo- a un número; la expresión debe ser una constante (no relocalizada). Sólo se emplea en los argumentos de macros. Dada la macro siguiente: PSUM
MACRO
mensaje, suma
%OUT
*mensaje, suma*
ENDM (Evidentemente, el % que precede a OUT forma parte de la directiva y no se trata del % operador que estamos tratando). Supuesta la existencia de estos símbolos: SIM1
EQU 120
SIM2
EQU 500
Invocando loa macro con las siguientes condiciones: PSUM
, (SIM1 + SIM2)
Se produce la siguiente expansión: %OUT * SIM1 + SIM2 = (SIM1 + SIM2) * Sin embargo, invocando la macro de la siguiente manera (con %): PSUM < SIM1 + SIM2 = >, %(SIM1 + SIM2) Se produce la expansión deseada: %OUT * SIM1 + SIM2 = 620 * DIRECTIVAS UTILES PARA MACROS. Estas directivas pueden ser empleadas también sin las macros, aumentando la comodidad de la programación, aunque abundan especialmente dentro de las macros. * REPT veces… ENDM (Repeat)
120
Excelencia Académica
permite repetir cierto número de veces una secuencia de instrucciones. El bloque de instrucciones se delimita con ENDM (no confundirlo con el final de una macro). Por ejemplo: REPT 2 OUT DX, AL ENDM Esta secuencia se transformará, al ensamblar, en lo siguiente: OUT DX, AL OUT DX, AL Empleando símbolos definidos con (=) y apoyándose además an las macros s e puede llegar a crear pseudo-instrucciones muy potentes: SUCESION
MACRO n num = 0 REPT n DB num num = num + 1 ENDM
; fin de REPT
ENDM
; fin de macro
La sentencia SUCESION 3 provocará la siguiente expansión: DB
0
DB
1
DB
2
* IRP Símbolo_control, … ENDM (Indefinite repeat) Es relativamente similar a la instrucción FOR de los lenguajes de alto nivel. Los ángulos (<) y (>) son obligatorios. El símbolo de control va tomando sucesivamente los valores (no necesariamente numéricos) arg1, arg2, … y recorre en cada pasada todo el bloque de instrucciones hasta alcanzar el ENDM (no confundirlo con fin de macro) sustituyendo símbolo_control por esos valores en todos los lugares en que aparece: IRP
i, <1,2,3>
DB 0, i, i*i ENDM 121
Excelencia Académica
Al expansionarse, este conjunto de instrucciones se convierte en lo siguiente: DB
0, 1, 1
DB
0, 2, 4
DB
0, 3, 9
Nota: Todo lo encerrado entre los ángulos se considera un único parámetro. Un (;) dentro de los ángulos no se interpreta como el inicio d eun comentario sino como un elemento más. Por otra parte, al emplear macros anidadas, deben indicarse tantos símbolos angulares ‘<’ y ‘>’ consecutivos como niveles de anidamiento existan. Lógicamente, dentro de una macro también resulta bastante útil la estructura IRP: TETRAOUT MACRO
p1, p2, p3, p4, valor
PUSH
AX
PUSH
DX
MOV
AL, valor
IRP
cn; MOV DX, cn OUT DX, AL
ENDM
; fin de IRP
POP DX POP AX ENDM
;fin de macro
Al ejecutar TETRAOUT 318h, 1C9h, 2D1h, 1ª4h, 17 se obtendrá:
122
PUSH
AX
PUSH
DX
MOV
AL, 17
MOV
DX, 318h
OUT
DX, AL
MOV
DX, 1C9h
OUT
DX, AL
MOV
DX, 2D1h
OUT
DX, AL
MOV
DX, QA4h
Excelencia Académica
OUT
DX, AL
POP
DX
POP
AX
Cuando se pasan listas como parámetros hay que encerrarlos entre ‘<’ y ‘>’ al llamar, para no confundirlas con elementos independientes. Por ejemplo, supuesta la macro INCD: INCD MACRO IRP
lista. P i,
INC ENDM
i ;fin de IRP
DEC p ENDM
;fin de macro
Se comprende la necesidad de utilizar los ángulos: INCD AX, BX, CX, DX se expandirá: INC
AX
DEC
BX; CX Y DX se ignoran (4 parámetros)
INCD , DX se expandirá: INC
AX
INC
BX
INC
CX
INC
DX
; (2 parámetros)
* IRPC símbolo_comtrol, … endm (Indefinite repeat character) esta directiva es similar a la anterior, con una salvedad: los elementos situados entre los ángulos (<) y (>) –ahora opcionales, por cierto- soncaracteres ASCII y no van separados por comas: IRPC i, <813> DB i ENDM El bloque anterior generará al expandirse: 123
Excelencia Académica
DB
8
DB
1
DB
3
Ejemplo de utilización dentro de una macro (en combinación con el operador &): INICIALIZA
MACRO a, b, c, d IRPC
iter, <&a&b&c&d>
DB iter ENDM
; fin de IRPC
ENDM
; fin de macro
Al ejecutar INICIALIZA 7, 1, 4, 0 se produce produce la siguiente expansión: expansión: DB
7
DB
1
DB
4
DB
0
* EXITM sirve para abortar la ejecución de un bloque MACRO, REPT, IRP ó IRPC. Normalmente se utiliza apoyándose en una directiva condicional (IF … ELSE … ENDIF). Al salir del bloque, se pasa al nivel inmediatamente superior (que puede ser otro bloque de estos). Como ejemplo, la siguiente macro reserva n bytes de memoria a cero hasta un máximo de 100, colocando un byte 255 al final del bloque reservado: MALLOC
MACRO n maximo = 100 REPT n IF maximo EQ 0 ; ¿ya van 100? EXITM
; abandonar REPT
ENDIF maximo = maximo – 1 DB 0
; reservar byte
ENDM DB 255 ENDM
124
; byte de fin de bloque
Excelencia Académica
MACROS AVANZADAS CON NUMERO VARIABLE DE PARAMETROS. Como se vió al estudiar la directiva IF, existe la posibilidad de chequear condicionalmente la presencia de un parámetro por emdio de IFNB, o su ausencia con IFB. Uniendo esto a la potencia de IRP es posible crear macros extraordinariamente versátiles. Como ejemplo, valga la siguiente macro, destinada a introducir en la pila un número variables de parámetros (hasta 10): es especialmente útil en los programas que gestionan interrupciones: PUSH
MACRO R1, R2, R3, R4, R5, R6, R7, R8, R9, R10 IRP reg, < R1, R2, R3, R4, R4, R5, R6, R7, R8, R9, R10> R10> IFNB PUSH reg ENDIF ENDM
; fin de IRP
ENDM
;fin de XPUSH
Por ejemplo, la instrucción: XPUSH AX, BX, DS, ES, VAR1 Se expandirá en : PUSH AX PUSH AX PUSH DS PUSH ES PUSH VAR1 El ejemplo anterior es ilustrado del mecanismo de comprobación de presencia de parámetros. Sin embargo, este ejemplo puede ser optimizado notablemente empleando una lista como único parámetro: XPUSH
MACRO lista IRP i, PUSH i ENDM ENDM 125
Excelencia Académica
XPOP
MACRO lista IRP i, POP i ENDM ENDM
La ventaja es el número indefinido de parámetros soportados (no sólo 10). Un ejemplo de uso puede ser el siguiente : XPUSH
XPOP Que al expandirse queda: PUSH AX PUSH BX PUSH CX POP CX POP BX POP AX EJERCICIOS : Escribir un archivo que contenga las siguientes macros y grabarlo con el nombre “LIBRERÍA.MAC”. el listado del archivo se muestra a continuación: ; Curso:
MICROPROCESADORES Y LENGUAJE ASSEMBLER
; Profesor:
Inf. Alfredo Granados Ly
; Archivo:
LIBRERÍA.MAC Archivo de librería de macros
; Fecha:
18/11/99
;********************************* ;**************************************************** *************************************** *************************************** ************************** ******* ; Establece la posición del cursor en el modo texto: 80x25 CURSOR
MACRO
FILA, COLUMNA
PUSHA MOV DH, FILA MOV DL, COLUMNA MOV BH, 0 126
Excelencia Académica
MOV AH, 2 INT 10H POPA ENDM ;********************************* ;**************************************************** *************************************** *************************************** ************************** ******* ; Dibuja un pixel en el modo VIDEO con c on color. PIXEL MACRO FILA, COLUMNA, COLOR PUSHA MOV AH, 0CH MOV AL, COLOR MOV BH, 0 MOV CH, columna MOV DX, FILA INT
10H
POPA ENDM ;********************************* ;**************************************************** *************************************** *************************************** **************************;Dibuj *******;Dibuj a un cuadrado en el modo gráfico. CUADRADO MACRO
FILX, COLX, FILY, COLY, COLOR
LOCAL O_LAZ1, O_LAZ2, O_LAZ3, O_LAZ4 MOV CX, COLX O_LAZ1: PIXEL FILX, CX, COLOR INC CX CMP CX, COLY JNE O_LAZ1 MOV CX, COLX O_LAZ2: PIXEL FILX, CX, COLOR INC CX CMP CX, COLY JNE O_LAZ2 127
Excelencia Académica
MOV CX, FILX O_LAZ3: PIXEL DX, COLX, COLOR INC DX CMP DX, FILY JNE O_LAZ3 MOV DX, FILX O_LAZ4: PIXEL DX, COLLY, COLOR INC DX CMP DX, FILY JNE O_LAZ4 ENDM ;**************************************************************************************************;Esta blece el modo de video: Texto o gráfico. MODOVIDEO MACRO MODO PUSHA MOV AH,0 MOV AL, MODO INT 10H POPA ENDM ;**************************************************************************************************; Limpia la pantalla en el modo de texto. CLS
MACRO PUSHA
MOV CX, 0 MOV DX, 2479H MOV BH,7 MOV AX,0600H INT 10H 128
Excelencia Académica
POPA ENDM ;**************************************************************************************************; Genera un retardo por software: TOTAL = TIME1 * TIME2 * TIME3 veces. RETARDO
MACRO TIME1, TIME2, TIME3
LOCAL P1, P2, P3 PUSHA MOV DX, TIME1 P1:
MOV CX, TIME2
P2:
MOV BX, TIME3
P3:
DEC BX JNZ P3 DEC CX JNZ P2 DEC DX JNZ P1 POPA ENDM
;**************************************************************************************************; Imprime una cadena de caracteres. CADENA
MACRO BUFFER PUSHA LEA DX, BUFFER MOV AH,9 INT 21H POPA ENDM
;************************************************************************************************** ; Llama las funciones de la Interrupción 21h. FUNCION
MACRO N MOV AH,N INT 21H 129
Excelencia Académica
ENDM ;**************************************************************************************************; Rutina en segundos utilizados en reloj (1-60). SEGUNDOS MACRO SEG LOCAL OTRO PUSHA MOV AH,2CH INT 21H MOV BH,DH ADD BH,SEG CMP BH,60 JL OTRO SUB BH,60 OTRO: MOV AH,2CH INT 21H CMP BH,DH JNE OTRO POPA ENDM ;**************************************************************************************************; Ver al mouse en pantalla. VER_MOUSE MACRO PUSH AX MOV AX,01H INT 33H ENDM ;**************************************************************************************************; No ver el mouse. NO_MOUSE MACRO PUSH AX MOV AX,02H 130
Excelencia Académica
INT 33H POP AX ENDM ;**************************************************************************************************; Leer coordenadas del mouse. LEER_MOUSE
MACRO PUSH AX MOV AX,03H INT 33H POP AX ENDM
NOTA: La instrucción PUSHA y POPA son de los microprocesadores 286, para arriba. PROGRAMA No 1. Utilizando el editor escribir el siguiente, un programa que realice un cuenta regresiva de 10 segundos, mostrando un saludo al inicio y al final de la cuenta. ; INCTEL – DC ; Curso
:
MICROPROCESADORES Y LENGUAJE ASSEMBLER
; Profesor
:
Ing. Alfredo Granados Ly
; Archivo
:
EJEM!.asm
; Fecha
: 18/11/99.
IF1 INCLUDE LIBRERÍA.MAC ENDIF .286 .MODEL SMALL .STACK 100H .DATA LOGO1 DB “HOLA
:-)$”
LOGO2 DB “ADIOS :-)$” 131
Excelencia Académica
.CODE MOV AX, @DATA MOV DS,AX CLS CURSOR 12,37 CADENA LOGO1 MOV CL,9 LAZO: CURSOR 13,40 MOV DL,CL ADD DL,30H FUNCION 02H SEGUNDOS 1 LOOP LAZO CURSOR 13,40 MOV DL,20H FUNCION 02H CURSOR 14,37 CADENA LOGO2 FUNCION 4CH END EJERCICIOS: 1. Escriba un programa que muestre en el centro de la pantalla su nombre, de tal manera que se imprima un carácter de su nombre por segundo (debe generar un pitido al momento de la impresión). 2. Escriba un programa que pida su nombre y lo muestre en sentido inverso: Ingrese su nombre:
ALFREDO
En sentido inverso:
ODERFLA.
PROGRAMA No 2. El desplazamiento de las imágenes de pantalla (scrolling) y el paginado son dos métodos diferentes de transferir bloques de información de memoria a pantalla. En el primero de ellos 132
Excelencia Académica
uno de los bordes de la pantalla actúa como “sumidero” de la información que se genera en el borde opuesto las nuevas líneas se van creando a partir de los datos de memoria; repitiendo esta acción línea a línea se crea la ilusión de un texto en movimiento. Cuando se desea desplazar verticalmente una pantalla de texto, se envían las líneas 2 a 25 a las 1 a 24, y se añade la siguiente línea de datos a la memoria, almacenándola en la línea 25. En esta operación, se “pierde” la línea superior de los datos, aunque continúa existiendo en memoria. El funcionamiento descendente funciona del mismo modo. El siguiente programa hace uso del desplazamiento hacia arriba y debajo de un sector de la pantalla. Para eso se hace uso de las funciones 06h y07h de la interrupción 10h. AH = 06H
Función de deslizar hacia arriba.
AH = 07H
función de deslizar hacia abajo.
AL = Líneas a deslizar. BH = Atributo de relleno. CH = Fila superior CL = Columna izquierda. DH = Fila inferior DL = Columna derecha. ; INCTEL – DC ; Curso
:
MICROPROCESADORES Y LENGUAJE ASSEMBLER
; Profesor
:
Ing. Alfredo Granados Ly
; Archivo
:
EJEM!.asm
; Fecha
: 18/11/99.
IF1 INCLUDE LIBRERÍA.MAC ENDIF .286 .MODEL SMALL .STACK 100H 133
Excelencia Académica
.DATA LOGO1 DB “========$” LOGO2 DB “| /\/ # \/\ |$” LOGO3 DB “| \ 0 0 / |$” LOGO4 DB “|
!
|$”
LOGO5 DB “|
\_/
|$”
LOGO6 DB “| BATMAN |$” LOGO7 DB “========$” .CODE MOV AX, @DATA MOV DS,AX CLS CURSOR 8,35 CADENA LOGO0 CURSOR 9,35 CADENA LOGO1 CURSOR 10,35 CADENA LOGO2 CURSOR 11,35 CADENA LOGO3 CURSOR 12,35 CADENA LOGO4 CURSOR 13,35 CADENA LOGO5 CURSOR 14,35 CADENA LOGO6 CURSOR 15,35 CADENA LOGO7
MOV CL,9 MOV AL,1 LAZO: MOV AH,6 134
; Desplazar una línea.
Excelencia Académica
CALL DESPZ RETARDO 5000,500,10 MOV AH,7 CALL DESPZ REATRDO 5000,500,10 LOOP LAZO FUNCION 4CH DESPZ PROC PUSH CX PUSH DX MOV CH,09
; línea superior izquierda
MOV CL,36
; columna superior izquierda
MOV DH,13
; línea inferior derecha
MOV DL,45
; columna superior derecha
INT 10H POP DX POP CX RET DESPZ ENDP END EJERCICIOS: 1. Escribir un programa que muestre su nombre desplazando de izquierda a derecha. 2. Escribir un programa que imprima su nombre en el centro superior de la pantalla y que deje caer letra por letra hacia la parte inferior de la pantalla. PROGRAMA No 3. El siguiente programa tiene por objeto explicar el funcionamiento del mouse utilizando la interrupción 33h. Para la ejecución de este programa asegúrese de haber corrido antes el archivo: MOUSE.EXE o MOUSE.COM (si está trabajando bajo D.O.S).
135
Excelencia Académica
Para ello hay que cambiar el modo de pantalla del modo texto (80x25) al modo gráfico (640x480) para esto utilizamos la función 00h de la interrupción 10H, el modo de video se especifica en el registro AL. AL = 01H
: texto de 40x25, 16 colores.
AL = 02H
: texto de 80x25, 16 colores.
AL = 05H
: gráfico 320x200, 4 colores.
AL = 06H
: gráfico 640x200, 2 colores.
AL = 0EH
: gráfico 640x200, 16 colores.
AL = 10H
: gráfico 640x350, 16 colores.
AL = 11H
: gráfico 640x480, 2 colores.
AL = 12H
: gráfico 640x480, 16 colores.
También se utiliza la macro para escribir un pixel en pantalla para dibujar un rectángulo. AH = 0CH
: escribir un pixel en pantalla.
AL = color BH = página de visulización. CX = columna de pixel. DX = fila de pixel. INT 10H Y por último las funciones para el manejo del mouse: AX = 1
: Visualización del mouse.
AX = 2
: No visualiza el mouse.
AX = 3
: Leer la posición del mouse. BX = devuelve el botón pulsado. Si BX = 2 entonces se pulso el boton derecho. Si BX = 1 entonces se pulso el boton izquierdo. CX = la posición de la fila DX = la posición de la columna.
El siguiente programa dibujará un cuadrado en pantalla que funcionará como el botón de SALIR en las aplicaciones WINDOWS, de tal manera que para salir del programa hay que pulsar con el boton derecho dentro del rectángulo dibujado. 136
Excelencia Académica
; INCTEL – DC ; Curso
:
MICROPROCESADORES Y LENGUAJE ASSEMBLER
; Profesor
:
Ing. Alfredo Granados Ly
; Archivo
:
EJEM!.asm
; Fecha
: 18/11/99.
IF1 INCLUDE LIBRERÍA.MAC ENDIF .286 .MODEL SMALL .STACK 100H .DATA FILA DW ? COLUMNA DW ? BOTON DW ? .CODE MOV AX,@DATA MOV DS,AX MODOVIDEO 12H
; Gráfico 640x480 – 16 colores.
CUADRADO 50,50,100,100,14 VER_MOUSE ESPERA: LEER_MOUSE MOV FILA.CX MOV COLUMNA.DX MOV BOTON.BX
; 01 = Izquierda
02 = Derecha.
CMP BOTON,2 JNE ESPERA CMP FILA,50 137
Excelencia Académica
JGE X1X1 JMP ESPERA X1X1: CMP FILA 100 JL X2X2 JMP ESPERA X2X2: CMP COLUMN,50 JGE X3X3 JMP ESPERA X3X3: CMP COLUMNA,100 JLX4X4 JMP ESPERA X4X4: MODOVIDEO 02H
; Texto 80x25 – 16 colores.
FUNCION 4CH END EJERCICIOS: 1. Escriba un programa que dibuje 16 líneas a lo largo de la pantalla cada una de diferente color. 2. Escriba un programa de manera que se grafique una línea entre dos puntos que han sido seleccionados utilizando el botón izquierdo del mouse.
138
Excelencia Académica
PROGRAMACION MODULAR Y PASO DE PARÁMETROS. Aunque lo que viene a continuación no es indispensable para programar en ensamblador, si es conveniente leerlo en 2 ó 3 minutos para observar ciertas reglas muy sencillas que ayudarán a hacer programas seguros y eficientes . La programación modular consiste en dividir los problemas más complejos en módulos separados con unas ciertas interdependencias, lo que reduce el tiempo de programación y aumenta la fiabilidad del código. Se pueden implementar en ensamblador con las directivas PROC y ENDP que, aunque no generan código son bastante útiles para dejar bien claro dónde empieza y acaba un módulo. Reglas para la buena programación: -
Dividir los problemas en módulos pequeños relacionados sólo por un conjunto de parámetros de entrada y salida.
-
Una sola entrada y salida en cada módulo: un módulo sólo debe llamar al inicio de otro (con CALL) y éste debe retornar al final con un único RET, no debiendo existir más puntos de salida y no siendo recomendable alterar la dirección de retorno.
-
Excepto en los puntos en que la velocidad o, la memoria son críticas (la experiencia demuestra que son menos del 1%) debe codificarse el programa con claridad, si es preciso perdiendo eficiencia. Ese 1% documentarlo profusamente como se haría para que lo lea otra persona.
-
Los módulos han de ser “cajas negras” y no deben modificar el entorno exterior. Esto significa que no deben actuar sobre variables globales ni modificar los registros (excepto aquellos registros y variables en que devuelven los resultados, lo que debe documentarse claramente al principio del módulo). Tampoco deben depender de ejecuciones anteriores, salvo excepciones en que la propia claridad del programa obligue a lo contrario (por ejemplo, los generadores de números aleatorios pueden depender de la llamada anterior).
Para el paso de parámetros entre módulos existen varios métodos que se exponen a continuación. Los parámetros pueden pasarse además de dos maneras: directamente por valor, o bien indirectamente por referencia o dirección. En el primer caso se envía el valor del parámetro y en el segundo la dirección inicial de memoria a partir de la que está 139
Excelencia Académica
almacenado. El tipo de los parámetros habrá de estar debidamente documentado al principio de los módulos. -
Paso de parámetros en los registros: los módulos utilizan ciertos registros muy concretos para comunicarse. Todos los demás registros han de permanecer inalterados, por lo cual, si son empleados internamente, han de ser preservados al principio del módulo y restaurados al final. Este es el método empleado por el DOS y la BIOS en la mayoría de las ocasiones para comunicarse con quien los llama. Los registros serán preservados preferiblemente en la pila ( con PUSH) y recuperados de la misma (con POP en orden inverso); de esta manera, los módulos son reentrantes y pueden ser llamados de manera múltiple soportando, entre otras características, la recursividad (sin embargo, se requerirá también que las variables locales se generen sobre la pila).
-
Paso de parámetros a través de un área común: se utiliza una zona de memoria para la comunicación. Este tipo de módulos no son reentrantes y hasta que no acaben de procesar una llamada no se les debe llamar de nuevo en medio de la faena.
Los parámetros para programar depende de cómo se maneje las instrucciones, los registros, la pila, etc. En la pita se apilan antes de llamar al módulo que los va a acoger. Este debe conocer el número y tamaño de los mismos, para equilibrar el puntero de pila al final antes de retornar, o en caso contrario el programa que llama deberá encargarse de esta operación.
140
Excelencia Académica
*. ROBER L. BOYLESTAD, LOUIS NASHELSKYElectronica: Teoria de circuitos Editorial Prentice-hall Sexta Edición Mejico Año 1999 *. VICTOR P. NELSON, H. TROY N., BILL D. CARROLL, J. DAVID I. Análisis y diseño de circuitos lógicos Primera Edición Méjico *. Texas Instruments Second Edition Printed in USA
Año 1996
The TTL Data Book for Design Engineers Año 1981
*. CMOS INTEGRATED CIRCUITS Nacional Semiconductor Corporation Primera Edition Santa Clara CALIFORNIA Año 1985 *. INICTEL 2001
Electrónica de los Circuitos digitales
*. GRANADOS LY ALFREDO PERU Año 2001.
Peru
Microprocesadores y Lenguaje Assembler
Año INICTEL
141