Я очень новичок в сборке GNU, я прочитал несколько писем, но до сих пор не совсем понимаю, что происходит. Из моего понимания:Сборник GNU Inline: что означают% 1 и% 0?
movl %eax, %ebx\n\t
будет двигаться все, что в %eax
в ebx
, но не добавит содержимое друг к другу
addl %eax, %ebx\n\t
добавит содержимое %eax
с ebx
и держать его в правом наиболее регистре
addl %1, %0\n\t
вот где я запутался, мы добавляем 1 и 0? зачем нам нужен %0
?
В AT & T синтаксис, адресатом является правая сторона, так что «держать его в самый левый регистр» является неправильным. % 0 и% 1 относятся к замещаемым операндам ввода/вывода, перечисленным в разделе ограничений. Возможно, вы захотите прочитать [manual] (https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html). – Jester
@Jester Извините, это опечатка, вот что я имел в виду. что имеет смысл сейчас, если я использую% 2, это будут 3-х операнды ввода/вывода? – octain
Да. Также обратите внимание, что вы можете использовать именованные операнды в форме '% [name]', чтобы сделать код более читаемым. – Jester