2011-12-27 21 views
5
mov eax, 0x01 
    mov ecx, 0x02 
    div ecx     ; Divide AX/CX, saves remainder in DX 
    cmp dx, 0 
    je OddNumber 
    int 80h 

Cuando trato de dividir 1/2, en lugar de ir a la etiqueta OddNumber, devuelve "excepción de punto flotante". Sé que 1/2 es un flotador, pero ¿cómo puedo manejarlo? Gracias.Divisiones de montaje y puntos flotantes

GDB dice "Programa recibido señal SIGFPE, excepción aritmética". por cierto.

Respuesta

9
  1. Necesitas cero edx antes de llamar div ecx. Al usar un divisor de 32 bits (por ejemplo, ecx), div divide el valor de 64 bits en edx:eax por su argumento, por lo que si hay basura en edx, se trata como parte del dividendo.

  2. Después del div, es probable que desee comparar edx, no solo dx.