Inicio / Wikis / Cursos gratis / Curso de Asembler - Flags

Curso de Asembler - Flags

(8 opiniones)
Curso gratis creado por Pablo Barrón Ballesteros ( Wintermute ). Extraido de:
04 de Noviembre de 2005
Ensamblador

6 - Flags

La explicación de los "flags" viene a cuento de los saltos condicionales.

Los que hay is visto un mínimo de otros lenguajes recordar‚is las sentencias

FOR y NEXT ( en Basic ), o el IF/THEN/ELSE tambi‚n en estilo Basic pero

encontrable en otros lenguajes. Pues bien, los flags y las instrucciones

condicionales va a ser lo que os encontr‚is en ‚ste capítulo del curso de

Ensamblador.

Vamos con el registro de flags.

A las flags, "banderas", las agrupa un sólo registro de 16 bits, aunque

‚ste no est  utilizado por completo, ya que cada flag ocupa un sólo bit.

Pero bueno, ¨ qu‚ son los flags a todo ‚sto ?

Se trata de varios bits, que como siempre pueden valer uno o cero, y

dependiendo de su valor indican varias cosas. El registro de flags es como

sigue:

ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿

³ ± ³ ± ³ ± ³ ± ³ O ³ D ³ I ³ T ³ S ³ Z ³ ± ³ A ³ ± ³ P ³ ± ³ C ³

ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ

O: Overflow     D: Dirección    I: Interrupciones rehabilitadas

T: Trampa       S: Signo        Z: Cero

A: Acarreo auxiliar     P: Paridad      C: Acarreo   ±: No utilizado

Cada cuadrito representa un bit como es f cil adivinar. Tambi‚n os dar‚is

cuenta de que cada bit que se utiliza tiene un nombre, y como ver‚is tambi‚n

una utilidad. Aquí explico el significado de cada uno, o al menos de los

m s importantes:

 

    EL FLAG DE ACARREO

Hay veces en la operaciones en las que el número se desborda, o sea, no

cabe en el registro o en la posición de memoria. Imaginemos que tenemos en

AX el número 0FFFFh y le sumamos 0CCCCh. Como es lógico, el resultado no nos

cabr  en AX. Al realizar ‚sta suma, tenemos que tener en cuenta que el

siguiente número a 0FFFFh es 0000h, con lo que podremos ver el resultado.

Igual pasar  si a 0000h le restamos por ejemplo 1 ( el resultado ser

0FFFFh ). Pero de alguna manera nos tenemos que DAR CUENTA de que ‚sto ha

sucedido.

Cuando se opera y hay acarreo en el último bit sobre el que se ha

operado, el flag de acarreo se pone a uno. O sea, cuando ese número se ha

desbordado. Hay que recordar tambi‚n que las instrucciones INC y DEC no

afectan a ‚ste flag. Veamos los efectos de ‚stas operaciones:

MOV AX,0FFFFh

INC AX              ; AX vale ahora 0, el flag de acarreo tambi‚n

DEC AX              ; AX vale 0FFFFh, y el flag sigue inalterado

ADD AX,1            ; AX vale 0, y el flag de acarreo est  a 1

MOV BX,0000h

ADD BX,50h          ; El flag de acarreo se pone a 0, no ha habido

;acarreo en ‚sta operación

SUB AX,1            ; Ahora AX vale otra vez 0FFFFh, y el flag de acarreo

;se pone de nuevo a uno

En resumen, se activa cuando tras una operación hay un paso del valor

m ximo al mínimo o viceversa

Este flag nos va a ser tambi‚n útil al comprobar errores, etc. Por

ejemplo, si buscamos el primer archivo del directorio y no hay ninguno,

‚ste flag se activar , con lo que podremos usar los saltos condicionales,

pero ‚sto ya se explica m s adelante.

 

    EL FLAG DE SIGNO

A veces interesa conocer cuando un número con signo es negativo o positivo.

Evidentemente, ‚sto sólo tiene efecto cuando EFECTIVAMENTE estamos tratando

