본문 바로가기
기타 언어/Assembly

rep stos 명령어

by woohyeon 2020. 4. 5.
반응형

개인적으로 학습하는 내용이라 틀린 내용이 있을 수 있습니다.

Visual studio에서 디버깅을 하다가 디스어셈블 뷰를 보면서 함수 호출 과정을 따라가다 보면 항상 rep stos라는 명령어 단계에서 무언가 여러 번 반복되는 과정이 있었다. 그냥 모른 채로 넘어갔는데 알아야 할 것 같아서 정리해본다.

 

[rep] 
우선 rep라는 명령어는 반복에 관한 명령어인데 repeat의 준말인 것 같다.

다음은 MSDN에 나와있는 REP 명령어에 대한 설명이다.

The instruction can be prefixed by REP 
to repeat the operation the number of times specified by the ecx register.

The rep mov instruction is used to copy blocks of memory.
The rep stos instruction is used to fill a block of memory with accT.

해석해보면 ecx 레지스터에 저장된 수만큼 어떤 동작을 반복하기 위해 REP 명령어를 접두사로 붙일 수 있다고 한다.
rep mov 라는 명령은 메모리 블럭을 복사하기 위해 사용되고, rep stos는 메모리 블럭을 accT로 채우기 위해 사용한다고 한다.
즉 rep 뒤에 오는 명령을 ecx에 저장된 횟수만큼 반복한다고 생각하면 될 듯 하다.


[stos]
 

The STOS instruction copies the data item from AL (for bytes - STOSB), AX (for words - STOSW) or EAX (for doublewords - STOSD) to the destination string, pointed to by ES:DI in memory.

https://www.tutorialspoint.com/assembly_programming/assembly_stos_instruction.htm

stos는 al 또는 ax 또는 eax의 값을 edi가 가리키는 메모리 공간에 복사한다. 

 

[예제]
다음과 같은 어셈블리어를 해석해보자.

1. 주소 [ebp-110h]를 edi에 저장한다.
2. 16진수 값 '41h'(65) 를 ecx에 저장한다.
3. 값 0CCCCCCCCh를 eax에 저장한다.
4. eax에 저장된 값을 edi가 가리키는 곳에 ecx번 반복하여 복사한다. 

// ecx에 저장된 값은 반복을 하면서 1씩 감소한다.
// edi가 가리키는 곳에 값을 write 할 때 마다 주소(edi)가 자동으로 증가한다.

결론: rep stos는 특정한 값으로 특정 주소의 메모리를 초기화한다.




댓글