2013년 8월 12일 월요일




하이레벨과 로우레벨의 차이점은 데이터 처리 부분이다. 


레지스터는 프로세서 안에 존재하는 내부 메모리의 작은 모임이며, 성능저하 없이 접근이 가능하지만 수의 제한이 있다. 또한 지속적인 저장공간을 사용할 수 없으므로 RAM을 이용한다.


스택은 프로그램이나 CPU가 비교적 짧은기간동안 정보를 저장하기 위해 사용하며, 1. 레지스터 값을 위한 임시 저장 장소 2. 지역변수 3. 함수 파라미터와 반환 주소 등을 담는다. 


레지스터 
- EAX, EBX, EDX 정수 연산, 부울 연산, 논리 연산, 메모리 연산에 사용 
- ECX 카운팅이 필요한 연속적인 명령에 대한 카운터로 사용
- ESI/EDI 메모리 복사시 대상 주소와 목적 주소의 포인터로 사용 
- EBP 범용레지스터로 주로 스택 베이스 포인터로 사용되며, 스택 포인터와 스택 프레임을 형성
- ESP CPU스택 포인터로 사용


어셈블리언어는 레지스터 이름, 데이터, 메모리 주소등의 데이터를 표현한다
[기본구조]
명령이름(opcode) 목적지 오퍼랜드, 출발지 오퍼랜드
오퍼랜드의 예
EAX 읽거나 쓰기 위해 단순히 EAX참조
0x30004040 코드 안에 삽입된 직접 값
[0x4000394e] 메모리 주소 값

데이터 이동
MOV 목적지, 출발지

산술연산 
ADD op1, op2 //op1+op2를 op1에 저장
SUB op1, op2 //op1-op2를 op1에 저장
MUL op //오퍼랜드로 곱한다.
DIV op //EDX, EAX에 저장된 정수값을 오퍼랜드로 나누며, 몫은 EAX에 나머지는 EDX에 저장
IMUL op//EAX값을 곱하고 EDX,EAX에 64비트로 저장
IDIV op//EDX,EAX값을 오퍼랜드로 나누고 몫은 EAX 나머지는 EDX에 저장

비교연산
CMP op1, op2 비교 결과를 프로세서의 플래그에 기록

조건분기 
Jcc 분기 코드 주소 //특정 조건에 따라서 메모리 주소로 실행 분기

함수호출 
CALL 함수를 호출, RET 함수 호출자에게 반환

0 개의 댓글:

댓글 쓰기