con números enteros con signo, en complemento a dos. Indica cuando tras una

operación aritm‚tica ( ADD, SUB, INC, DEC o NEG ) o lógica ( AND, OR o XOR )

el resultado es un número en complemento a dos. En realidad es la copia del

bit de mayor peso del byte, el que indica cuando el número es negativo.

Por lo tanto, cuando vale 1 es que el número es negativo y si vale 0 es

que es positivo

    EL FLAG DE DESBORDAMIENTO  ("Overflow")

Se trata de un flag bastante parecido al de acarreo, pero que actúa con

números en complemento a dos y se activa cuando se pasa del mayor número

positivo ( 127 en un sólo byte ) al menor negativo ( -128 en tama¤o de un

byte ).

Este flag, al contrario que el de acarreo, SI es afectado por las

instrucciones de decremento e incremento.

 

 

    EL FLAG DE CERO

De los m s sencillitos de comprender. Símplemente se activa cuando el

resultado de una operación aritm‚tica o lógica es cero. A los avispados se

os estar  ya ocurriendo la gran utilidad del flag,... tenemos por ejemplo

dos registros, AX y CX, que queremos comparar para saber si son iguales.

Para saberlo, no tendríamos m s que restar uno del otro, y si el resultado

es cero ( o sea, si el flag de cero se pone en uno ), podremos hacer un

salto condicional ( ‚sto lo explico en el próximo número.

O sea, de un

SUB CX,AX

Si son iguales, el flag de cero se pondr  a uno.

 

    EL FLAG DE PARIDAD

Se utiliza especialmente en la transmisión de datos para la comprobación

de errores, ya que comprueba si el resultado de la última operación

aritm‚tica o lógica realizada tiene un número par o impar de bits puestos

a uno. Se pondr  a uno cuando haya un número par de bits, y a cero cuando

sea impar.

    RESTO DE FLAGS

No describir‚ m s flags detalladamente, ya que su importancia es casi

nula; por ejemplo est  el flag de interrupción que cuando est  activado

evita la posibilidad de interrupciones en secciones críticas de código, o

el de trampa, que cuando est  activado provoca una INT 1h cada vez que se

ejecuta otra instrucción, pero creo que su inter‚s es escaso, al menos por

el momento.

 

    INSTRUCCIONES DE COMPARACION

­ No ibamos a terminar la lección sin ense¤ar nuevas instrucciones !

Nos van a servir bastante para realizar las comparaciones, y son:

CMP y TEST

CMP compara dos registros, o un registro y una dirección de memoria,...

tiene el mismo formato que el SUB ( por ejemplo CMP AX,BX ), tan sólo que

ninguno de los registros es alterado. Si por ejemplo son iguales, el flag

de cero se pondr  en uno. Es en realidad un SUB del que no se almacena el

resultado.

TEST, comprobar, se puede realizar con el mismo formato de AND, ya que

es equivalente a ella, tan sólo que no se guarda el resultado, aunque sí se

modifican los flags.

Y en el próximo capítulo veremos como se aplican ‚stos flags, y como

realizar los saltos comparativos.
Valora este capítulo: (8 opiniones)
Autor y licencia de 'Curso de Asembler - Flags'
Pablo Barrón Ballesteros ( Wintermute ) CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Curso de Asembler - Flags' (8)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este curso gratis



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Curso de Asembler - Flags'

El objetivo de este curso es aprender a programar en el lenguaje Ada, desde sus... Más »
Excelente curso de iniciación a la astronomía para aquellos que quieran aprender sobre esta apasionante... Más »
La idea de este curso surgió de varias conversaciones entre amig@s de la cuadrilla y... Más »
Este es un curso tremendamente completo, guiado y con ejemplos y prácticas pensadas para convertirlo... Más »
Este tutorial presenta los conceptos básicos de líneas de transmisión (Transmission lines), así como una... Más »
¿Estás seguro de que deseas eliminar este capítulo?