etiquetas y registros de banderas fcochc

16
MATERIA: Lenguaje Ensamblador CARRERA: Ingeniería en Sistemas Computacionales TEMA DE INVESTIGACIÓN: Etiquetas del lenguaje ensamblador y registros de banderas ALUMNO: Francisco Chirino Carbajal CUATRIMESTRE: CUARTO GRUPO: ÚNICO CATEDRÁTICO: I.S.C. Fatima Canizalez Villalobos

Upload: francisco-chirino-carbajal

Post on 24-Oct-2015

15 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Etiquetas y Registros de Banderas Fcochc

MATERIA:

Lenguaje Ensamblador

CARRERA:

Ingeniería en Sistemas Computacionales

TEMA DE INVESTIGACIÓN:

Etiquetas del lenguaje ensamblador y registros de banderas

ALUMNO:

Francisco Chirino Carbajal

CUATRIMESTRE: CUARTO GRUPO: ÚNICO

CATEDRÁTICO:

I.S.C. Fatima Canizalez Villalobos

24 de Noviembre de 2013.

Page 2: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

INTRODUCCIÓN

En este pequeño trabajo de investigación vamos a conocer lo referente a las etiquetas del lenguaje ensamblador y los tipos de registros de banderas, aprenderemos la forma en cómo cambian, se activan o desactivan.

Etiquetas del lenguaje ensamblador y registros de banderas. Página 2 de 12

Page 3: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

ETIQUETAS DEL LENGUAJE ENSAMBLADOR Y REGISTROS DE BANDERAS

El campo de etiquetas.Las etiquetas son nombres usados para referenciar a números y cadenas de caracteres o localizaciones de memoria dentro de un programa. Las etiquetas permiten al programador asignarle un nombre a una variable de memoria, a valores y a las localizaciones de bloques de instrucciones particulares.

Las etiquetas pueden consistir de los siguientes caracteres:Letras del alfabeto (A - Z, a - z)Dígitos (0 - 9)Carácter de subrayado (_)Signo de pesos ($)Signo de interrogación (?)

Los dígitos (0 - 9) no pueden ser utilizados como el primer carácter de una etiqueta. El signo de pesos ($) y el signo de interrogación (?) solos no pueden ser utilizados como un símbolo, puesto que así tienen un significado especial.

Cada etiqueta debe ser definida sólo una vez1; esto es, deben ser únicas. Las etiquetas pueden ser usadas como operandos cualquier número de veces.

Una etiqueta puede aparecer sola en una línea; es decir, sobre una línea sin una instrucción o directiva. En este caso, el valor de la etiqueta es la dirección de la instrucción o directiva en la siguiente línea del programa.

Las etiquetas que aparecen solas en una línea o acompañadas de instrucciones o directivas deben finalizar con un símbolo de dos puntos (:). Otras etiquetas generalmente no finalizan con este símbolo.

En el programa ejemplo HOLA.ASM se utilizan dos etiquetas: Msg, que es el nombre asignado a la cadena de caracteres ´Hola a todos´,0Ah,0Dh,´$´, almacenada en el segmento de datos del programa, e Inicio que, aunque aparezca sola en una línea del programa, representa la dirección donde se almacena en memoria la instrucción.

Etiquetas del lenguaje ensamblador y registros de banderas. Página 3 de 12

Page 4: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

mov ax@dataEn la línea

mov dx,OFFSET Msg

Se está instruyendo al microprocesador para que almacene en el registro DX el desplazamiento que hay que recorrer, a partir del inicio del segmento de datos, para alcanzar la dirección donde inicia la cadena de caracteres representada por la etiqueta Msg.

Ejemplo de etiqueta: EQU: Asigna al símbolo contenido en el campo etiqueta el valor de la expresión en el campo

operando. Sintaxis: etiqueta EQU valor

Ejemplo: PI EQU 3.1416

Ahora veremos la posición de los elementos del código por 4 columnas:

Columna 1: Etiquetas. Las etiquetas se rigen por las siguientes normas:o Debe situarse en la primera columna.o Debe contener únicamente caracteres alfanuméricos.o El máximo de caracteres es de 31.

Columna 2: Operación. En esta columna se situarán las instrucciones. El campo del código de operación es el único que nunca puede estar vacío; éste siempre contiene una instrucción o una directiva del ensamblador.

