Непосредственно перед выполнением первой инструкции процедуры pushxmm0
стек выглядит следующим образом:
... used stack ...
RA # return address in main, pointing to "CALL popxmm0"
<--- RSP points here
... unused stack ...
Теперь мы выполняем инструкции SUB
и MOVSD
. Стек теперь выглядит следующим образом:
... used stack ...
RA
copy of XMM0
<--- RSP points here
... unused stack ...
Вопрос: куда вернется (следующая) инструкция RET
?
Должно быть достаточно ясно, что она не вернется к намеченному ( РА) адрес.