Niedawno natknął następującej sekwencji instrukcji montażu:Co robi sekwencja instrukcji składania "rep stos" x86?
rep stos dword ptr [edi]
Niedawno natknął następującej sekwencji instrukcji montażu:Co robi sekwencja instrukcji składania "rep stos" x86?
rep stos dword ptr [edi]
Dla ecx
powtórzeń, przechowuje zawartość eax
w przypadkach edi
punktów, zwiększając lub zmniejszanie edi
(w zależności od flagi kierunku) przez 4 bajty za każdym razem . Zwykle jest to używane w przypadku operacji typu memset
.
Zwykle ta instrukcja jest napisana po prostu rep stosd
. Doświadczeni monterzy znają wszystkie wspomniane wyżej szczegóły właśnie dzięki temu. :-)
ETA dla kompletności (dzięki HIS): każdej iteracji ecx
jest zmniejszana o 1, a pętla kończy się, gdy osiągnie zero. W przypadku stos
jedyną rzeczą, którą zaobserwujesz jest to, że ecx
jest wyczyszczony na końcu. Ale w przypadku scas
lub podobnym, gdzie używane są prefiksy repz
/repnz
, ecx
może być większe niż zero, jeśli operacja zatrzymana przed wyczerpaniem ecx
bajtów/słów/whatevers.
Zanim zapytasz, scas
służy do wykonywania operacji typu: strchr
. :-P
Czy możesz podać przykład, co robi? – COMer
@COMer - Jest już w anwser: like memset - wypełnia określoną podaną (ekx) ilość pamięci (w [edi]) o podanej wartości (w eax). – PhiS
@Chris Jester-Young - dla kompletności, proponuję wspomnieć, że spowoduje to również zmniejszenie ekx o jedną po każdej iteracji, dopóki ecx nie osiągnie 0. – PhiS