- STACK의 시작'주소'를 가지고 있다. (32bit의 stack point)
push 명령어
push 100 의 명령을 수행 할 때는
이렇게 두가지의 수행을 하게된다.
push명령 debug로 실행하는 화면
ESP가 가지고있는 현재 주소는 0012ffc4
push 0ffffffffh 명령을 수행 한 후
1. ESP = ESP - 4 의 주소인 12ffc0을 가지고
2. 그 주소에 ffff ffff의 메모리를 넣는다.
push 012345678h 명령을 수행 한 후
1. ESP = ESP -4 의 주소인 12ffbc
2. 그 주소에 12345678의 메모리를 넣는데 리틀엔디안 방식으로 넣어진걸 확인할 수 있음.
...
...
나머지도 같은 방식으로 실행됨
-----------------
추가
push 명령에 WORD ptr을 넣었을 경우 4byte가 아닌 2byte단위로 주소안의 값이 채워진다.
그리고 WODR와 WODR사이의 메모리는 빈틈없이 꽉꽉채워짐.
이런 형태
STACK의 Operand를 확인하면 BYTE단위는 없다는 것을 확인 할 수 있다.
적어도 2byte이상은 사용하여야함
|
pop 명령어
마지막에 저장된 cd 00 의 값을 얻기위해서 ax를 Operand로 줘서 값을 eax에서 확인함
이런식으로 pop 명령을 주면 위에 push로 집어넣었던 값들이 전부 지정한 Operand로 전달된다.
|
pushad 명령어
pushad명령을 수행한 후 EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 의 순서대로 값이 저장됨을 확인 할 수 있다.
pusha - push all
pushad - push all dword
|
popad 명령어
EFL레지스터에 저장하는 방법 pushfd
EFL레지스터에 불러오는 방법 popfd
|
'교육 > ASSEM' 카테고리의 다른 글
ASSEM- 레지스터값 (0) | 2014.08.27 |
---|---|
[어셈블리어]imul과 div(idiv)와 확장명령어 (0) | 2014.07.30 |
[어셈블리어] adc와 Jump (0) | 2014.07.30 |
[어셈블리어]inc(증가), dec(감소), mul(곱셈)명령 (0) | 2014.07.29 |
[어셈블리어] mov와 xchg (0) | 2014.07.25 |