mov
фактически означает копирование;операнд источника не затронут.Итак, после movq %rax, (%rdi)
rax
все еще содержится то, что содержалось раньше.
Почему команда возврата не включена в исходный код c функции decode1?Я узнал, что значение% rax возвращается при выполнении 'ret'.
В сборке x86 нет понятия "вернуть что-то";ret
просто возвращает выполнение вызывающей стороне.Бит, который вы говорите о rax
, на самом деле заключается в том, что практически во всех соглашениях о вызовах x86_64 целые или возвращаемые значения указателя помещаются туда перед возвратом, поэтому вызывающая сторона ожидает, что возвращаемое значение будет там.Если это функция void
, то rax
не имеет особого значения - это просто сжатый регистр, как и любой другой.