Columna 3: Operandos El campo de operandos o de dirección puede contener una dirección o un dato, o puede estar en blanco. Normalmente contendrá registros o literales con los que se operará (f, l o k , b y w).

Columna 4: Comentario. El campo del comentario o de etiquetas es opcional. Aquí se situará cualquier comentario personalizado que deseemos. Estos son útiles para saber qué hace un programa sin tener que descifrar el código entero. El compilador (ensamblador) ignorará todo texto más allá del carácter punto y coma ";".

Etiquetas del lenguaje ensamblador y registros de banderas. Página 4 de 12

Page 5: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

Los comentarios generalmente se sitúan en la cuarta columna para describir la acción de una línea de código, pero pueden situarse en cualquier parte de programa para describir cualquier otro evento, siempre que estén después del carácter ";" (semicolon en inglés).

Normalmente las columnas son separadas por una tabulación. El espacio mínimo entre dos columnas es de un carácter, que puede ser un espacio en vez de una tabulación.

Delimitadores (separación entre campos). Los campos van separados sólo con espacios y/o tabulaciones. No agregue nunca

otros caracteres (comas, puntos, etc.). No utilice espacios extra, particularmente después de comas que separan operandos.(

Ej: movlw 5, w). No use caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.

Etiquetas (label).Las etiquetas se sitúan a la izquierda de las instrucciones y sirven para agrupar fragmentos de código. Estos fragmentos pueden ser de dos tipos:

El primer tipo no es un fragmento tal cual, si no que es un punto del programa al que podremos saltar de manera incondicional a través de la instrucción adecuada.

El segundo tipo es denominado subrutina. Este empieza con una etiqueta y acaba con la instrucción RETURN o RETLW, que veremos más adelante.

Deberemos tener en cuenta: La etiqueta es el primer campo en una línea en lenguaje ensamblador y puede no

existir. Si una etiqueta está presente, el ensamblador la define como el equivalente a la

dirección del primer byte correspondiente a esa instrucción. Esta etiqueta puede volver a usarse en otro lugar pero como operando de una

instrucción. El ensamblador reemplazará ésta etiqueta por el valor de cuando fue creada. Se usan frecuentemente en las instrucciones de salto.

No puede existir más de una etiqueta en la primera columna o primer campo de instrucción.

No pueden usarse como nombres de etiquetas a palabras ya reservadas por el ensamblador (ORG, EQU, etc.) o nombres de instrucciones (movlw, call, nop, etc.)

Ejemplo:DATO EQU 05h

INICIO movlw DATO goto INICIO

Etiquetas del lenguaje ensamblador y registros de banderas. Página 5 de 12

Page 6: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

La instrucción goto INICIO causa que la dirección de la instrucción con la etiqueta INICIO (movlw) se cargue en el PC (Contador de Programa). Por lo tanto ésta instrucción será luego ejecutada.

No se permite el uso de números o caracteres no alfabéticos como primera letra de la etiqueta. Como regla práctica: usar siempre letras, y en mayúscula, al menos la primera.

Ejemplos: TABLA2X2 Perrmitido +PESO NO permitido! =>SALIDA NO permitido! -SALTO NO permitido! 5ALFA NO permitido! Dato1 Permitido Dato2 Permitido Loop_A Permitido

Banderas.Las banderas proveen una manera de obtener información acerca del estado actual de la máquina y el resultado de procesamiento de una instrucción, Cuando algunas instrucciones piden comparaciones o cálculos aritméticos cambian el estado de las banderas.

Las banderas están en el registro de banderas en las siguientes posiciones:bits 15 14 13 12 11 10 9 8 7 6 54 3 2 1

O D I T S Z A P C

La plataforma IA-32 utiliza un registro de 32 bits llamado EFLAGS que contiene las banderas. Las banderas más comúnmente usadas son las siguientes:

Bandera Bit Nombre

CF 0 Bandera de acarreo (carry flag)

PF 2 Bandera de paridad (parity flag)

AF 4 Bandera de acarreo auxiliar (adjust flag)

ZF 6 Bandera de cero (zero flag)

SF 7 Bandera de signo (sign flag)

DF 10 Bandera de dirección (direction flag)

Etiquetas del lenguaje ensamblador y registros de banderas. Página 6 de 12

Page 7: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

OF 11 Bandera de desbordamiento (overflow flag)

