Передача параметров C++ System V ABIC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Передача параметров C++ System V ABI

Сообщение Гость »

Код: Выделить всё

#include 

struct st1 { int vi[4]; };
struct st2 { char vd[4]; };
class cl {
char v1[4];
char v3[4];
long v2[4];
public:
cl(st1 ss);
cl(st1& s1, int ar2[]);
void elab1(char[],st2);
};

void cl::elab1(char ar1[],st2 st)
{
st.vd[0]='a';
st.vd[1]=3;
st.vd[2]=3;
st.vd[3]=3;
ar1[0]=3;
}
Я делаю перевод кода с C++ на ассемблер, но не могу понять, как именно происходит передача параметров на ассемблере. Я прочитал ABI System V, но он не совсем ясен для конкретных случаев, подобных тому, который я написал выше.
Существует ли какой-либо источник, кроме pdf-файла System V, где это объясняется подробно передача параметров структур данных осуществляется? Спасибо
Я также скопировал код на https://godbolt.org/: char ar1[] передается как указатель, и это меня устраивает, а вместо этого массив символы внутри st2 передаются не как указатель на &vd[0].

Код: Выделить всё

cl::elab1(char*, st2):
pushq   %rbp
movq    %rsp, %rbp
movq    %rdi, -8(%rbp)
movq    %rsi, -16(%rbp)
movl    %edx, -20(%rbp)
movb    $97, -20(%rbp)
movb    $3, -19(%rbp)
movb    $3, -18(%rbp)
movb    $3, -17(%rbp)
movq    -16(%rbp), %rax
movb    $3, (%rax)
nop
popq    %rbp
ret
This is the translated assembly code from https://godbolt.org/.
Many thanks for your help.


Источник: https://stackoverflow.com/questions/781 ... stem-v-abi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»