practica actividad 8

31
INSTITUTO TECNOLÓGICO DE CELAYA [Práctica referente a la actividad 8] ASIGNATURA: LENGUAJEZ DE INTERFAZ Profesor: GONZÁLEZ GONZÁLEZ RICARDO Alumnos: CAMACHO ROCHA JUAN JESÚS GÓMEZ LÓPEZ JOSÉ ELIAS ARROYO PICHARDO LUIS MANUEL FECHA DE ENTREGA :[12/06/2013]

Upload: juan-jesus-camacho-rocha

Post on 26-Oct-2015

92 views

Category:

Documents


0 download

TRANSCRIPT

INSTITUTO TECNOLÓGICO DE CELAYA [Práctica referente a la actividad 8] ASIGNATURA: LENGUAJEZ DE INTERFAZ Profesor: GONZÁLEZ GONZÁLEZ RICARDO Alumnos: CAMACHO ROCHA JUAN JESÚS GÓMEZ LÓPEZ JOSÉ ELIAS ARROYO PICHARDO LUIS MANUEL FECHA DE ENTREGA :[12/06/2013]

INSTITUTO TECNOLÓGICO DE CELAYA

CARRERA NOMBRE DE LA ASIGNATURA

ING. EN SISTEMAS COMPUTACIONALES LENGUAJES DE INTERFAZ

NOMBRE DE LA PRÁCTICA DURACIÓN

Actividad 8 5 días

INTRODUCCIÓN

El lenguaje ensamblador x86 es la familia de los lenguajes ensambladores para los procesadores de la familia x86, que incluye desde los procesadores Intel 8086 y 8088, pasando por los Pentium de Intel y los Athon de AMD y llegando hasta los últimos procesadores x86 de estas compañías. Los procesadores Intel 8086 y 8088 fueron los primeros de 16 bits en tener un conjunto de instrucciones conocido actualmente como x86. Fueron un paso evolutivo en comparación con la generación anterior de CPU’s de 8 bits, como el 8080 y heredaron muchas características e instrucciones, las cuales fueron extendidas para trabajar con 16 bits. Ambos CPU’s contenían un bus de direcciones de 20 bits y un grupo de registros internos de 16 bits.

OBJETIVO

El alumno deberá adquirir la competencia para elaborar un programa en lenguaje ensamblador que sea capaz de capturar dos secuencias de 8 dígitos binarios. A dichas secuencias se les deberán aplicar 3 operaciones lógicas de las cuales se mostrara su resultado en pantalla.

Operaciones lógicas por aplicar: AND, OR y XOR.

Ejemplo: Secuencia1: 10101001 Secuencia2: 01110100 AND 00100000 OR 11111111 XOR 11011101

Después de elaborar el programa y mostrar la salida en pantalla el alumno deberá utilizar su ingenio para poder producir una salida a través del puerto paralelo y mostrar en una Protoboard los resultados obtenidos anteriormente de las operaciones lógicas. El trabajo del Protoboard consiste en encender o apagar un conjunto de 8 leds que son la representación binaria de dicha operación.

FUNDAMENTO

Bit es el acrónimo Binary digit (dígito binario). Un bit es un dígito del sistema de numeración

binario.

Mientras que en el sistema de numeración decimal se usan diez dígitos, en el binario se usan

sólo dos dígitos, el 0 y el 1. Un bit o dígito binario puede representar uno de esos dos

valores, 0 ó 1.

Se puede imaginar un bit, como una bombilla que puede estar en uno de los siguientes dos

estados:

Apagada o Encendida

Puerta lógica

Una puerta lógica, o compuerta lógica, es un dispositivo electrónico con una función booleana. Suman, multiplican, niegan o afirman, incluyen o excluyen según sus propiedades lógicas. Se pueden aplicar a tecnología electrónica, eléctrica, mecánica, hidráulica y neumática. Son circuitos de conmutación integrados en un chip.

