¿como y para que funcionan los flags?

Iniciado por proxy_lainux, Junio 19, 2016, 08:22:43 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

¿Alguien me podría dar una explicación de para que y como funcionan los flags? CF PF IF...

Es que no entiendo para que sirven y como funcionan, he buscado información y se menciona sobre que es uso aritmético, pero realmente no comprendo en teoría para que sirve y como funcionan

Espero me puedan ayudar con una rápida explicación sobre esto

Saludos

Junio 20, 2016, 11:43:40 AM #1 Ultima modificación: Junio 20, 2016, 07:23:43 PM por grep
Los flags reflejan el estado del procesador en un momento determinado.

Estos se activan o desactivan con cada instrucción que ejecutas.

Selen ser utilizados para hacer una especie de if-else, como en otros lenguajes de programación.

Los flags suelen tener el tamaño de un bit, por eso se encuentran todos en un registro llamado FLAGS.

En un procesador x86 el registro FLAGS tiene un tamaño de 32bits (osea, puede tener 32 flags). Ahí encuentras que su primer bit es el flag CF (Carry Flag), su tercer bit es el PF (Parity Flag), y su décimo bit es el flag IF (Interrupt enable flag).

Tu programa puede chequear estos flags para hacer una u otra cosa, por ejemplo:
1.- Haces una operación aritmética y tu resultado es 0000 (cero decimal).
2.- Porque el resultado es 0000 en flag ZF (Zero Flag) se habilita.
3.- En la siguiente instrucción tienes "JZ <location>".
4.- Como JZ comprueba el estado del flag ZF, entonces JZ salta a otro lugar en tu programa.

Te comento de los siguientes flags solo para darte una idea:

CF (Carry Flag)
Este flag te indica que en una instrucción aritmética que ejecutaste "se acarreó (o se llevó prestado) un bit". Por ejemplo, cuando sumas 1 + 99 obtienes 100 (te llevaste prestado un 1). En términos de bits, suponiendo que el tamaño de un registro es cuatro bits, si haces 1111 + 0001 obtienes 0000 y el CF se habilita (se setea a 1).

PF (Parity Flag)
Este flag te suele indicar que "has obtenido un conjunto de bits con una cantidad par de 1s". Por ejemplo, si realizas una operación aritmética y obtienes 0110, entonces PF se habilita (se setea a 1). Por otro lado si obtienes, por ejemplo 0010, entonces PF es 0 (deshabilita).

IF (Interrupt enable flag)
Este es más dificil de explicar. Si el valor de este flag es 1, entonces "el CPU procesará las interrupciones enmascarables". Si el flag es 0, entonces "el CPU ignora las interrupciones enmascarables".

Una interrupción enmascarable es aquella que puede ser ignorada por pas instrucciones de un programa.

El flag IF, comunmente, solo puede ser modificado por el sistema operativo.

Espero que esto pueda servir,

Saludos