La bandera de acarreo se activa cuando se produce acarreo en una suma o multiplicación, o un "préstamo" en una resta entre números sin signo. La bandera de paridad se usa para indicar si el resultado, en un registro, de una operación matemática es válido.

La bandera de paridad se usa para indicar si el resultado, en un registro, de una operación matemática es válido.

La bandera de acarreo auxiliar se utiliza en operaciones matemáticas con números decimales codificados en binario (BCD). Se activa si hay acarreo presente.

La bandera de cero se activa si el resultado de una operación aritmético lógica es cero. La bandera de signo muestra el bit más significativo del resultado de una operación, el

cual denota el signo del número. La bandera de dirección controla la selección de autoincremento (D=0) o

autodecremento (D=1) de los registros %edi o %esi durante las operaciones con cadenas de caracteres. La bandera de dirección sólo se utiliza con las instrucciones para el manejo de cadenas de caracteres.

La bandera de desbordamiento se utiliza en la aritmética de enteros con signo cuando un número sobrepasa la capacidad de representación del registro.

Conocido como FLAGS en su época de 16 bits. EFLAGS es un registro del mismo ancho que los registros generales, 32 bits. Pero su contenido se actualiza de manera automática dependiendo de lo que pase durante la ejecución del programa.

En este dibujo vemos que el registro EFLAGS es de 32 bits. Abajo hay una descripción de lo que hace cada uno:

Bits RESERVADOS (BLANCOS).- Estos bits no están definidos, no debemos confiarnos en su valor y si llegamos a cambiarlos es importante dejarlos como estaban. Se supone que los nuevos procesadores tendrán funciones habilitadas en ellos.

Bits de SISTEMA (AZULES).- Estos bits indican condiciones de operación del CPU y del sistema operativo. Como la capacidad de identificación, el modo de operación actual, etc.

Etiquetas del lenguaje ensamblador y registros de banderas. Página 7 de 12

Page 8: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

Bits de STATUS (ROJOS).- Estos son los que nos interesan. Cada que ciertas operaciones dan un resultado, afectan estas banderas, de acuerdo con su estado la computadora es capaz de tomar decisiones.

Bit de CONTROL (VERDE).- El único bit de control es el de dirección. Dependiendo de su estado es cómo van a operar las operaciones de manejo de cadenas como MOVS, STOS, LODS, ETC.

Expliquemos un poco este asunto del registro banderas: Cada que ocurre un determinado evento este registro pone en cero o uno cada uno de sus bits para indicarnos la naturaleza de un resultado. Por ejemplo, si restamos dos números y el resultado es cero, la bandera ZERO se va a activar. Si el resultado es diferente de cero, el bit correspondiente a la bandera ZERO va a apagarse. Lo mismo se aplica a todas las demás banderas. Por cierto, a diferencia de los lenguajes como C, no siempre es necesario realizar una comprobación directa, pues las propias instrucciones actualizan el registro EFLAGS automáticamente cuando son ejecutadas. El si una instrucción afecta o no al registro EFLAGS y como lo hace está plenamente documentado en los manuales de Intel.

Cabe aclarar que no es tan fácil acceder al contenido de este registro como lo hacemos a los registros generales. En lugar de eso hay instrucciones que activan y desactivan banderas de manera individual, por ejemplo, STC y CLC activan y desactivan respectivamente la bandera de acarreo. También hay instrucciones condicionales cuyo comportamiento depende del estado de las banderas de EFLAGS. Como por ejemplo CMOV que es como un MOV normal pero puede o no ejecutarse dependiendo del estado de las banderas. O SET que pone en cero o uno un registro o celda de memoria basándose en el estado de una determinada bandera. Pero la instrucción que más depende de este registro es sin lugar a dudas el salto condicional.

El salto condicional.- Esto es hasta ahora lo más parecido al IF que tiene el Ensamblador. Cuando el CPU llega a un salto condicional revisa la condición determinada por la instrucción y la compara con el estado del registro banderas. El salto se efectúa solo si la condición se cumple. Esta lógica es inversa al IF tradicional en que un grupo de instrucciones se ejecuta cuando la condición se cumple. Otra desventaja aparente que tiene el salto condicional es qe es relativamente pequeño en comparación con la instrucción JMP, pues apenas puede saltar unos cuantos cientos de bytes y estos son relativos a la posición de la instrucción. Para hacer comparaciones complejas se usa una combinación de saltos condicionales, largos y operaciones a nivel de bits que trabajan con el registro banderas.

