Podczas czytania przez jakiegoś kodu źródłowego w projekcie GNU, natknąłem się na ten kawałek montażu inline:Pomoc instrukcja zrozumienie DIV w x86 inline montażu
__asm__ (
"divq %4"
: "=a" (q), "=d" (r)
: "0" (n0), "1" (n1), "rm" (d)
);
Tutaj zmienne q
, r
, n0
, n1
i d
to 64-bitowe liczby całkowite. Znam wystarczającą ilość zgromadzeń, aby zrozumieć, co się dzieje, ale są pewne szczegóły, których nie jestem pewien.
Co rozumiem:
Jesteśmy podzielenie zawartości rejestru RAX przez d
, umieszczając w q
iloraz i resztę umieszczając w r
.
Co nie rozumiem
- Dlaczego istnieją trzy wejścia tutaj? Musimy tylko wprowadzić dywidendę i dzielnik, więc jakie zastosowanie może być dla 3 wejść?
- Nie mogę stwierdzić, które z danych wejściowych to dywidenda. Mówiąc ogólniej, nie widzę niczego, co faktycznie zostałoby załadowane do rejestru RAX, , więc skąd wie, co podzielić przez co?
+1 dobrze sformatowane pytanie. Podoba mi się sekcja "Co rozumiem" i "czego nie rozumiem". –