Правила использования% eax,% edx,% ecx в одном функциональном фрейме - PullRequest
0 голосов
/ 14 июля 2020

Env: 32-разрядная версия i386 Сборка: AT&T OS: Linux

Я просто хочу спросить, есть ли какое-либо правило относительно последовательности использования регистра %eax, %edx, %ecx, когда вы используете их в том же function frame.

Как я заметил, они часто появлялись в моей среде с последовательностью %ecx, %edx, а затем %eax для хранения локальных переменных или других временных переменных.

Спасибо вам всем

1 Ответ

3 голосов
/ 14 июля 2020

Как упоминалось в комментариях, это связано с i386 System V ABI (дополнительные ссылки в x86 tag wiki ):

eax , ecx и edx - временные регистры, их не нужно сохранять при вызовах функций. Все остальные 32-битные регистры общего назначения должны быть сохранены в стеке, что требует дополнительных инструкций.

Поэтому лучше всего сначала использовать eax, ecx и edx в одной и той же функции. и только потом ebx, esi, edi, esp и ebp.

(здесь я опустил знаки процента для удобства чтения)

...