(%sp)
будет режим адресации синтаксиса AT & T. (Недопустимо, потому что 16-битные режимы адресации не могут использовать SP напрямую, только BP|BX + SI|DI
NASM x86 16-битные режимы адресации ; по этой же причине mov [sp], bx
является недопустимым.)
В синтаксисе NASM квадратные скобки []
означают операнд памяти.
В NASM символы ()
вокруг SP удаляются, как и любое выражение времени компиляции,
, поэтому mov (sp), bx
собирается в 89DC mov sp,bx
. Попробуйте сами, собрав и используя ndisasm
на выходе. (Или собрать в -felf32
и использовать objdump
)
Это mov между двумя регистрами, перезаписывающий указатель стека. Скорее всего, не то, что вам нужно, и полностью отличается от хранения в памяти с mov [bp], bx
или чем-то еще.
В NASM вы можете использовать парены при написании чего-то вроде mov ax, (1+3) * 4
, так что анализатор выражений NASM обрабатывает парены, и, очевидно, наличие имени регистра в скобках ничего не меняет.
Я упомянул только синтаксис AT & T в верхней части этого ответа, потому что это и синтаксис Plan9 / Go - единственный раз, когда вы обычно ставите регистрационное имя внутри паренов; это просто сбивает с толку в синтаксисе NASM; не делай этого.