[MASM x86]

 

------------------------------------------------------------------------------------------------------

명령어 push 

push operand (레지스터, 상수)

 

1. esp = esp - 논리주소의 크기 (x86 = 4, x64 = 8)

2. PTR [esp]에 operand 값을 쓴다.  

 

명령어 pop

 

pop operand (레지스터)

1. PTR [operand]의 값을 레지스터에 쓴다.

2. esp = esp + 논리주소의 크기 (x86 = 0x4, x64 = 0x8)

-------------------------------------------------------------------------------------------------------

 

esp에서 시스템 논리주소의 크기를 빼는 이유는 stack이 아래방향으로 자라기 때문이다. 

예를 들어, x86 시스템에서 ESP = 0x0019FE28 EBP = 0x0019FE34 이라고 하면,

 

 push   ebp        //  1.  0x0019FE24 (esp) = 0x0019FE28 (esp) - 0x4

                            2. 메모리[0x0019FE24]에 0x0019FE34를 쓴다.

 

 mov   ebp, esp  //  ebp = 0x0019FE24, esp = 0019FE24


 
pop    ebp       //    1. 메모리 [0x0019FE24] 값을 ebp에 쓴다.

                            2.  0x0019FE28 (esp) = 0019FE24 (esp) + 0x4

 

참고

 

IBM PC 어셈블러 프로그래밍, 이재광 & 전병찬

'프로그래밍 언어 > Assembly' 카테고리의 다른 글

명령어 mov, lea  (0) 2021.03.04
Assembly - 범용 레지스터  (0) 2021.01.17

+ Recent posts