汇编代码:
section .text
global calculateRoot
extern printFloat
calculateRoot:
push rbp ; save Base Pointer (bp) original value
mov rbp, rsp ; use base pointer to access stack contents
sub rsp, 55 ; allocating bytes in stack for local variables
call printFloat
mov rsp, rbp ; closing stack
pop rbp ; resotre rbp
ret
c code:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
void printFloat();
extern void calculateRoot(double num);
int main(){
double num = 43432432.23532534534543534;
calculateRoot(num);
printFloat(num);
return 0;
}
void printFloat(){
double h = 4332432525.324324;
printf("\nFloating Point Number %lf\n",h);
}
上述代码会产生分段错误。我试图了解原因。当我试图以不同的方式重现问题时,我发现seg故障只发生在我尝试打印浮点数时。例如,int不会发生这种情况。此外,我发现教学中的不同数量&#34; sub rsp,55&#34;可以解决问题,例如,如果它放48或16例如将没有seg故障。我有什么东西在这里失踪吗? 非常感谢每一个答案。
n.p - 此代码不适用于任何内容。当我发现程序中发生了奇怪的事情时,我创建了它。所以这段代码是为了在我的真实程序中找到我的错误。 还有一点我注意到,当我使用8 in&#34; sub rsp,55&#34;它创建了一个seg错误,所以我在程序集中创建了另一个函数并从calculateRoot调用它,在这个函数中我创建了另一个&#34; sub rsp,8&#34;它消除了seg故障(当它用于&#34; sub rsp,55&#34时,16个工作。)