본문 바로가기

programming/assembly

어셈블리언어 기초 파해처 보기 - 2

반응형
SMALL

본 게시물은 책 게임처럼 쉽고 재미있게 배우는 어셈블리 언어 튜토리얼 - 북스 홀릭 - 책을 참고하였습니다.


데이터 단위 

 

bit. 데이터의 가장 작은 단위  0과 1 두가지 2진수만 표현할 수 있다.

byte : 8개의 비트를 모아서 하나의  바이트라 한다. 10진수 0~255, 16진수 0XFF까지 표현가능.

 -> 레지스터에서 8BIT에 대응되는 레지스터는 AL, AH, BL, BH, CL,CH, DL,DH가 있다. [C언어에서 CHAR , BOOL형 데이터 타입이라고 보자 ]

word : 2개의 바이트를 하나로 표현하면 워드이다. [하나의 작업 단위 ]

 

       10진수 - 0~65535, 16진수 0xFFFF, 

      16비트 레지스터는 AX, BX, CX, DX, SI DI BP SP IP가 있다. 

DWORD (Double WORD) : 워드 2개를 하나로 표현하여 더블워드라 한다. 32bit 표현단위.

         레지스터로 EAX, EBX, ECX, EDX, ESI , EDI , EBP, EIP가 있다. - 32bit 이후 시스템 부터 주소표현(포인터), 기본 정수 단위로 사용.

 

 1bit 

 8 bit = 1byte 

 16 bit = 2 byte = 1word 

 32 bit = 4 byte = 2word .

 64 bit = 8 byte = 4wrod.

 

어셈블리 언어의 기본 자원  3요소 

1. 레지스터  <-> 2. RAM <-> 3. CPU  

- 프로그램의 명령어는 램에 저장 [ 임시적으로 저장하는 메모리 장소 ]

- CPU는 명령어를 1개씩 가지고와서 명령을 해석 및 수행.

- 레지스터 :  CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 기억장치, 실제 컴퓨터에 데이터를 영구적 저장하기 위해서는 하드디스크를 이용해야 하지만 명령들을 처리하기 위해선 이들의 주소와 명령의 종류를 저장할 수 있는 기억 공간이 하나 더 필요하다. 또한 명령을 수행하기 위해서는 메모리보다 빨라야 하는데 이것이 CPU옆에 붙어있는 레지스터 이다 . 

                        - 공간은 작지만 CPU와 직접적으로 연결되어 있으므로 연산속도가 메모리보다 수백배 까지 빠르다.

                         - 또한 CPU는 자체적 데이터 저장 방법이 없기때문에 메모리로 직접 데이터를 전송할 수 없다.

 

 

                - 64 BIT 단위 레지스터 ; RAX

                - 32 BIT 단위 레지스터 : EAX

                - 16 BIT 단위 레지스터 : AX

                -  8 BIT 단위 레지스터 : AH, AL 

                 해당 비트수는 명령을 한 번에 처리할 수 있는 레지스터의 비트수 이다.

      

용도 레지스터 설명
범용 EAX 산술/논리연산, 처리결과 리턴값 저장
EBX 간접 주소 연산
ECX 카운터, 반복 참조 값
EDX 산술/논리 연산 보조
인덱스 ESI 문자열 출발지 주소
EDI 문자열 목적지 주소
포인터 ESP 현재 스택 주소
EBP 스택 복귀 주소
EIP 명령어 실행되는 현재 주소
세그먼트 CS 코드(code) 세그먼트, 코드 영역 시작주소
DS 데이터(Data) 세그먼트, 데이터 영역 시작주소
SS 스택(stack) 세그먼트, 스택 영역 시작 주소
ES 데이터 세그먼트 데이터영역 시작주소
FS
GS
상태 EFLAGS cpu동작 제어, 연산 결과를 1또는 0으로 반영
FPU 수치연산 ST0~7 부동소수점 처리
디버깅 DR0~7 커널제어 
제어 CR0~8

 

 EFLAGS 레지스터 

시스템 제어용 플래그로 사용되거나 , 어셈블리 처리 조건 용도에서 사용되는 등 여러가지 상태 저장에 사용되는 레지스터

 

구분 플래그 설명
연산결과 CF(Carry Flag) 덧셈과 뺼셈에서 빌림수 발생시 1로 설정
PF(Parity Flag)  연산 결과가 짝수이면 1, 홀수이면 0
AF(Auxiliary-carry Flag) 16비트 연산시 빌림수 발생 - 1로 설정
ZF(Zero Flag) 연산 결과가 0이면 1로 설정
SF(Sign  Flag) 연산 결과가 최상위 비트 1 인경우 1로설정
OF(Overflow Flag) 연산 결과가 용량을 초과하였을경우 1로 설정
시스템 제어 TF(Trap Flag) 프로그램 추적시 1로 설정.
명령 1번씩 실행하도록 한다.
IF(Interrupt enable Flag) 외부 인터럽트 요구를 받아들일때 1로 설정
AC(Alignment Check) CR0레지스터의 AM 비트와 함께 1 로 설정시 메모리 참조 정렬 체크활성화
IOPL(I/O Privilege Level ) 현재 특권 수준이 IOPL보다 높은 경우 I/O 주소 접근
NT(Nested Task) 연결 작업 제어, 1로 설정 시 현재 작업이 기존 실행 작업과 연결됨을 의미
RF(Resume Flag) 디버깅 시 프로세서에 일시 중지 예외 발생 제어
VM(Virtual-8086 Mode) Virtual-8086 mode 활성시 1로 설정
VIF(Virtual- interrupt Flag) 가상 이미지의 인터럽트 요구를 받아 들일떄 1로 설 정
VIP(Virtual interrupt Pending) 가상인터럽트가 지연시 1로설정
ID( ID Flag)  CPUID 명령어 지원 여부로 1로 설정시 지원
문자열 제어 DF(Direction Flag) 문자열 복사 명령과 관련된 제어 플래그, 1로설정되어 있으면 문자열 복사  시 주고값이 감소

 


 

반응형
LIST