Что делает следующая инструкция по сборке addsd -8 (%rbp), %xmm0?

Я пытаюсь выяснить, что на самом деле делает инструкция по сборке

addsd   -8(%rbp), %xmm0

Я знаю, что это добавление с плавающей запятой на машине x86-64 с SSE2. Кроме того, я знаю, что %xmm0 является регистром. Однако я не уверен, что означает -8(%rbp). Руководства немного сбивают с толку.

в принципе, вопрос в том, означает ли -8(%rbp), что он принимает значение из регистра (возможно, последние 8 байтов rbp) или он принимает значение из памяти (значение с плавающей запятой со смещением -8 от адреса, содержащегося в rbp).

1 ответов


ваша вторая догадка верна. Это доступ к значению в -8 смещение байтов от адреса rbp.

предполагая синтаксис AT&T, эта инструкция загружает 8-байтовый double С адреса rbp - 8 и добавляет его к стоимости в нижней половине xmm0.