2010-09-29 8 views

Odpowiedz

43

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

+0

Czy możesz podać przykład, co robi? – COMer

+4

@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

+0

@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