НАС, как использовать фидив - PullRequest
2 голосов
/ 20 апреля 2011

Пытаясь разделить значение, которое было помещено в мой стек с плавающей запятой, на целочисленное значение

Я проверил свои значения непосредственно перед вызовом fidiv, и я получил ошибку сегмента, есть ли здесь очевидная ошибка?

Я закомментировал несколько строк, так как сейчас я отлаживаю

esubprogram:
    push    eax
    fstp    qword[ebp]  ;copy contents of st0 onto ebp          ;checked to see if values where right 
    mov eax, esi    ;move precision number into ebx         ;checked to see if values where right

    push    eax
    call    factorial   ;get the factorial value
    mov edx, eax    ;move factorial value into edx


    fld qword [ebp] ;move value of ebp onto floating point stack

    fidiv   dword [edx] ;divide ebp value by edx value

;   fstp    qword [edi] ;move divided value into edi, and pop it off the FPS

;   mov eax, edi
    pop eax
    pop eax
    ret

1 Ответ

1 голос
/ 20 апреля 2011

Да, вы делитесь на значение, на которое указывает edx. Это ошибка, потому что edx не указатель, а значение.

lea     someaddresswithspaceforfourbytes, esi
mov     [esi], edx
fidiv   dword[esi] ;divide ebp value by the value at esi

Я не знаю, инициализировал ли вы ebp с существующим адресом, в противном случае это может вызвать другую ошибку.

...