Un indicador de medio acarreo (también conocido como indicador auxiliar o indicador de ajuste decimal ) es un bit indicador de condición en el registro de estado de muchas familias de CPU , como Intel 8080 , Zilog Z80 , x86 , [1] y Atmel AVR serie, entre otros. Indica cuando se ha generado un acarreo o préstamo a partir de los cuatro bits menos significativos del registro acumulador después de la ejecución de una instrucción aritmética . Se utiliza principalmente en instrucciones aritméticas decimales ( BCD ).
Uso
Normalmente, un procesador que utiliza aritmética binaria (que incluye casi todas las CPU modernas) agregará dos valores de bytes de 8 bits de acuerdo con las reglas de la suma binaria simple. Por ejemplo, sumar 25 16 y 48 16 produce 6D 16 . Sin embargo, para valores decimales codificados en binario (BCD), donde cada nibble de 4 bits representa un dígito decimal, la suma es más complicada. Por ejemplo, sumando el valor decimal 25 y 48, que están codificados como los valores BCD 25 16 y 48 16 , la suma binaria de los dos valores produce 6D 16 . Dado que el nibble más bajo de este valor es un dígito no decimal (D), debe ajustarse agregando 06 16 para producir el resultado BCD correcto de 73 16 , que representa el valor decimal 73.
0010 0101 25+ 0100 1000 48----------- 0110 1101 6D , resultado intermedio + 0110 06, ajuste----------- 0111 0011 73 , resultado ajustado
Del mismo modo, la suma de los valores de BCD 39 16 y 48 16 produce 81 16 . Este resultado no tiene un nibble bajo no decimal, pero sí provoca una conversión del dígito menos significativo (cuatro bits inferiores) al dígito más significativo (cuatro bits superiores). Esto se indica mediante la configuración de la CPU de la bandera de medio acarreo. Este valor también debe corregirse, agregando 06 16 a 81 16 para producir un resultado BCD corregido de 87 16 .
0011 1001 39+ 0100 1000 48----------- 1000 0001 81 , resultado intermedio + 0110 06, ajuste----------- 1000 0111 87 , resultado ajustado
Finalmente, si una suma da como resultado un dígito alto no decimal, entonces se debe sumar 60 16 al valor para producir el resultado BCD correcto. Por ejemplo, sumar 72 16 y 73 16 produce E5 16 . Dado que el dígito más significativo de esta suma no es decimal (E), sumarle 60 16 produce un resultado BCD corregido de 145 16 . (Tenga en cuenta que el primer dígito es en realidad un bit de acarreo ).
0111 0010 72+ 0111 0011 73----------- 1110 0101 E5 , resultado intermedio + 0110 60, ajuste-----------1 0100 0101145 , resultado ajustado
Resumiendo, si el resultado de una suma binaria contiene un dígito bajo no decimal o hace que se establezca la bandera de medio acarreo, el resultado debe corregirse agregando 06 16 ; si el resultado contiene un dígito alto no decimal, el resultado debe corregirse aún más agregando 60 16 para producir el valor final correcto de BCD.
Ver también
Referencias
- ^ "Manual del desarrollador de software de arquitectura Intel, volumen 2: manual de referencia del conjunto de instrucciones" (PDF) . Consultado el 29 de mayo de 2013 .