Etiquetas del lenguaje ensamblador y registros de banderas. Página 8 de 12

Page 9: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

SUBCODIGO MNEMONICO ESTADO DE BANDERAS0000 O OF = 10001 NO OF = 00010 B, NAE CF = 10011 NB, AE CF = 00100 E, Z ZF = 10101 NE, NZ ZF = 00110 BE, NA (CF or ZF)= 10111 NBE, A (CF or ZF)= 01000 S SF = 11001 NS SF = 01010 P, PE PF = 11011 NP, PO PF = 01100 L, NGE (SF xor OF) = 11101 NL, GE (SF xor OF) = 01110 LE, NG ((SF xor OF) or ZF) = 11111 NLE, G ((SF xor OF) or ZF) = 0

En esta tabla vemos algunos de esos bits. Por ejemplo. El salto condicional se escribe Jcc. Estas dos cc se sustituyen por letras que indican la condición. Dentro del código máquina las instrucciones condicionales usan 4 bits para evaluar la condición. Uno de esos bits es el “bit de negación”. 3 bits indican la condición y el cuarto niega la condición determinada por esos 3 bits: En la tabla la primera columna es el SubCode o Subcódigo Máquina Condicional, la segunda es el subnemónico y la tercera indica el estado de las banderas.

Supongamos que restamos el contenido de EDX al acumulador EAX. No nos importa el contenido de ninguno de los dos. Si el resultado de esta resta es cero. La bandera ZERO de Eflags se va a activar, Si el resultado es negativo, se activa la de signo SIGN. Si el resultado es divisible entre 2 se activa la bandera de paridad (PF). Si el resultado no puede ser representado como entero con signo, se activa Overflow y si se da el famoso Wrap-Around la de CARRY. Lo interesante es que esto es un proceso automático llevado a cabo por el CPU y no consume más tiempo que el que toma realizar la propia resta. Sin necesidad de que hagamos una comparación explícita.

CMP y TEST.- Estas 2 instrucciones se usan para hacer comparaciones explícitas entre 2 valores que pueden ser registros, celdas de memoria o constantes. CMP es una resta “de mentiritas” que no resta al operando destino pero que actualiza las banderas como si lo hubiera hecho. TEST es exactamente lo mismo pero en lugar de restar los operandos, hace un AND entre ellos.

Etiquetas del lenguaje ensamblador y registros de banderas. Página 9 de 12

Page 10: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

Existen otros “trucos” de viejos programadores de Ensamblador. Como usar OR EAX, 0 para ver si hay un cero en el acumulador. En realidad es más rápido hacer TEST EAX, EAX. O si se trata de una celda de memoria, TEST [memoria], 0. Y aunque hoy en día la mayoría de estas instrucciones pueden ejecutarse en un ciclo de reloj, Existe algo llamado Paralelismo que permite que más de una instrucción se ejecute por ciclo de reloj en un procesador de Intel, pero eso es un tema más avanzado.

Etiquetas del lenguaje ensamblador y registros de banderas. Página 10 de 12

Page 11: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

CONCLUSIÓN

Podemos concluir que las etiquetas son nombres usados para referenciar a números y cadenas de caracteres o localizaciones de memoria dentro de un programa. Las etiquetas permiten al programador asignarle un nombre a una variable de memoria, a valores y a las localizaciones de bloques de instrucciones particulares.

Considero que con esta investigación podemos tener un poco más claro a lo que se refieren las etiquetas porque se anexa ejemplo donde nos indica a que se refiere la etiqueta.

También aprendimos lo que son los registros de banderas, la forma en cómo cambian, se activan o desactivan.

Etiquetas del lenguaje ensamblador y registros de banderas. Página 11 de 12

Page 12: Etiquetas y Registros de Banderas Fcochc

Lenguaje EnsambladorIngeniería en Sistemas Computacionales

Francisco Chirino Carbajal

BIBLIOGRAFÍA:

http://proton.ucting.udg.mx/dpto/maestros/mateos/novedades/ensamblador/68HC11.html

http://perso.wanadoo.es/pictob/ensamblador.htm#flags_o_banderas

http://www.monografias.com/trabajos7/regi/regi.shtml

http://asm86.wordpress.com/2009/04/29/if-for-y-registro-eflags/

Etiquetas del lenguaje ensamblador y registros de banderas. Página 12 de 12