Что происходит с% rax после выполнения "movq% rax, (% rdi)"? - PullRequest
0 голосов
/ 14 апреля 2019

Что меня интересует, так это оставшиеся значения в% rax после выполнения кода.
Например, пусть% rax равно 0xFFFFFFFFFFFFFFFF
И я выполнил код.
Тогда 0xFF ... FF все еще в% rax?

И мой последний вопрос - следующий.
В коде сборки, который
decode1:
movq% rax, (% rdi)
RET

Почему команда возврата не включена в исходный код c функции decode1?
Я узнал, что значение% rax возвращается при выполнении ret.

1 Ответ

2 голосов
/ 14 апреля 2019

mov фактически означает копирование;операнд источника не затронут.Итак, после movq %rax, (%rdi) rax все еще содержится то, что содержалось раньше.

Почему команда возврата не включена в исходный код c функции decode1?Я узнал, что значение% rax возвращается при выполнении 'ret'.

В сборке x86 нет понятия "вернуть что-то";ret просто возвращает выполнение вызывающей стороне.Бит, который вы говорите о rax, на самом деле заключается в том, что практически во всех соглашениях о вызовах x86_64 целые или возвращаемые значения указателя помещаются туда перед возвратом, поэтому вызывающая сторона ожидает, что возвращаемое значение будет там.Если это функция void, то rax не имеет особого значения - это просто сжатый регистр, как и любой другой.

...