여전히 자격증 공부 중.

어셈블리어에 관련된 자료들 / 명령어 들을 정리 해 봅니다.



자료출처 :

(해당글에서 원 자료는

*참고 서적

- 알기 쉬운 어셈블리. 신동준 저.
-
해킹 파괴의 광학. 김성우 저.

를 참조 하였다고 하네요. )


* 레지스터.

2003 년에 배운 기억이 가물가물 나네요..

레지스터라는 것은 CPU 내부에서 사용되는 기억장치.. (프로그램으로 치면 변수)로서 어셈블리어에서는 각각의 레지스터가 고유의 특성을 가지고(int, char 등과 같이.. ) CPU의 용량에 따라서 여러가지 형태로 쓰이게 됩니다.


아래에는 그 레지스터의 종류와 설명, 실제 레지스터 명이 정리가 되어 있습니다.




크게 계산하거나 할때(범용)는 A, B, C, D 를 주로 사용하고 크기에 따라 앞 뒤에 붙죠..


여기에 32bit 이면 E?X,

16bit이면 ?X

상위 8bit 이면 ?H  (high)

하위 8bit 이면 ?L  (Low) 로 사용한답니다.


A, B, C, D는 accumulaotr, base, counter, data 의 앞 머리로 보면 편해요


범용 레지스터

32Bit

16Bit

상위8Bit

하위8Bit

기능

EAX

AX

AH

AL

누산기(Accumulator, 중간 결과를 저장해 놓음)레지스터라 불리며, 곱셈이나 나눗셈 연산에 중요하게 사용

EBX

BX

BH

BL

베이스 레지스터라 불리며 메모리 주소 지정시에 사용됩니다.

ECX

CX

CH

CL

계수기(Counter)레지스터라 불리며, Loop등의 반복 명령에 사용됩니다.

EDX

DX

DH

DL

데이터(Data)레지스터라 불리며 곱셈, 나눗셈에서EAX와 함께 쓰이며 부호 확장 명령 등에 사용됩니다.

ESI

SI

 

 

다량의 메모리를 옮기거나 비교할 때 그 소스(Source)의 주소를 가진다

EDI

DI

 

 

다량의 메모리를 옮기거나 비교할 때 그 목적지의 주소를 가리킨다.

ESP

SP

 

 

스택 포인터로 스택의 최종점을 저장한다. Push, Pop 명령에 의해 늘었다 줄었다 한다.

EBP

BP

 

 

ESP를 대신해 스택에 저장된 함수의 파라미터나 지역 변수의 주소를 가리키는 용도로 사용된다

 

상태 레지스터

32Bit

16Bit

기능

EIP

IP

EIP는 현재 실행되고 있는 프로그램의 실행코드가 저장된 메모리의 주소를 가리키는 레지스터로 프로그램의 실행이 진행됨에 따라 자동으로 증가하고 프로그램의 실행 순서가 변경되는 제어 문이 실행될 때 자동으로 변경된다. 그래서 직접 접근해서 값을 저장하거나 읽거나 하는 일이 없기 때문에 응용 프로그램에서는 손 댈 일이 없는 레지스터이다

EFLAGS

FLAGS

비트 단위의 플래그 들을 저장하는 레지스터로 아주 특별한 용도로 사용된다


세그먼트 레지스터

16Bit

기능

ES

보조 세그먼트 레지스터다. 두 곳 이상의 데이터 저장영역을 가리켜야 할 때DS와 함께 사용된다. 하지만 32비트 프로그램에서는 DS ES가 같은 영역을 가리키고 있기 때문에 굳이 신경 쓰지 않아도 된다.

CS

코드 세그먼트를 가리키는 레지스터.

SS

스택 세그먼트를 가리키는 레지스터.

DS

데이터 세그먼트를 가리키는 레지스터.

FS

보조 세그먼트 레지스터. FS, GS 286 이후에 추가된 것으로 운영체제를 작성하는 게 아니라면 없듯이 여겨도 된다

GS

 



// 명령

출처 : Instruction Set Summary (명령어 요약)

http://blog.paran.com/alotta/13998621



* Segment Register Instructions (세그먼트 레지스터 명령)


세그먼트 레지스터 명령은 파(원거리) 포인터 (far pointer, segment address)가 세그먼트 레지스터내로 로드되게 한다.


LDS - Load far pointer using DS

LES - Load far pointer using ES

LFS - Load far pointer using FS

LGS - Load far pointer using GS

LSS - Load far pointer using SS



* Flag Control (EFLAG) Instructions (플랙 제어 명령)


플랙 제어 명령은 EFLAGS 레지스터의 플랙에 작동한다.


STC - Set carry flag

CLC - Clear the carry flag

CMC - Complement the carry flag

CLD - Clear the direction flag

STD - Set direction flag

LAHF - Load flags into AH register

SAHF - Store AH register into flags

PUSHF/PUSHFD - Push EFLAGS onto stack

POPF/POPFD - Pop EFLAGS from stack

STI - Set interrupt flag

CLI - Clear the interrupt flag







'Study.. > etcs..' 카테고리의 다른 글

PLC (Programmable Logic Controller)  (2) 2010.03.05
sorting  (0) 2010.03.05
DMA 동작모드  (0) 2010.02.28
tree traverse  (0) 2010.02.28
더 안전한 로그인. NateOn 에 OTP 서비스..  (0) 2009.09.15
Posted by Yoons...
,