我正在试图弄清楚如何为SPARC程序集中的结构分配内存。
这是我正在使用的代码的C版本(可以正常工作和编译):
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
struct tester test;
....other code inbetween
testfn(&test);
testfn2(&test);
}
现在在汇编中,我想我必须调用这样的函数......
mov struct tester, %o0 ! Move struct tester into %o0
call sizeof ! Get size of struct tester
nop
set %o0, %l1 ! Store size
nop
mov 1, %o0 ! Prepare for calloc call
mov %l1, %o1 ! Prepare for calloc call
call calloc, 2
nop
mov %o0, %l2 ! The pointer returned to the allocated space
mov %l2, %o0
call testfn
nop
mov %l2, %o0
call testfn2
nop
我现在坚持的主要部分是如何将初始结构测试器测试传递到程序集中。我是在某处定义它还是如何工作?
以防万一,我的struct tester看起来像这样...
#define SIZE 100
struct tester2 {
char abcd[SIZE];
char efgh[SIZE];
};
struct tester {
struct tester2 *somePTR;
int an_Int;
};
答案 0 :(得分:0)
目前尚不清楚自己想做什么。在C代码中,看起来你正在为堆栈上的结构分配空间。
struct tester test;
在汇编代码中,虽然它包含一些奇怪的语句,但看起来你想在calloc调用中使用结构的大小来分配空间。
mov 1, %o0 ! Prepare for calloc call
mov %l1, %o1 ! Prepare for calloc call
call calloc, 2
因此,决定你想做什么,1)通过使用save指令递减%sp或2来为堆栈上的局部变量分配内存,只需调用calloc()。