Puerta AND

Símbolo de la función lógica Y: a) Contactos, b) Normalizado y c) No normalizado

La puerta lógica Y, más conocida por su nombre en inglés AND ( ), realiza la

función booleana de producto lógico. Su símbolo es un punto (·), aunque se suele omitir. Así, el

producto lógico de las variables A y B se indica como AB, y se lee A y B o simplemente A por B.

La ecuación característica que describe el comportamiento de la puerta AND es:

Su tabla de verdad es la siguiente:

Tabla de verdad puerta AND

Entrada Entrada Salida

0 0 0

0 1 0

1 0 0

1 1 1

Así, desde el punto de vista de la aritmética módulo 2, la compuerta AND implementa el

producto módulo 2.

Puerta OR

Símbolo de la función lógica O: a) Contactos, b) Normalizado y c) No normalizado

La puerta lógica O, más conocida por su nombre en inglés OR ( ), realiza la operación

de suma lógica.

La ecuación característica que describe el comportamiento de la puerta OR es:

Su tabla de verdad es la siguiente:

Tabla de verdad puerta OR

Entrada Entrada Salida

0 0 0

0 1 1

1 0 1

1 1 1

Podemos definir la puerta O como aquella que proporciona a su salida un 1 lógico si al menos

una de sus entradas está a 1.

Puerta OR-exclusiva (XOR)

Símbolo de la función lógica O-exclusiva: a) Contactos, b) Normalizado y c) No

normalizado

La puerta lógica OR-exclusiva, más conocida por su nombre en inglés XOR, realiza la función

booleana A'B+AB'. Su símbolo (signo más "+" inscrito en un círculo). En la figura de la

derecha pueden observarse sus símbolos en electrónica.

La ecuación característica que describe el comportamiento de la puerta XOR es:

|-

Su tabla de verdad es la siguiente:

Tabla de verdad puerta XOR

Entrada Entrada Salida

0 0 0

0 1 1

1 0 1

1 1 0

Se puede definir esta puerta como aquella que da por resultado uno, cuando los valores en las

entradas son distintos. Ejemplo: 1 y 0, 0 y 1 (en una compuerta de dos entradas). Se obtiene

cuando ambas entradas tienen distinto valor.

MATERIAL

Pc con Salida puerto paralelo

Sistema Operativos Windows Xp Profesional

Protoboard

8 leds

Cable para Protoboard

8 Resistencias de 220 Ohms

Software Emulador 8086

Software UserPort

Conocimientos básicos del lenguaje ensamblador para el procesador 8086 de Intel.

DESARROLLO

Paso 1 A continuación proceda a descargar del siguiente enlace el Software denominado Emu8086. Enlace para descarga: http://emu8086.waxoo.com/

Este emulador es indispensable debido a que nos brinda funciones específicas para poder compilar, emular y desarrollar programas ejecutables en lenguaje ensamblador para el procesador 8086 de Intel. Después de descargar el programa estos datos le serán indispensables para tener el programa completo y poder hacer uso de todas sus características: Datos

Usuario: Cracked-By-Team-AggressioN!!! Contraseña: Serial: KDLSR2ERKRG4U8PDP4UA

Paso 2 Proceda a abrir el archivo descargado denominado emu8006.exe y ejecútelo.

Acepte términos y condiciones, pulse Finish para dar por terminada la instalación.

Paso 3 Ejecutamos el acceso directo creado después de la instalación del emu8086. Después de ejecutar el acceso directo se indica ingresar un código para registrarlo y poder disfrutar de manera libre y completa de la aplicación. Dicho código le fue proporcionado en el Paso 1 de esta práctica. Favor de consultar este apartado.

Seleccionamos la parte indicada con color rojo.

Ingresamos los datos correspondientes y después damos clic en Ok para finalizar la activación del producto.

Listo! Ahora podemos utilizar la aplicación para desarrollar programas en lenguaje ensamblador.

Paso 4 Después de buscar diferentes alternativas para la solución del problema decidimos utilizar 2 cadenas, “Secuencia1 y Secuencia2” para el almacenamiento de nuestras secuencias a capturar, posteriormente declaramos 3 más de igual dimensión “VectorAnd, VectorOr y VectorXor” para guardar los resultados de las operaciones lógicas AND, OR y XOR.

En la imagen siguiente se muestra la parte del código donde se da comienzo al conjunto de sentencias o instrucciones a ejecutarse. Se puede apreciar la llamada a un procedimiento denominado Mesg el cual es el encargado de imprimir en pantalla la leyenda “Ingresa un numero de 8 dígitos

binarios” A continuación una etiqueta denominada ciclo, que no es mas que un loop o “ciclo” encargado de llenar y almacenar nuestra cadena de Bytes para la Secuencia1 introducida mediante teclado.

Este fragmento de código es similar al anterior al anterior la única diferencia es que este esta encargado de llenar y almacenar los datos para la Secuecia2.

Esta sección e código despliega Msg1 en pantalla el cual no hace más que escribir

en pantalla la leyenda “Secuencia1”, posteriormente el contenido almacenado en la cadena de caracteres Secuencia1. Enseguida se despliega en pantalla el Msg2 que es el que muestra en pantalla “Secuencia2” y por ultimo el contenido almacenado de la Secuencia2.

Ahora que capturamos las dos Secuencias binarias, podemos proceder a calcular el resultado de las operaciones lógicas. El siguiente fragmento de código se encarga de realizar la operación AND entre la Secuencia1 y la Secuencia2 Byte por Byte, después de calculada la operación el resultado es almacenado en la cadena de Bytes VectorAnd.

Después mostramos en pantalla MsgAnd que contiene la leyenda “AND:” y posterior a este también se imprime en pantalla la cadena VectorAnd, la cual contiene ahora el resultado de aplicar la operación AND entre la Secuencia1 y

Secuencia2. En esta sección también podemos apreciar que se realiza una conversión de símbolo en ASCII a el valor real de lo que tenemos almacenado en el VectorAnd, y permitirnos utilizar en operaciones aritméticas los valores contenidos en el mismo.

Después es llevado acabo un proceso de conversión de nuestra cadena VectorAnd a Decimal puesto que esta se conforma de 9 Bytes, “8 valores binarios y 1 fin de cadena” y como la salida por puerto paralelo solo cuenta con 8 bits de Salida, resulta imposible enviar la Cadena sin antes ser convertida a su equivalente en Decimal. Nota: Enseguida se explica el motivo concreto de porque realizamos una conversión VectorAnd = [0,0,0,0,0,0,0,0] donde cada cero equivale a un Byte. 8 Bytes = 64 Bits 1 Byte = 8 Bits Salida a puerto paralelo = 8 Bits Por ultimo se aprecia una parte del código en donde se carga al registro DX el puerto 0378h, posteriormente Suma que contiene el valor Decimal equivalente al Binario almacenado en nuestra Cadena VectorAnd, es almacenada en la parte baja del Registro AX y para finalizar se manda como salida Suma al puerto DX que tiene cargado el puerto de salida de datos.

Cada que se aprecien este par de líneas de código no indican mas que una interrupción o sea la 21h a DOS mediante la función 08h, la cual permite un tiempo de espera o valga la redundancia una interrupción al sistema hasta que sea ingresado un carácter por medio del teclado y sin generar Echo en pantalla. Esto nos permite visualizar de mejor manera nuestros resultados en pantalla. Y también nos da la libertad para decidir cuando ingresar un carácter mediante teclado y de esta forma continuar con la ejecución del programa.

El proceso para calcular OR es similar a calcular AND de hecho la sintaxis y lógica es la misma, las únicas diferencias existentes son que en esta es utilizada la operación lógica OR y el resultado de dicha operación será almacenado en la cadena de caracteres VectorOr.

