Size: a a a

Compiler Development

2020 February 17

а

акварель на мету in Compiler Development
я в asm не очень разбираюсь
источник

МБ

Михаил Бахтерев in Compiler Development
акварель на мету
и почему именно base pointer
Ну. x86 заточена под доступ к данным через ebp.
источник

IJ

Igor 🐱 Jirkov in Compiler Development
акварель на мету
я про

push $rbp
mov $rsp, $rbp
pop $rbp
Во время работы функции rsp меняется по-всякому. Rbp мы заставляем всегда указывать на начало куска стека, хранящего данные функции. Благодаря этому локальные переменные и аргументы в стеке мы можем стабильно адресовать относительно него
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Упрощая, последняя локальная переменная всегда будет лежать по адресу rbp-8, предпоследняя -- rbp-16 и тд
источник

K

Kir in Compiler Development
Это чтобы посредством mov $rbp, $rsp выкинуть все локальные переменные разом
источник

А

Алексей in Compiler Development
rbp же обязан сохраняться после возврата функции
источник

А

Алексей in Compiler Development
насколько я знаю
источник

IJ

Igor 🐱 Jirkov in Compiler Development
А сохраняем его чтобы вернуться к старому rbp после выхода из функции
источник

AT

Alexander Tchitchigin in Compiler Development
акварель на мету
и почему именно base pointer
Это просто по соглашению. Принципиально можно в любой регистр сохранить.
источник

IB

Ivan Boldyrev in Compiler Development
акварель на мету
зачем у фцнкции пролог и эпилог ?
1. Для раскрутки стека при исключениях.
2. Для отладчиков и т.п.
источник

а

акварель на мету in Compiler Development
Igor 🐱 Jirkov
Во время работы функции rsp меняется по-всякому. Rbp мы заставляем всегда указывать на начало куска стека, хранящего данные функции. Благодаря этому локальные переменные и аргументы в стеке мы можем стабильно адресовать относительно него
можно пример?
источник

а

акварель на мету in Compiler Development
например если я создам локальную переменную
то чтобы ее установить к примеру в 11 нужно будет сделать

mov 0x0b, -8(%rbp)?
источник

а

акварель на мету in Compiler Development
и ее нужно алокейтить или она уже сцществует ?
источник

AT

Alexander Tchitchigin in Compiler Development
акварель на мету
и ее нужно алокейтить или она уже сцществует ?
Стек сразу существует - его аллокейтить не нужно. Нужно место на нём зарезервировать.
источник

AT

Alexander Tchitchigin in Compiler Development
sub esp, 8*nvariables
источник

А

Алексей in Compiler Development
Igor 🐱 Jirkov
Упрощая, последняя локальная переменная всегда будет лежать по адресу rbp-8, предпоследняя -- rbp-16 и тд
просто вроде зачастую всё равно относительно esp/rsp адресуют, по крайней мере мне так показалось
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Алексей
просто вроде зачастую всё равно относительно esp/rsp адресуют, по крайней мере мне так показалось
так бывает, но это что-то вроде оптимизации. Если функция не вызывает никого и со стеком кроме аллокации переменных ничего не происходит, можно адресоваться относительно rsp. Если переменные помещаются в red zone, можно даже указатель стека на двигать чтобы их аллоцировать
источник

а

акварель на мету in Compiler Development
Alexander Tchitchigin
sub esp, 8*nvariables
источник

а

акварель на мету in Compiler Development
Alexander Tchitchigin
sub esp, 8*nvariables
почему это скомпилировалось без резервации ?
источник

а

акварель на мету in Compiler Development
или movl одновременно резервирует и копирует ?
источник