휴가 -2Day
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
구조체 .c영역
#include <stdio.h>
typedef struct _context
{
unsigned int EFL;
unsigned int EIP;
unsigned int EDI;
unsigned int ESI;
unsigned int EBP;
unsigned int ESP;
unsigned int EBX;
unsigned int EDX;
unsigned int ECX;
unsigned int EAX;
}context;
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
.asm영역
.386
.MODEL FLAT
.STACK 4096
PUBLIC _STST
.CODE
_STST PROC NEAR32
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
push ebp ; entry code
mov ebp,esp ; entry code
pushfd ; FLAG레지스터 저장
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
mov esp, [ebp + 8] ; 구조체 주소를 esp로옮김
add esp, 40 ; esp가 구조체 가장 아래 데이터에 저장할 준비
pushad ;레지스터 정보 저장
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
mov eax, ebp ; 현재ebp를 eax로 옮긴다음
add eax, 8 ; +8을 해주면 eax는 &status를 가리키는 주소를 가지게된다.
mov [esp + 12], eax ; status주소를 구조체내의 esp에 저장한다.
※현재 ESP는 EDI를 가리키고있다.
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
mov eax, [ebp] ; 레지스터에 있는 ebp의 값은 eax로 옮기고
mov [esp + 8], eax ; [ebp]에 있는 값을 ebp에 넣는다.
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
mov eax, [ebp + 4] ; R.A값을 eax로 넣고
push eax ; push해주면 구조체내의 eip로 들어간다.
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
push [ebp - 4] ; 마지막으로 FLAG레지스터의 값은 EFL로 들어간다.
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
mov esp,ebp ; exit code
pop ebp ; exit code
ret ; exit code
_STST ENDP
END
실행은 각자 해보는거져 >.<
(*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~)
CDECL vs STDCALL
함수를 리턴할 때 쓰는 방식
Left CDECL RIGHT STDCALL
일단 데이트하고 나서 나중에 정리한다.
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20140820 일일업무보고서 11번 문대영 (12) | 2014.08.20 |
---|---|
20140819 업무일지 박영주 (4) | 2014.08.19 |
20140818 일일보고 9번 김해성 (11) | 2014.08.18 |
LDST 과제 (1) | 2014.08.18 |
STST 과제 (2) | 2014.08.07 |
2014.08.06 업무보고 출석번호 6번 김용우 (10) | 2014.08.06 |
2014.08.05 업무보고 출석번호 5번 김상엽 (7) | 2014.08.06 |
2014.08.04 업무일지 [김대희] (12) | 2014.08.04 |