-
20140801 (Assembly push, pop, pushad, popad, pushfd, popfd)부산IT학원/스마트컨트롤러 2014. 8. 1. 12:13
115일차
-------------
Assembly
-------------
------- Stack 영역
ESP Reg가 Stack영역의 주소를 갖고 있다.
Stack 영역은 높은 주소에서 낮은 주소로 움직인다.
------- push Instruction
stack 영역에 값을 넣는 명령어
push [저장할 값]
- push 100
이 명령어가 실행되는 과정.
1. ESP = ESP - 4;
2. *ESP = 100;
예제)
Stack은 메모리 영역이기에 little endian이라서
값이 거꾸로 들어간다.
차례대로 들어갔다.
(0x0012FFC0 인지 주소를 어떻게 알았냐면은
ESP에 값을 확인하면 된다.)
1 byte로는 들어가지 않고 4 byte로 들어간다.
부호에 맞게 남는 값이 채워져 들어갔다.
2 byte는 2 byte씩 들어간다.
2 byte가 들어가고 4 byte가 이어서 계속 들어가고
2 byte가 들어갔다.
C 컴파일어 같은 경우는
4 byte씩 끊어 넣기 때문에
줄줄 이어지지 않는 반면
어셈블리는 그대로 이어서 준다.
------- pop Instruction
Stack 영역에 값을 빼오는 명령
pop [저장할 곳]
- pop eax
이 명령어가 실행되는 과정.
1. eax = *ESP;
2. ESP = ESP + 4;
------- pushad, popad
--- pushad
Reg 값 저장
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
순으로 저장.
--- popad
Reg 값 불러오기
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 중에
ESP만 제외하고 다 불러온다.
pusha
=> push 16bit reg
pushad
=> push 32bit reg
popa
=> pop 16bit reg
popad
=> pop 32bit reg
--- pushad 예제)
--- popad 예제)
------- pushfd , popfd
flags 값을 저장한다.
- pushfd 예제)
a96인데 b96으로 저장된다.
TF flag가 켜지고 저장이된다.
- popfd 예제)
'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140805 (Assembly 함수 return 값, 인수) (0) 2014.08.05 20140804 (Assembly procedure(함수 구현), call, ret, 지역변수, Entry Code, Exit Code) (0) 2014.08.04 20140731 (Assembly loop, 배열, lea, pipe line) (0) 2014.07.31 20140730 (rounding factor, adc, sbb, clc, stc, cmc, jmp, cmp) (0) 2014.07.30 20140729 (Assembly imul, idiv, div, cbw, cwd, cdq, cwde, movsx, movzx) (0) 2014.07.29