Debes estudiar aritmética binaria. La bandera de signo no es suficiente para identificar el resultado de la adición firmada. Debería haber otra bandera llamada overflow que identificará si el valor resultante es correcto o no.
8085 no tiene un bit de desbordamiento, a diferencia del bit P / V de Z80, y no podrá identificar la corrección del resultado utilizando solo el indicador S. Será su tarea del programador asegurar la condición de desbordamiento ya sea mediante:
-
examinando signos de datos de entrada. En su ejemplo, ambos son positivos, pero la salida es negativa, lo que significa que hay un desbordamiento. En general, los valores de diferentes signos nunca activarán el desbordamiento; si los signos de los operandos son iguales, pero el signo del resultado es diferente, el resultado se ha desbordado.
-
expandiendo el tamaño de los valores para contener el bit de desbordamiento. Para esto, en el caso de registros de 8 bits, es posible que solo tenga 6 bits significativos, con dos MSB firmados por [7] y overflow [6] respectivamente. Si, después de la operación, estos bits difieren, significa condición de desbordamiento.
Su ejemplo extendido a 9 bits
0.0.1000100 + 0.0.1000011 = 0.1.0000111
44h es un valor positivo de 7 bits, 43h es un valor positivo de 7 bits; el resultado es tener sus bits de signo y desbordamiento establecidos de manera diferente, 0 y 1, y es condición de desbordamiento. Otro ejemplo -
1.1.1100000 + 0.0.1110010 = 1.0.0.1010010 => 0.0.1010010
con acarreo descartado, vemos que los bits de signo y desbordamiento son iguales, por lo que el resultado es correcto y en decimal es -32 + 114 = 82.