2011-06-07 18 views
13

Una de mis diapositivas de las clases da un ejemplo de desbordamiento aritmético y llevar en un tema de banderas bifurcación condicional en un chip de ARM, se cita a continuación:desbordamiento aritmético vs aritmética Realizar

  • V (desbordamiento) - 7FFFFFFF 1
  • C (carry) - FFFFFFFF + 1

Presumiblemente por el bien de la ejemplo, la dirección sólo puede contener 8 bytes. Así que, para mí, parece que me gusta agregar 1 a 7FFFFFFF da 80000000. Pensé que 80000000 encajaría en una dirección de 8 bytes.

¿Por qué es esto un desbordamiento aritmético? ¿Es el camino equivocado en la diapositiva? ¿O es mi entendimiento defectuoso?

Gracias por cualquier respuesta

+2

Desborda un entero con signo. 0x80000000 es el mayor valor posible * negativo * en la aritmética de complemento de dos de 64 bits (en lugar de uno de 0x7fffffff). – falstro

+0

@falstro, eso es 32 bit :) – sgupta

+0

@ user1075375 Sí, lo sé. Debe haber sido baja en cafeína. :) – falstro

Respuesta

25
  • banderas de desbordamiento consiguen el sistema cuando el registro no puede representar adecuadamente el resultado como un valor con signo (que desbordado en el bit de signo).
  • Los indicadores de acarreo se establecen cuando el registro no puede representar correctamente el resultado como un valor sin signo (no se requiere un bit de signo).
+0

Bien, eso tiene sentido, ¡gracias! – eggonlegs

+0

Bastante simple y conciso. ¡¡Gracias amigo!! –

5

Obtiene un desbordamiento, si el bit de signo está dañado. Entonces sabes que tienes que ajustar tu resultado.

Obtiene un acarreo si el resultado no cabe en este valor. (necesita más bits de los que tiene).

En los viejos tiempos tenía que escribir sus propias subrutinas de suma y multiplicación para valores de varios bytes.

Cuestiones relacionadas