티스토리 뷰

1. 어셈블리 언어의 정의 (출처 : 위키백과)

어셈블리 언어란, 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다.

컴퓨터 구조에 따라 사용하는 기계어가 달라지게 되며(ARM, MIPS), 이에 따라 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다.


어셈블러는 니모닉 기호(mnemonics -> ex> ADD eax, 1 에서의 ADD와 같은, 사람이 보기 쉽게 만든 언어를 말한다.)

를 opcode(Operation Code -> 기계어의 일부로, 수행할 명령어를 나타내는 부호를 말함.) 로 변환하고, 메모리 위치와 기타 존재물에 따라 식별자를 다시 분석함으로써, 목적 코드(실행될 수 있는 기계어 코드) 를 만들어낸다. 



2. 레지스터 (범용)

x86 기반 CPU는 8개의 범용 레지스터를 가지고 있으며, 각각 4바이트(32bits)의 크기를 저장할 수 있다.


EAX - Extended Accumulator Register  :

함수의 리턴값을 저장 (char, int, bool -> real value | struct, array -> PTR)

덧셈, 뺄셈, 곱셈 나눗셈과 같은 숫자 연산에서 사용

EBX - Extended Base Register : 

ESI, EDI 레지스터와 결합하여 인덱스로 사용된다. (Array Access IDX)

ECX - Extended Count Register :

흔히 for문 등에서 카운터로 사용된다.

MS Compiler VC++ 에서 함수의 호출 규약이 __thiscall 인 경우, this 포인터를 저장한다. 이 경우, ecx는 다른 레지스터로 mov되어 사용될 수 있다.

EDX - Extended Data Register :  - 내용 추가 필요

EAX와 같이 부호확장 등에 사용된다.


ESI - Extended Source Index :

데이터 복사 / 조작 등의 과정에서 특히 char[], byte[] 자료형 변수의 Source(시작점) 포인터로 사용된다.

EDI - Extended Destionation Index :

1. ESI 와 동일. 데이터의 Destination(데이터의 끝) 포인터로 사용된다.

2. call Instruction 에서 EDI 에 Callee의 포인터를 저장하고, 호출할 때 사용된다. 


ESP - Extended Stack Point :

push, pop Instruction 으로 스택에 액세스 할 때 현재 메모리 주소를 저장하고 있는 포인터.

EBP - Extended Base Point :

현재 함수 스택의 최상위 주소를 저장하고 있는 포인터.

EIP - Extended ? Point:

다음에 실행할 명령의 주소를 저장하고 있는 포인터.

현재 실행할 명령어의 주소로 헷갈리지 않도록 한다. 예를 들어, 디버거에서 a라는 주소에 bp를 걸고, breakpoint가 활성화되어 명령이 해당 위치에서 프로그램의 execution이 멈추게 될 때,  EIP의 주소가 breakpoint의 주소에 위치하고 있는데, 이는 아직 해당 주소의 명령어가 실행 전이므로 당연한 것이다.


필요에 따라서, ~~X 로 끝나는 레지스터는 16비트 또는 8비트로 접근할 수 있다. (그림 참고)

ex) EAX 레지스터의 경우,

AX : 오른쪽의 16비트 접근 가능 (2bytes)

AL : AX 레지스터의 왼쪽 8비트 접근 가능 (1byte)

AL : AX 레지스터의 오른쪽 8비트 접근 가능 (1byte)



3. 레지스터(플래그)

5개의 플래그 레지스터를 이용하며, 연산 및 비교 Instruction을 실행하고, 특정 결과를 저장할 때 사용한다.


CF(Carry Flag)

부호 없는 연산 결과가 용량보다 크다면 세트된다.

OF(Overflag Flag)

부호 있는 연산 결과가 용량보다 크다면 세트된다.

SF(Sign Flag)

연산 결과가 음수가 되었을 때 세트된다.


ZF(Zero Flag)

연산 결과가 0일 때 세트되며, 연산 결과가 0이 아닐 때 해제된다.

cmp 명령 후 jz, jnz와 같은 if 문기문에서 사용된다.

DF(Direction Flag)

문자열 처리에서 연속되는 문자열의 처리 방향에 따라 세트된다.


본 문서는 http://www.cs.virginia.edu/~evans/cs216/guides/x86.html 문서의 내용을 번역한 일부와, 

http://dakuo.tistory.com/9 문서의 내용을 참고하였습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함