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