Fallo división (ensamblador)

Aziwar

Buenas!

Digamos que la cosa es esta:

mov eax, auxd  (auxd viene de antes, pero vamos que es un número guardado en SDWORD normal y corriente)
mov ebx,8
div ebx
mov auxd, eax

Pues bien compila y todo, pero a la hora de llegar a la division peta el programa con el tipico error de windows.

Se que es la division pq he probado ir parando la ejecución con getkey, y es justo en la division dnd peta.

Puedo hacer cualquier otra operación ya sea add, sub o mul y no peta.. solo con div.
Tb he probado a usar otros registros u otro valor (necesito dividir por 8, pero bueno he probado otros) y lo mismo.

Del unico modo que no ha petado, es haciendo justo antes xor edx,edx. Pero al hacerlo, tp hace la división bien ya que siempre dice que el resultado es 13, y el valor de auxd suele ser siempre sobre 7000 y la división deberia ser sobre 800 y pico casi 900.

Hasta el momento antes de la divison he comprobado todos los valores, y efectivamente en eax está el valor de auxd y en ebx está el 8, pero despues lo que digo.. si uso el xor edx,edx acaba eax 13 si o si, y si no lo usa pues peta el programa.

Alguna idea?

LOc0

exd XOR exd tienes que hacerlo para poner a cero los bits de mayor peso de
EXD:EAX (que es realmente de dónde pilla DIV el dividendo). Y lo de que te de 13 siempre pues ni idea, comprueba el valor de los registros justo antes de operar y después a ver...

Salu2 ;)

Aziwar

justo antes como puse, son los valores que tienen que ser. En EAX está el valor q estaba en AUXD (que generalmente es 7000-+) y en EBX está el 8. Por eso me mosquea. Por eso y pq si me deja hacer la multiplicación, que teoricamente usa los mismos registros que la division

edit: arreglado. Como necesitaba dividir por 8, lo que hice fue un desplazamiento de 3 bits y listo

Usuarios habituales

  • Aziwar
  • LOc0