El proceso para calcular XOR es idéntico a calcular las dos operaciones lógicas anteriores de hecho la sintaxis y lógica es la misma, las únicas diferencias existentes son que en esta es utilizada la operación lógica XOR y el resultado de dicha operación será almacenado en la cadena de caracteres VectorXor.

Una vez que se han realizado todas las operaciones lógicas y se mostraron sus respectivas salidas por medio del puerto paralelo es necesario terminar la ejecución del programa y es por este motivo que en esta parte del código se lleva a cabo un salto incondicional al Procedimiento Fin.

Por ultimo tenemos la declaración de procedimientos, los cuales han sido llamados en diferentes partes del programa y tienen por supuesto una función específica dentro del mismo. El procedimiento Salto fue creado para dar estructura a todas las impresiones mostradas en pantalla, el procedimiento Mesg tiene la función de desplegar en pantalla la leyenda “Ingresa una secuencia de 8 dígitos binarios” y este es llamado dos veces al inicio del programa para pedir al usuario ingrese los datos para la Secuencia1 y Secuencia2 con las que estuvimos trabajando. Por último y para finalizar el programa tenemos un procedimiento llamado Fin, el cual se encarga de terminar el programa mediante la Interrupción 21h Función 4ch.

Paso 5 Habilitación de puerto paralelo El puerto paralelo se utiliza generalmente para manejar impresoras. Sin embargo, dado que este puerto tiene un conjunto de entradas y salidas digitales, lo empleamos para hacer nuestra práctica ya que es una lectura de datos y estamos controlando un dispositivo.

Para poder tener un acceso libre al puerto paralelo debemos entrar de manera directa a la BIOS de nuestro PC y así poder tener un acceso total a dicho puerto. Depende de cada equipo la manera en la que se desea entrar a la BIOS en este caso nuestro ordenador se enciende y se debe presionar la tecla F1.

Ya en BIOS buscamos la configuración de los puertos. Una vez identificada la configuración del puerto seleccionamos la opción que dice que mantendrá el puerto de manera bidireccional.

¿Por qué tener el puerto en modo bidireccional?

Habilitar el puerto 378h que es el que utiliza el puerto paralelo para la entrada y salida de datos

Después de realizar los cambios en la configuración BIOS de tu equipo ingresa a la siguiente liga: http://hem.passagen.se/tomasf/UserPort/ Descarga el software Sotware:

UserPort.zip UserPort 2.0. Full port address range support.

Abre la carpeta de descargas y allí encontraras un archivo .Rar con el nombre UserPort y proseguimos para abrir el UserPort.Rar

Dentro del archivo UserPort.Rar se encuentra una carpeta con el mismo nombre, se abre y encontraremos los siguientes archivos

Extraemos los 3 archivos marcados en la imagen anterior y copiar el archivo UserPort.Sys. Una vez copiado dirígete a la unidad C de tu equipo, abre la carpeta que dice Windows y una vez dentro busca allí la carpeta de nombre System32, ábrela y allí Dentro encontraras una carpeta llamada Drivers es en esta carpeta específicamente que deberás pegar el archivo UserPort.Sys que ya habíamos copiado.( C:\Windows\System32\Drivers) Ahora debes regresar a la carpeta donde se extrajeron los archivos que estaba en el UserPort.rar, encontraras un archivo ejecutable pulsa doble click sobre el para inicializar la aplicación. Selecciona una a una la lista de intervalos que vienen por defecto y remuévelas presionando el botón REMOVE, ahora ingresa 000-378 y selecciona ADD Después selecciona el intervalo ingresado y da click en el botón Start, te deberá aparecer un mensaje idéntico al que te muestro en la imagen indicando que el puerto está activado o liberado.

Selecciona Aceptar y cierra la aplicación y procede a ejecutar el programa.

