¿Necesita ayuda con la aritmética digital?

2

Estoy agregando dos números hexadecimales y determinando qué bits se registran en el código de condición. Los números que estoy agregando son 4D (base 16) y 66 (base 16). He convertido ambos a sus equivalentes binarios.

4D (base 16) = 0 1 0 0 1 1 0 1

66 (base 16) = 0 1 1 0 0 1 1 0

Una vez que agregué estos obtuve 1 0 1 1 0 0 1 1 . Al observar el MSB (bit 7), es 1 lo que hace que el número sea negativo y el bit N se establece en uno. Estaba mirando mis notas, cuando un número es negativo, está representado por su complemento a 2s.

entonces:

1 0 1 1 0 0 1 1 = -(0 1 0 0 1 1 0 0 + 1) = - 0 1 0 0 1 1 0 1 = -4D (base 16) = -77 (base 10).

Mi profesor dijo que el bit V se establece en 1 debido al desbordamiento del complemento 2s. Para el procesador de 8 bits, el valor máximo es +127 (base 10) y el valor mínimo es -128 (base 10). Pensé que el desbordamiento del complemento de 2s ocurrió cuando la respuesta está fuera de estos límites. Mi respuesta está dentro de estos límites, por lo que no se produce un desbordamiento del complemento 2s, así que me preguntaba por qué% bit_de V está configurado como 1 .

Pongo esto en una calculadora hexadecimal y dice que la respuesta es B3 (base 16), que es lo que obtuve simplemente al sumar los números. Esto se convierte a 179 (base 10), lo que se sale de los límites y el bit V se establecería en 1 .

Entonces, mi profesor hizo un paso adicional después de agregar los dos números para mostrar el equivalente negativo. ¿Cuándo debo determinar si se debe establecer el bit V y cuál debería ser la respuesta real, B3 o -4D ?

    
pregunta Greg Harrington

2 respuestas

0

El desbordamiento de complemento de A 2 se indica cuando los valores de origen tienen el mismo signo pero el signo resultante difiere. En el caso de su ejemplo, ambos valores de origen tienen 0 como MSB pero el resultado tiene 1, por lo que se produjo un desbordamiento.

La suma es 0xB3, ya que el resultado en sí no es modificado por los registros de estado, solo cómo lo tratas después del hecho.

    
respondido por el Ignacio Vazquez-Abrams
3

Para su procesador, los 8 bits en un valor pueden interpretarse de dos maneras:

  1. como un número sin firmar, rango 0 .. 255
  2. como un número de complemento a 2s, rango -128 .. +127

(Hay otras formas en que se puede interpretar un valor de 8 bits, por ejemplo, como un carácter ASCII, como un valor codificado en magnitud de signo, o como dos dígitos BCD).

Depende del código para elegir la interpretación correcta, la ALU no lo sabe. Por lo tanto, la ALU en efecto calcula AMBOS resultados. Lo bueno es que el patrón de resultado de 8 bits es el mismo para la adición sin signo y complemento a 2s. (Esta es la razón principal de la popularidad de 2s-complement.)

Pero lo confuso es que la interpretación de los resultados de 8 bits y especialmente de los bits de estado es diferente, dependiendo de la interpretación.

  1. Para una adición no firmada, se produce un desbordamiento cuando hay un arrastre de El 8º bit. En tu caso esto no ocurrió. De ahí la bandera de llevar se establecerá en "no llevar". En la mayoría de los chips esto será codificado como Carry = 0 .
  2. Para la adición de complemento a 2s, (como explicó Ignacio), un desbordamiento ocurre cuando el acarreo desde el séptimo bit hasta el octavo bit es diferente De la realización del octavo bit. Esto está codificado en el bit V.

El resultado de tu adición puede resumirse como X = 0xB3 , C = 0 , V = 1 . Cómo debe interpretarse esto depende de cómo deben interpretarse los dos valores de entrada. En los valores sin signo, el resultado es 0xB3 y no se produjo ningún desbordamiento. Si se produjeron desbordamientos de complemento 2s, y por lo tanto, 0xB3 no tiene significado. (Si no se produce un desbordamiento, sería un valor negativo). Si los dos valores tuvieran alguna otra interpretación, el resultado probablemente no tenga sentido.

Nota al margen : muchos procesadores tienen (tenían?) un indicador de estado adicional: el medio de transporte, que indicaba un acarreo del bit 4 al bit 5. Esto se usó cuando los dos valores cada uno representa dos dígitos BCD.

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas