Programación General > ASM (Ensamblador)

 Mi Pc No Sabe Dividir

<< < (3/3)

Amilius:
Saludos,

Bueno en realidad para que la condenada división resulte el cociente debe poder caber en un registro del mismo tamaño en bits del divisor (8,16,32).  :P

El problema es que si el resultado es demasiado grande para caber en el registro destino del cociente (AL, AX, EAX) se genera un INT0 (Que generalmente muestra el mensaje no muy adecuado de división entre 0, ya que esa sólo es una de las posibles causas). El cociente y residuo quedan con valores indefinidos.

En el caso:

mov ax,10
mov bx,2
div bx

Si en dx (que en el ejemplo no está con valor definido) tienes un valor mayor o igual a 2 al aplicar division entera:  DX:AX DIV BX (BX=2) siempre te saldra  error. Fíjate que no importa que DX:AX sea MUCHO mayor a BX.

Como DX estaba indefinido en tu código y siendo suficiente que sea mayor o igual a 2 a fuerza de probabilidades te salía ese mensaje de error.

P.D.

Como dijo deldar, en este caso es mejor usar el desplazador  ;)

P.D. 2:

Es fácil darse cuenta por que hay que EVITAR usar divisiones en tu código de alto nivel, el código que genera el compilador vá más alla de un simple DIV o IDIV.

Mr_Kracker:
mov ax,10
mov bx,2
div bx
ret

en lugar de bx , puedes usar cx o de lo contrario devuelve el valor original de bx antes del ret osea:

push ebx
mov ax,10
mov bx,2
div bx
pop ebx
ret

ó

mov ax,10
mov cx,2
div cx
ret

de seguro por eso te sale error.

Saludos

eagle2005:
esto te debe de servir:

mov ax,10
mov dx,0   ;mueve a dx,0 para k la divicion sea  de eax(dx:ax) entre bx :kicking:
mov bx,2
div bx
;;el resultado lo arroja en ax
;con esto es suficiente para solucionar tu
;problema ...Espero tu respuesta ...   :)

bob esponja:
muchisimas gracias era eso...

GRACIAS!

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa