Red de conocimiento informático - Conocimiento sistemático - Desbordamiento de división en lenguaje ensamblador, expertos por favor ayuden a resolverlo

Desbordamiento de división en lenguaje ensamblador, expertos por favor ayuden a resolverlo

Utilice DEBUG para rastrear su programa y descubra que la causa del desbordamiento es de hecho esta instrucción de división.

¡No sé por qué hiciste un número tan grande para dividir por 3!

Esto definitivamente se desbordará.

------------------------------------------- ----------------------------------------------- del 80x86 La CPU tiene dos instrucciones de división: división de 16 bits por un número de 8 dígitos y división de 32 bits por un número de 16 dígitos.

Sus cocientes son de 8 dígitos y 16 dígitos respectivamente.

Si el dividendo involucrado en la operación es mayor o el divisor es menor, entonces el cociente excederá el número predeterminado de dígitos.

En este momento, si usas la instrucción de división precipitadamente, se desbordará.

De esto se puede ver que las propias instrucciones de la CPU tienen limitaciones y no deben usarse a la ligera.

------------------------------------------- ------------------------- de la ejecución Antes de la instrucción de división, debes hacer un juicio:

Si el alto- El bit de orden del dividendo es menor que el divisor, no se producirá "desbordamiento".

Pero lo mejor es escribir usted mismo un programa "sin desbordamiento".

La idea de programación es la siguiente:

Una vez que lo entiendas, descubrirás que este programa es realmente muy simple.

Si lo escribes tú mismo, seguro que lo conseguirás.

En la imagen, el dividendo son cuatro bytes: 1A 2B 3C 4D.

Después de dividir por BL, el cociente obtenido también es de cuatro bytes.

Siga los pasos de la figura, DIV?BL debe ejecutarse cuatro veces.

Mientras BL sea distinto de cero, nunca se producirá un desbordamiento.

Según esta idea, el número de bytes del dividendo puede seguir aumentando y sólo está limitado por el tamaño de la memoria.

Esto significa: el dividendo puede considerarse infinito.