Читая некоторый исходный код в проекте GNU, я наткнулся на этот фрагмент встроенной сборки:
__asm__ (
"divq %4"
: "=a" (q), "=d" (r)
: "0" (n0), "1" (n1), "rm" (d)
);
Здесь переменные q
, r
, n0
, n1
и d
являются 64-разрядными целыми числами. Я знаю достаточно сборки, чтобы понять суть того, что это делает, но есть некоторые детали, в которых я не уверен.
Что я понимаю:
Мы делим содержимое регистра RAX на d
, помещая частное в q
, а оставшуюся часть в r
.
Чего я не понимаю
- Почему есть три входа
Вот? Нам нужно только ввести
дивиденд и делитель, так что использовать
может быть для 3 входов?
- Я не могу сказать, какой из входов является дивидендом. В общем, я ничего не вижу на самом деле
загружается в регистр RAX,
так откуда он знает, на что делить?