Что означает эта ассемблерная инструкция в С++ коде?

Решил в годболте (ссылка) посмотреть ассемблерный код простейшей функции:

struct strr {

    int i;

};

int main(){

    strr strrr{};
    strr strrr2{};

    return 0;

}

Годболт выдал вот такой ассемблерный код, ответственный за выделение памяти для структуры:

    push    rbp
    mov     rbp, rsp
    mov     DWORD PTR [rbp-4], 0
    mov     DWORD PTR [rbp-8], 0
    mov     eax, 0
    pop     rbp
    ret

Я не могу понять, что делает mov DWORD PTR [rbp-4], 0 mov DWORD PTR [rbp-8], 0. Интуитивно я понимаю, что число после rbp- - это что-то вроде смещения адреса, относительно начала стека. Но не могу понять, во-первых, если rbp - это указатель на начало стека, то почему мы вычитаем из него размер структуры, чтобы получить адрес? Во-вторых, что значит DWORD PTR? Компилятор gcc


Ответы (0 шт):