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?.