Прочитал о сборке, часть о соглашениях вызова процедур в сборке (особенно в Linux).как передать printf более 8 значений с плавающей запятой в сборке
Говорят, первые параметры 8 с плавающей точкой передаются через xmm0
- xmm15
и другие параметры в регистрах rdi
, rsi
, rdx
, rcx
, r8
, r9
, и другие остальные параметры должны быть прижаты к стек в обратном порядке.
Что делать, если у меня есть более 8 параметров с плавающей запятой и более 6 других параметров, в каком порядке нужно их толкнуть? Первые значения с плавающей запятой, которые не соответствуют 8 fp. регистры или другие параметры, которые не соответствуют 6 регистрам?
Является ли это авторским проектом, может ли он использоваться для справки? На титульной странице написано несколько имен, о которых я никогда не слышал. –
@BulatM. Да, эта страница ссылается на официальную текущую версию стандартного документа. например * * Версия 252 psABI x86-64 можно загрузить с [здесь] (https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r252.pdf) * ". К сожалению, документ не всегда полностью документирует все, на что ссылаются компиляторы, но все, что он говорит, является точным. Единственное исключение, о котором я знаю, это [zero/sign, расширяющий узловые целые аргументы до 32-битных] (http://stackoverflow.com/questions/36706721/is-a-sign-or-zero-extension-required-when-adding -a-32-битное смещение к-а-указатель-на/36760539 # 36760539). –
Копия документов ABI была опубликована на http://www.x86-64.org/documentation.html, но x86-64.org уже несколько месяцев был мертв. –