Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly nas&x27;m如何使用fidiv_Assembly_Nasm - Fatal编程技术网

Assembly nas&x27;m如何使用fidiv

Assembly nas&x27;m如何使用fidiv,assembly,nasm,Assembly,Nasm,尝试将放置在浮点堆栈上的值除以整数值 我在调用fidiv之前检查了我的值,发现seg错误,这里有明显的错误吗 我注释掉了一些行,因为我正在调试 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 int

尝试将放置在浮点堆栈上的值除以整数值

我在调用fidiv之前检查了我的值,发现seg错误,这里有明显的错误吗

我注释掉了一些行,因为我正在调试

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

是的,您正在除以edx指向的值。这是一个错误,因为edx不是指针,而是一个值

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

我不知道您是否已使用现有地址初始化ebp,如果没有,这可能会导致另一个错误。

是的ebp确实包含正确的值,而且我不确定lea thing的作用是什么….?加载有效地址。你可以用“立即移动”来代替它,因为地址是一个常量。比如MOV地址,寄存器。如果你不知道我的意思,在维基百科上查“指针”。基本上,fidiv只使用指针,您需要一个指针(包含地址),它指向fidiv的值。