IMPORTANTE: La correcta implementación de este software es de vital importancia para que al momento de realizar esta práctica y llevar acabo la ejecución del programa podamos obtener los resultados deseados. Esto se debe a que si el puerto paralelo no se encuentra habilitado “liberado” será imposible mandar el Byte de a la salida al puerto y por ende imposible ver reflejados los resultados de las operaciones en nuestro Protoboard.

Paso 6 ELABORACION DE CIRCUITO CON LEDS

Primero antes de empezar el armado del circuito necesitaremos saber cómo es que funciona el puerto paralelo, para poder entonces llevar a cabo el proceso de armado del circuito y conexión del mismo al puerto paralelo. Nosotros usamos puertos para comunicarnos con la PC vía Módem, impresora, teclado, mouse, etc. Las señales que se envían y reciben en el puerto pueden ser “0″ ó “1″, lo cual sería apagado o encendido respectivamente. Un puerto paralelo puede enviar hasta 8 bits y recibir 5 al mismo tiempo. En la actualidad las computadoras modernas ya no traen integrado el puerto paralelo, por lo cual es necesario conseguir una computadora viejita que cuente con este tipo de puerto. En la siguiente imagen se muestra cual es el puerto paralelo de las computadoras viejitas:

La siguiente imagen nos muestra la funcionalidad de cada pin en este puerto.

DESARROLLO: Para enviar los datos por el puerto se utilizan los pines 2 al 9, esto significa que del pin 2 al 9 se debe de conectar la parte positiva de los leds que vamos a conectar en el circuito. Los puertos 18 al 25 se utilizan como tierra, por lo cual podemos conectar la parte negativa de los leds en cualquiera de estos pines. Los puertos que se muestran en color rojo (del pin 10 al 13 y 15) y los pines en color amarillo (pines 1, 14,16 y 17) no se utilizaran para nada, por lo cual no conectaremos ningún cable en estos pines.

La siguiente imagen muestra el diagrama de nuestro circuito que conectaremos al puerto paralelo.

Tabla de símbolos del diagrama del circuito.

D1,D2,D3,D4,D5,D6,D7,D8 Son leds que encenderemos.

R1,R2,R3,R4,R5,R6,R7,R8 Son resistencias

para proteger que nuestros leds se puedan quemar

GND Representa la

tierra.

Representa el cable con el que conectaremos cada elemento en el circuito.

El siguiente paso es conseguir una protoboard donde conectaremos todos los componentes del circuito. Para que puedan comprender mejor lo que es una protoboard a continuación damos una pequeña explicación de lo que es y como podemos utilizarla. El "protoboard", "breadboard" (en inglés) o "placa board" es un tablero con orificios conectados eléctricamente entre sí, habitualmente siguiendo patrones de líneas, en el cual se pueden insertar componentes electrónicos y cables para el armado y

prototipado de circuitos electrónicos y sistemas similares. Está hecho de dos materiales, un aislante, generalmente un plástico, y un conductor que conecta los diversos orificios entre sí. Uno de sus usos principales es la creación y comprobación de prototipos de circuitos electrónicos antes de llegar a la impresión mecánica del circuito en sistemas de producción comercial. ”Recuperado de: http://es.wikipedia.org/wiki/Placa_de_pruebas el 12 de junio de 2013”

Patrón típico de disposición de las láminas de material conductor en una placa de

pruebas. Una vez que ya hemos comprendido el funcionamiento de una protoboard, procederemos a conectar todos nuestros componentes eléctricos para poder formar nuestro circuito, y poder conectarlo a nuestro puerto paralelo de nuestra computadora.

PASO 7 El siguiente paso es crear un archivo Ejecutable del programa y para utilizamos el Software Emu8086, es necesario tener nuestro programa abierto en la aplicación y después dar click en el botón del panel superior que dice Compile, se te pedirá des un nombre a tu proyecto y en mi caso le daré el nombre de Lógico Leds como se muestra en la siguiente imagen, Después de seleccionar un nombre para tu proyecto da Click en Guardar.

