Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

UNIDAD 2 PROGRAMACIÓN BASICA

5,562 views

Published on

UNIDAD 2 PROGRAMACIÓN BASICA
Síntesis de información recopilada unidad 2 - lenguajes de interfaz
JESÚS ASMETH PÉREZ CAMACHO

Published in: Education
  • Be the first to comment

UNIDAD 2 PROGRAMACIÓN BASICA

  1. 1. Síntesis de información recopilada Unidad 2 Pérez Camacho Jesús Asmeth Ingeniería en Sistemas Computacionales, Instituto Tecnológico de Tuxtla Gutiérrez, Tuxtla Gutiérrez Chiapas killerMstr1@gmail.com Abstract—En este documento se recopila toda la información sobre la unidad 2 de lenguajes de interfaz y se realiza una breve y sintetizada descripción de cada subtema que corresponde a la unidad. I. INTRODUCCIÓN Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información. La información que hace que el hardware de la computadora realice una determinada actividad de llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elemen- tales de la máquina, por lo que al conjunto de dichas instruc- ciones que son interpretadas directamente por la máquina se denomina lenguaje máquina. El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras. Una instrucción en lenguaje máquina puede representarse de la siguiente forma: 011011001010010011110110 Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aún más difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas. II. DESARROLLO DE CONTENIDOS La programación en lenguaje ensamblador ofrece diferentes ventajas. Un programa escrito en lenguaje ensamblador re- quiere considerablemente menos memoria y tiempo de ejecu- ción que un programa escrito en un lenguaje de alto nivel. La programación en lenguaje ensamblador depende de la arquitectura del computador sobre el cual se trabaja, esto es importante para entender el funcionamiento interno de la máquina, por ello al programar en ensamblador se llega a comprender cómo funciona el computador y cómo es su estructura básica. La capacidad de poder escribir programas en lenguaje ensamblador es muy importante para los profe- sionales del área de Sistemas Operativos debido a que los programas residentes y rutinas de servicio de interrupción casi siempre son desarrollados en lenguaje ensamblador. Además, aun cuando la mayoría de los especialistas en programación desarrolla aplicaciones en lenguajes de alto nivel, que son más fáciles de escribir y de mantener, una práctica común es codificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en el procesamiento. A. Ensamblador (y ligador) a utilizar El término ensamblador se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente por el mi- croprocesador. El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los códigos nemotécnicos que aparecen por su código de operación correspondiente en sistema binario para la plataforma que se eligió como destino en las opciones específicas del ensamblador. Podemos distinguir entre dos tipos de ensambladores: Ensambladores básicos. Ensambladores modulares 32-bits o de alto nivel. Fig. 1. Diagrama de un ligador Un ligador, es un programa que enlaza todos los progra- mas o módulos obteniendo lo que denominamos programa ejecutable. Es un programa que enlaza distintos módulos o
  2. 2. programas que poseen subprogramas. Además incorporan las denominadas rutinas de librerías en caso de solicitarlas el propio programa. La generación de un módulo ejecutable a partir de una colección de procedimientos traducidos indepen- dientemente requiere un ligador. Sus principales funciones son: Enlazar código intermedio compilado independientemente en un solo módulo de carga resolviendo las diferencias entre Tokens. Incorpora las denominadas rutinas de librerías en caso de solicitarlas el propio programa. Su función es reducir procedimientos traducidos por separado y enlazarlos para que se ejecuten como una unidad llamada programa binario ejecutable. B. Ciclos numéricos Un ciclo, conocido también como iteración, es la repetición de un proceso un cierto número de veces hasta que alguna condición se cumpla. En estos ciclos se utilizan los brincos "condicionales" basados en el estado de las banderas. Por ejemplo la instrucción jnz que salta solamente si el resultado de una operación es diferente de cero y la instrucción jz que salta si el resultado de la operación es cero. Fig. 2. Ejemplo saltos y ciclos C. Captura básica de cadenas En el lenguaje ensamblador el tipo de dato cadena (string) no está definido, pero para fines de programación, una cadena es definida como un conjunto de localidades de memoria consecutivas que se reservan bajo el nombre de una variable. Instrucciones para el manejo de strings Instrucciones para el manejo de strings El lenguaje ensamblador cuenta con cinco instrucciones para el manejo de cadenas: MOVS: Mueve un byte o palabra desde una localidad de memoria a otra. LODS : Carga desde la memoria un byte en AL o una palabra en AX. STOS : Almacena el contenido del registro AL o AX en la memoria. CMPS : Compara localidades de memoria de un byte o palabra. SCAS : Compara el contenido de AL o AX con el contenido de alguna localidad de memoria. Las instrucciones para cadenas trabajan en conjunto con la instrucción CLD, la cual permite establecer que el sentido en el que las cadenas serán procesadas será de izquierda a derecha. Otra instrucción importante es el prefijo de repetición REP, el cual permite que una instrucción para manejo de cadenas pueda ser repetida un número determinado de veces. Los registros índice juegan un papel importante en el procesamiento de cadenas de datos, el par de registros CS:SI indican la dirección de la cadena original que será procesada, y el par ES:DI contienen la dirección donde las cadenas pueden ser almacenadas. Fig. 3. Captura básica de cadenas D. Comparación y prueba Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST. CMP (Comparar) compara si dos valores son iguales o diferentes. Su funcionamiento es similar al de la instrucción SUB (restar), sólo que no modifica el operando de destino, solamente modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF). Por ejemplo: CMP AX,33 Esta instrucción compara si el valor almacenado en el registro AX es igual que el valor 33 en decimal. Por otro lado, la instrucción TEST realiza la operación AND de los operandos especificados sin que el resultado se almacene en algún reg- istro, modificando únicamente ciertas banderas. Su aplicación más común es la de probar si algún bit es cero. Por ejemplo: Test AL,1 Esta instrucción prueba si el bit menos significativo de AL es 1 y Test AL,128 prueba si el bit más significativo de AL es 1. Por lo general estas instrucciones van seguidas de alguna de las instrucciones de salto. E. Saltos Se basan completamente en los flags, pero están simplifica- dos. Los saltos podrían resumirse en un modo "Basic" de la manera IF-THEN-GOTO de forma que cuando se cumple una condición se salta a un sitio determinado. He aquí los tipos de saltos condicionales (las letras en mayúsculas son las instrucciones): JO: Jump if overflow. Salta si el flag de desbordamiento está a uno
  3. 3. Fig. 4. Ejemplo comparación y prueba JNO: Jump if not overflow. Salta si el flag de desbor- damiento está acero. JC, JNAE, JB: Los tres sirven para lo mismo. Significan: Jump if Carry, Jump if Not Above or Equal y Jump if Below. Saltan por lo tanto si al haber una comparación el flag de acarreo se pone a 1; es entonces equivalente a < en una operación sin signo. JNC, JAE, JNB: Otros tres que valen exactamente para lo mismo. Jump if not Carry, Jump if Above or Equal y Jump if Not Below. Saltan por tanto si al haber una comparación el flag de acarreo vale 0, o sea, es equivalente al operador >= El salto sin condiciones, con el que podremos cambiarel control a cualquier punto del programa. Sería como el "Goto" del Basic, simplemente transferir el control a otro punto del programa. La orden esJMP (de Jump, salto) Si se recuerdan los registros CS:IP, se podrá ver qué es lo que hace realmente la instrucción, y no es más que incrementar o decrementar IP para llegar a la zona del programa a la que queremos transferir el control (IP es el Offset que indica la zona de memoria que contiene la siguiente instrucción a ejecutar, y CS el segmento). El formato más sencillo para el salto sería JMP 03424h, lo que saltaría a esa zona. Pero es algo complejo calcular en qué dirección va a estar esa instrucción, con lo que utilizaremos etiquetas. He aquí un ejemplo: MOV AX,0CC34h MOV CL,22h JMP PALANTE VUELVE:CMP BX,AX JMP FIN PALANTE: MOV BX,AX JMP VUELVE FIN: XOR CX,CX F. Ciclos condicionales Existen dos tipos de instrucciones de salto: las instrucciones de salto condicional y las de salto incondicional. Las instruc- ciones de salto condicional, revisan si ha ocurrido alguna situación para poder transferir el control del programa a otra sección. La siguiente es una lista de las instrucciones de salto condicional y su descripción: Fig. 5. Tipos de saltos JA o JNBE: Salta si está arriba o salta si no está por debajo o si no es igual (jump if above or jump if not below or equal). El salto se efectúa si la bandera de CF=0 o si la bandera ZF=0. JAE o JNB: Salta si está arriba o es igual o salta si no está por debajo (jump if above or equal or jump if not below). El salto se efectúa si CF=0. JB o JNAE: Salta si está por debajo o salta si no está por arriba o es igual (jump if below or jump if not above or equal). El salto se efectúa si CF=1. JBE o JNA: Salta si está por debajo o es igual o salta si no está por arriba (jump if below or equal or jump if not above). El salto se efectúa si CF=1 o ZF=1. JE o JZ: Salta si es igual o salta si es cero (jump if equal or jump if zero). El salto se efectúa si ZF=1. JNE o JNZ: Salta si no es igual o salta si no es cero (jump if not equal or jump if not zero). El salto se efectúa si ZF=0. JG o JNLE: Salta si es mayor o salta si no es menor o igual (jump if greater or jump if not less or equal). El salto se efectúa si ZF=0 u OF=SF. JGE o JNL: Salta si es mayor o igual o salta si no es menor (jump if greater or equal or jump if not less). El salto se efectúa si SF=OF. Fig. 6. Ciclos condicionales G. Incremento y decremento Son las más básicas a la hora de hacer operaciones con registros INC: Incrementar el valor de un registro o de cualquier posición en memoria, en una unidad y DEC lo decrementa. INC Ax Incrementa en una el valor de Ax DEC Ax Decrementa Ax, le resta uno. Estas 2 instrucciones equivalentes a "a++" , nos serviran bastante como contadores para bucles.
  4. 4. Ejemplos: INC AX ;AX=AX+1 INC VAR1 ;VAR1=VAR1+1 DEC AX ;AX=AX-1 DEC VAR1 ;VAR1=VAR1-1 y de las variables almacenadas en memoria. Fig. 7. Instrucciones aritméticas e incremento y decremento H. Captura de cadenas con formato Permiten el movimiento, comparación o búsqueda rápida en bloques de datos: MOVC: transferir carácter de una cadena. MOVW: transferir palabra de una cadena. CMPC: comparar carácter de una cadena. CMPW: comparar palabra de una cadena. SCAC: buscar carácter de una cadena. SCAW: buscar palabra de una cadena. LODC: cargar carácter de una cadena. LODW: cargar palabra de una cadena. STOC: guardar carácter de una cadena. STOW: guardar palabra de una cadena. REP: repetir. CLD: poner a 0 el indicador de dirección. STD: poner a 1 el indicador de dirección. Fig. 8. Orden de captura de cadenas I. Instrucciones aritméticas Existen 8 instrucciones aritméticas básicas: ADD (Suma), SUB (Resta), MUL (Multiplicación sin signo), DIV (División sin signo), IMUL (Multiplicación con signo), IDIV (División con signo), INC (Incremento unitario) y DEC (Decremento unitario). Las instrucciones ADD y SUB permiten realizar sumas y restas sencillas y tienen el siguiente formato: . ADD Destino, Fuente . SUB Destino, Fuente Ejemplos: ADD AX,BX ;AX=AX+BX ADD AX,10 ;AX=AX+10 SUB AX,BX ;AX=AX-BX SUB AX,10 ;AX=AX-10 En las operaciones de suma y resta el resultado siempre es almacenado en el operando de destino, el cual puede ser un registro o una variable. Fig. 9. Instrucciones aritméticas J. Manipulación de la pila La pila es un grupo de localidades de memoria que se reservan con la finalidad de proporcionar un espacio para el almacenamiento temporal de información. La pila de los programas es del tipo LIFO (Last In First Out, Último en entrar, Primero en salir). Para controlar la pila el microprocesador cuenta con dos instrucciones básicas: Push (Meter) y Pop (sacar). El formato de estas instrucciones es el siguiente: Push operando Pop operando Cuando se ejecuta la instrucción Push, el contenido del operando se almacena en la última posición de la pila. Por ejemplo: Si AX se carga previamente con el valor 5, una instrucción Push AX almacenaría el valor 5 en la última posición de la pila. Por otro lado la instrucción Pop saca el último dato almacenado en la pila y lo coloca en el operando. Siguiendo el ejemplo anterior, la instrucción Pop BX obtendría el número 5 y lo almacenaría en el registro BX. K. Obtención de cadena con representación decimal En las computadoras el formato natural para la aritmética es el binario. La representación del número decimal 1; 527 en los tres formatos decimales:
  5. 5. ASCII 31 35 32 37 (cuatro bytes) BCD desempaquetado 01 05 02 07 (cuatro bytes) BCD empaquetado 15 27 (dos bytes) El procesador realiza aritmética en valores ASCII y BCD un dígito a la vez. Ya que los datos son ingresados desde un teclado significan que están en formato ASCII, la repre- sentación en memoria de un número decimal ingresado tal como 1234 es 31323334H. Pero realizar aritmética sobre tal número implica un tratamiento especial. Las instrucciones AAA y AAS realizan aritmética de manera directa sobre números ASCCI L. Instrucciones lógicas Las instrucciones lógicas, son utilizadas para realizar op- eraciones lógicas sobre los operandos. AND OR NEG TEST NOT XOR AND: Condición de ejecución y del estado de su bit. NEG: Genera el complemento a 2. NOT: Lleva a cabo la negación bit por bit. OR: Inclusivo lógico. TEST: Compara lógicamente los operandos. XOR: OR exclusivo. Estas trabajan sobre los bits de sus operandos. Para verificar el resultado de operaciones recurrimos a las operaciones cmp y test. Fig. 10. Ejemplo instrucción lógica de saltos M. Desplazamiento y rotación Existen muchas operaciones que requieren desplazar valores de los bits que componen un número a la izquierda o a la derecha. Los operadores de desplazamiento de bits suelen utilizarse para llevar a cabo operaciones muy rápidas de multiplicación y de división de enteros. Un desplazamiento a la izquierda equivale a una multiplicación por 2 y un desplaza- miento a la derecha una división por 2. Un desplazamiento no es una rotación. A medida que se desplazan los bits hacia otro extremo se van rellenando con ceros por el otro extremo. Los bits que salen se pierden. Rotación: RCL DESTINO,CONTADOR: Rota destino a través de carry a la izquierda contador veces RCR DESTINO,CONTADOR: Rota destino a través de carry a la derecha contador veces ROL DESTINO,CONTADOR: Rota destino a la izquierda contador veces ROR DESTINO,CONTADOR: Rota destino a la derecha contador veces SAL DESTINO,CONTADOR: Desplaza destino a la izquierda contador veces y rellena con ceros SAR DESTINO,CONTADOR: Desplaza destino a la derecha contador veces y rellena con bit SF SHR DESTINO,CONTADOR: Desplaza destino a la derecha contador veces y rellena con ceros. NOTA: El DESTINO va a ser la dirección y el CONTADOR es el número de veces que se retira la instrucción. Fig. 11. Instrucciones de rotación N. Obtención de una cadena con la representación hexadec- imal Instrucciones de Desplazamiento Lineal AL/SHL (De- splazamiento aritmético a la izquierda). Sintaxis: SAL/SHL destino, contador Indicadores: Desplaza a la derecha los bits del operando destino el número de bits especificado en el segundo operando. Los bits de la izquierda se rellenan con el bit de signo del primer operando. Si el número de bits a desplazares 1 se puede especificar directamente, si es mayor se especifica a través de CL. Ejemplos: SAR AX, CL SAR BP,1 SHR (Desplazamiento lógico a la derecha).
  6. 6. Fig. 12. Instrucciones de desplazamiento lineal (obtencion de una cadena con la representación hexadecimal) Sintaxis: SHR destino, contador Fig. 13. Ejemplo desplazamiento a la derecha O. Captura y almacenamiento de datos numéricos Permiten la opción de introducir algún número en un pro- grama deseado, en el cual dando las instrucciones necesarias se pueden además de ser capturadas almacenarlas dentro del programa. Para la introducción de los datos ya sea numéricos o carácter es necesario la interacción a través de un dispositivo como: teclado, ratón, monitor, etc. Los datos se almacenan en memoria en el orden en que han sido declarados y podemos acceder a ellos usando el nombre dado en la declaración. P. Operaciones básicas sobre archivos de disco Las operaciones basicas que es posibles llevar a cabo sobre las unidades de disco son: create (crear) delete (eliminar) open (abrir) close (cerrar) read (leer) write (escribir) append (añadir) seek (buscar) get attributes (obtener atributos) set attributes (establecer atributos) rename (cambiar nombre) Fig. 14. Diagrama de operaciones(Ensamblador, ligador, archivos) III. CONCLUSIÓN El lenguaje ensamblador es muy complejo y no es sencillo de aprender, pero el leguaje ensamblador es y seguirá siendo una de las herramientas de programación más utilizadas por todas las personas que desean tener un mayor grado de comprensión sobre el funcionamiento de los dispositivos. Este lenguaje nos brinda todas las herramientas con las cuales nosotros podemos innovar y seguir aprendiendo de ello. El lenguaje ensamblador no ha sido relegado, en la actualidad existe una gran cantidad de programas ensambladores que nos permiten programar en ambientes operativos gráficos como Windows, Linux, iOS, entre otros. [?] REFERENCES [1] Brey, B.; Los microprocesadores de Intel: Arquitectura, Programación e Interfaces; Ed. Prentice Hall; 3ł Edición; 1995. [2] http://www.infor.uva.es/~cllamas/fi2/fi2-2.pdf [3] Cecilio Blanco Viejo, Electrónica digital http://books.google.com.mx/books?id=myOXwYAhOwgC&pg=PA209&dq=MEMORIA+ [4] Rojas, A.; Ensamblador Básico; Ed. Computec; 2ł Edición; 1995. [5] Raúl Alcaraz Martínez, Aspectos hard- ware y software del microprocesador 6800 https://books.google.com.mx/books?id=p07XAgAAQBAJ&pg=PA36&dq=ensamblador+

×