Resultados de desbordamiento en el bit de indicador de señal incorrecto establecido en el microprocesador 8085.

0

En el caso del microprocesador 8085, cuando el bit MSB del acumulador es 1, el indicador de signo se convierte en 1 (simplemente copie el msb del resultado), mi pregunta es que:

Cuando sumamos dos números positivos, digamos 44H (01000100) y 43H (01000011), el resultado sería 10000111 y, por lo tanto, el indicador de signo se convierte en 1, pero los dos números son positivos, ¿cómo el signo se convierte en 1?

¿Cómo puede manejar esto el microprocesador, por favor, ayúdame?

    
pregunta Prakash Sharma

3 respuestas

4

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:

  1. 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.

  2. 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.

    
respondido por el Anonymous
3

Agregar enteros con signo que produzcan una suma fuera del rango de representación no es válido formalmente.

Para que funcione de manera práctica, necesitaría una lógica de software para averiguar qué sucedió y crear un resultado correcto en alguna representación viable, por ejemplo, podría probar que ambos operandos fueron positivos y reinterpretar el resultado como un valor positivo en un formato más amplio (o simplemente sin firmar).

Sin embargo, el esquema de lenguaje de nivel superior más común (por ejemplo, en C) es requerir que primero cambie la representación de los argumentos a uno lo suficientemente amplio como para contener el resultado, por lo que, por ejemplo, almacenaría sus valores de 8 bits. en registros de 16 bits y agréguelos para producir un resultado de 16 bits. Si bien en una vista es ineficiente (si es más ancho que su ALU y, por lo tanto, requiere múltiples adiciones), desde otra perspectiva, esto es realmente eficaz, ya que las operaciones son siempre las mismas independientemente de los datos, y en diseños posteriores (segmentados) y acelerados. , tomar decisiones de flujo de programas puede costar más tiempo que realizar aritmética.

    
respondido por el Chris Stratton
0

Respuesta corta:

El indicador de signo solo depende del bit D7 del resultado que obtienes en el acumulador y nada más.

    
respondido por el rimalonfire

Lea otras preguntas en las etiquetas