Jeśli w asemblerze na procesorze rodziny “x86_64” zapiszę taką instrukcję:
mov %rax,(%rbx)
gdzie rejestr rax zawiera wcześniej ustawioną wartość, a rejestr rbx zawiera poprawny adres w pamięci, to procesor zapisze tę daną bez odczytu pamięci pod adresem rbx? Mam na myśli na przykład wczytywanie pamięci do “cache” procesora.
Załóżmy, że pod tym adresem znajduje się jakaś ‘flaga’, którą przełączam w algorytmie.
Drugie pytanie. Jeśli instrukcja ma postać
mov %rax,%rdx
gdzie rejestr rdx zawiera jakąś zmienną przechowywaną w rejestrze, to procesor wykona to szybciej niż gdyby testować, czy trzeba ustawiać tę zmienną (np. zerować), a później ustawiać? Przykładowo w takim algorytmie:
while( /* … */ )
{ if(cond)
{ rdx = 0;
// …
}else( rdx != 5 )
{ rdx++;
// …
}else
{
}
}
(rdx potrzebuje być tylko ustawiane raz na wartość 0, po zakończeniu odliczania, gdy warunek cond jest pierwszy raz znowu spełniony, ale jest ustawiane zawsze ze względu na algorytm.)
⁑ Ten wątek jest kontynuacją myśli z wątku Przypisywać wartość warunkowo czy bezwarunkowo?.