Ассемблер в Linux для программистов C: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Отладчик GDB: $rip для 64бит
заметки о 64битной архитектуре
Строка 994:
}
</syntaxhighlight>
 
Если вы пытаетесь писать код под 64битную архитектуру, то обратите внимание на следующие различия:
 
* Calling convention. Параметры функции передаются через регистры <code>%rdi</code>, <code>%rsi</code>, ... А значение возвращается через <code>%rax</code>
* Очень важно, чтобы указатель на стек <code>%rsp</code> был выравнен по 16-ти байтам! То есть, чтобы его значение заканчивалось на ноль. Если не заканчивается, то нужно положить что-нибудь в стек. Зачем это делается? Потому что процессор наиболее эффективно читает память по адресам, кратным длине своего слова. Если не выравнять стек, то будет segmentation fault.
 
*
 
=== Команды сравнения и условные переходы. Безусловный переход ===