Tu archivo ejecutable se ha guardado con éxito, ve la Unidad c: de tu ordenador y abre la carpeta Emu8086, en este sitio vas a encontrar un carpeta llamada MyBuild, ábrela y en ella busca el archivo que corresponda al nombre que le diste a tu programa. Bien, pues este es tu archivo ejecutable pulsa doble click izquierdo en el cada vez que desees

ejecutar el programa.

Esta imagen muestra la interfaz que veras después de ejecutar el programa, procede a introducir dos Secuencias de 8 dígitos binarios.

El primer resultado que se muestra en pantalla es el de la operación lógica AND entre la Secuencia1 y la Secuencia2. También podemos divisar el símbolo que representa a dicho número binario en código ASCII.

La imagen siguiente muestra la correcta salida de los bits señalados a través del puerto paralelo para la operación lógica AND.

El segundo resultado a mostrar en pantalla es el de la operación Logica OR entre la Secuencia1 y la Secuencia2. También podemos divisar el símbolo que representa a dicho número binario en código ASCII.

La imagen siguiente muestra la correcta salida de los bits señalados a través del puerto paralelo para la operación lógica OR.

El último resultado a mostrar en pantalla es el de la operación lógica XOR entre la Secuencia1 y la Secuencia2. También podemos divisar el símbolo que representa a dicho número binario en código ASCII.

La imagen siguiente muestra la correcta salida de los bits señalados a través del puerto paralelo para la operación lógica XOR.

Conclusión General

Para concluir la presente práctica, cabe señalar que los equipos de cómputo actuales que cuentan con versiones de un sistema operativo mayor al Windows 95, no permiten manipular directamente cualquier puerto de la computadora, desde un lenguaje ensamblador, por lo cual es necesario un driver (archivo *.sys) que comunique el software con un dispositivo hardware. Ya que si no se libera el puerto paralelo antes de ejecutar nuestro programa en ensamblador parecería que nuestro programa no funciona, ya que no encendería ningún led, cabe señalar que la sintaxis en lenguaje ensamblador para mandar señales a un puerto no es nada complicada, es muy simple, pero si no se tiene liberado el puerto parecería que esas líneas de código para mandar la señal al puerto no funcionaran. Es por ello que para poder saber si nuestro programa realmente funciona o si queremos hacer algunas pruebas de mandar señales al puerto, es de suma importancia liberar el puerto. Otra cosa importante por la cual escogimos mandar señales al puerto paralelo y no a otros puertos de la computadora, es porque este puerto paralelo manda 8 señales de forma paralela que representaría un Byte, por lo cual pudimos conectar 8 leds, en los diferentes pines del puerto, de esta forma pudimos encender los 8 leds al mismo tiempo, que a diferencia de otro puerto que manda las señales en forma serial, no podríamos conectar 8 leds diferentes, sino que solo podríamos conectar un solo led, que iría prendiendo o apagando para poder representar un Byte que se mandara a ese puerto

Nota: en un archivo alterno se encuentran pdf´s con información acerca de los materiales utilizados así como las pruebas de escritorio y apuntes personales que se necesitaron para poder llevar a cabo esta actividad.

Referencias Bibliográficas

http://www.ramonmedina.name/files/universidad/ac/ac0001.PDF http://www.rinconsolidario.org/eps/asm8086/CAP2.html http://es.wikipedia.org/wiki/Lenguaje_ensamblador_x86#Historia

https://es.wikipedia.org/wiki/Bit http://www.youtube.com/watch?v=vFnEN4s-zEw

http://www.portalhacker.net/index.php?topic=73143.28 http://moisesrbb.tripod.com/unidad6.htm#u644 http://moisesrbb.tripod.com/unidad5.htm http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r89572.PDF http://moisesrbb.tripod.com/unidad4.htm#unidad416