Autor Tema: [AYUDA] Auxiliary Carry Flag  (Leído 1391 veces)

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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
[AYUDA] Auxiliary Carry Flag
« en: 09 de Febrero de 2011, 20:07:05 »
Hola!
Estoy teniendo dificultades para entender la funcion del "Auxiliary Carry Flag" en un microprocesador Intel 8080. Pero ¿de que se trata esto? Bien, alla vamos:

Algunos microprocesadores tienen un flag en su registro de estado que se llama "Auxiliary Carry Flag". Se utiliza para "interpretar" los bytes de una operación aritmética como lo que son (un numero binario) o como dos digitos BCD.

Por ejemplo, si sumamos:

00011001 (0x19 - 25 )
+00000001 (0x01 -  1 )
-----------
 00011010 (0x1A - 26 )


lo cual está perfecto, pero si estamos trabajando "en modo binario". Si tomamos cada número como dos BCD tenemos que

0001 1001 ( 1 9 )
+0000 0001 ( 0 1 )
-----------
 0001 1010 ( 1 10 )


lo cual está mal, ya que el "10" del final deberia ser "0", y el "1" que está en la primer columna deberia ser un 2:

0001 1001 ( 1 9 )
+0000 0001 ( 0 1 )
-----------
 0010 0000 ( 2 0 )


Para eso sirve el "Auxiliary Carry Flag". Cuando se da esta situación, ese flag se pone en uno, y la suma incluye ese bit, quedando así:

0001 1001 
+0000 0001
-----------
 0001 1010 Resultado anterior.....
+0000 0110 <-- WTF???
-----------
 0001 0000
+0001 0000 (sumo el Auxiliary Carry Flag)
-----------
 0010 0000 y llego al resultado correcto.


Obviamente, el ejemplo anterior lo estoy mirando en un libro de ASM del micro Intel 8080. Y acá vienen las dudas:

1) ¿De donde sale el "número mágico" +0000 0110 <-- WTF??? es un 5 6....pero ¿como lo obtengo? ???

2) ¿Basta con sumar los dos nibbles de menor peso de ambos números (1001 + 0001), y si el resultado es mayor a 15, poner en 1 el Auxiliary Carry Flag?

3) En las restas este bit también se debe poner en 1 cuando corresponda. ¿Basta con restar los dos nibbles de menor peso de ambos números, y si el resultado es menor que cero poner en 1 el Auxiliary Carry Flag?

Me tiene confundido este tema. Hay algo que se me escapa.....algo que no está en el texto del libro (y que se dá por sobreentendido) y que yo no se  :'(
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3492
    • http://www.todopicelectronica.com.ar
Re: [AYUDA] Auxiliary Carry Flag
« Respuesta #1 en: 09 de Febrero de 2011, 21:58:06 »
Hola Ariel, si estas en BCD, solo tienes del 0 al 9... por lo que si le sumas 6, llegas a 15, y aun no "salta" el carry, creo que viene por alli el asunto, si es 10 o mayor, tendras tu carry activo... es decir, verificas si llego al limite maximo...
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...


 

anything