Выделение памяти для структуры в сборке SPARC - PullRequest
1 голос
/ 18 мая 2011

Я пытаюсь выяснить, как выделить память для структуры в сборке 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;
};

1 Ответ

0 голосов
/ 18 мая 2011

Не понятно, что вы хотите сделать. В коде 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 ().

...