Assembly x86汇编/C:如何将数据存储到内存部分以供进一步使用
我正在编写一个x86汇编程序(AT&T语法),它动态分配一个数组,后者填充该数组,并返回指向该数组的指针。最初,我将指向数组内存地址的指针存储在数据部分中定义的标签中。然而,我的老师要求我不能在我的程序中使用数据部分。我已经在使用所有的寄存器,并且堆栈中有太多的push/pop调用,因此在寄存器中跟踪该指针将非常不方便。有没有办法存储数据而不将其放入寄存器或标签中 我正在考虑将指针(调用Assembly x86汇编/C:如何将数据存储到内存部分以供进一步使用,assembly,memory,memory-management,x86,att,Assembly,Memory,Memory Management,X86,Att,我正在编写一个x86汇编程序(AT&T语法),它动态分配一个数组,后者填充该数组,并返回指向该数组的指针。最初,我将指向数组内存地址的指针存储在数据部分中定义的标签中。然而,我的老师要求我不能在我的程序中使用数据部分。我已经在使用所有的寄存器,并且堆栈中有太多的push/pop调用,因此在寄存器中跟踪该指针将非常不方便。有没有办法存储数据而不将其放入寄存器或标签中 我正在考虑将指针(调用malloc后存储在EAX寄存器中)存储到一个特定的内存单元中(在本例中,是EBP寄存器下方的40字节),使用
malloc
后存储在EAX
寄存器中)存储到一个特定的内存单元中(在本例中,是EBP
寄存器下方的40字节),使用基址堆栈指针作为参考。但是,MatrixAddress(%ebp)
的值似乎是负值,并且在以后访问该部分内存时出现了分段错误
.equ matrixCAddress, -40
push %esi
movl matrixCAddress(%ebp), %esi
movl %eax, (%esi)
pop %esi
您的代码没有执行您描述的操作。无论如何,堆栈上的局部变量是一件事,但是如果您希望使用它,您需要分配它们并将
ebp
设置为帧指针。假设您已经分配了至少40个字节,并且设置了ebp
,您只需执行mov%eax,matrixcdAddress(%ebp)