*참고 서적
- 알기 쉬운 어셈블리.
- 해킹 파괴의 광학.
를 참조 하였다고 하네요. )
* 레지스터.
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 | 누산기(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 |