검색결과 리스트
글
전에 글에서 16비트 체제에선 ax,bx,cx,dx,si,di,bp,sp로 썼다는 것을 봤을 것이다.
32비트 체제로 넘어가서는 앞에 e(extend)를 넣어주어 eax,ebx,ecx,edx,esi,edi,ebp,esp로 사용한다.
그리고 64비트 체제에서는 앞에 r을 붙여 rax,rbx,rcx,rdx,rsi,rdi,rbp,rsp로 사용한다.
Ι................Ι................Ι................Ι................Ι................Ι................Ι................Ι................Ι
(<- 8비트 ->) -> EX ) AL,BL,CL,DL,SIL,DIL,BPL,SPL
(<------16 비트 ------>) -> EX ) AX, BX, CX, DX, SI, DI, BP, SP
(<---------------- 32비트 ---------------->) -> EX ) EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
(<------------------------------------- 64비트 -------------------------------------->)
L> RAX, RBX, RCX, RDX, RSI, RDI, RBP,RSP
64 비트 체제 전에는 그냥 파라미터를 전달했지만, 64비트 체제에서는 레지스터리를 통해서 파라미터를 전달한다.
64비트 체제에서는 리눅스와 윈도우의 파라미터 전달 방식이 나뉘어 집니다.
리눅스에서는 파라미터를 전달할 때 6개 레지스터를 사용한다.
RDI : 첫번째 인자
RSI : 두번째 인자
RDX : 세번째 인자
RCX : 네번째 인자
R8 : 다섯번째 인자 -> 추가된 범용 레지스터
R9 : 여섯번째 인자 -> 추가된 범용 레지스터
인자가 7개 이상일 경우부터는 스택을 같이 사용한다.
윈도우는 리눅스와 달리 레지스터를 4개까지 사용한다.
RCX : 첫번째 인자
RDX : 두번째 인자
R8 : 세번째 인자 -> 추가된 범용 레지스터
R9 : 네번째 인자 -> 추가된 범용 레지스터
리눅스와 마찬가지로 5개 이상일 경우 스택과 같이 사용한다.
'Programming > Assembly' 카테고리의 다른 글
함수 프롤로그(Prolog), 에필로그(Epilog) (0) | 2015.08.27 |
---|---|
메모리 구조 (0) | 2015.08.27 |
함수 호출 규약 (Calling Convention)과 스택 프레임 (Stack Frame) (0) | 2015.08.27 |
어셈블리 명령어 이해하기 - 하 (0) | 2015.08.27 |
어셈블리 명령어 이해하기 - 중 (0) | 2015.08.27 |
RECENT COMMENT