SIMD 프로그래밍을 하기 위해선 C++ 코드 안에 어셈블리어로 구현을 하는데
아래와 같이
_asm{
}
안에 구현을 하게 된다.
여기서 eax, ebx 등은 지정된 값인데, 바로 범용 레지스터라고 하는 부분이다.
레지스터는 CPU에 바로 저장이 되는 영역으로 속도가 매우 빠른 반면 용량은 작다. 그 중에서 범용 레지스터는 연산을 위해서 쓰이는 부분들인데, 요즘의 CPU에서는 메모리에서 레지스터로 데이터를 불러와 연산을 하고 결과를 다시 메모리로 돌려보내게 된다.
비쥬얼 스튜디어에서 위와 같이 디버깅 과정에서 레지스터를 보려면 Debug > windows > registers
를 선택하면 된다.
각 범용레지스터는 그 역할이 있는데 그것은 다음과 같다.
- EAX(Accumulator Register)
누산기 레지스터. 대부분의 입출력 및 산술, 논리 연산에 사용된다. 그 뿐 아니라 리턴값, 인터
럽트 번호 지정시 자동으로 사용된다.
- EBX(Base Register)
주로 주소 지정을 확장 할 때 사용되거나 초기 주소 지정 등을 위해 사용된다. 이 때 오프셋 주소
가 되어 SI, DI 레지스터와 결합되어 사용된다.
- ECX(Count Register)
카운트 레지스터. 어떤 명령을 반복(Loop와 같은...) 수행 할 경우 횟수를 지정하는데 사용된다.
내부적으로 이 값을 루프 수 만큼 저장했다가 1씩 감소시켜 0이 되면 EFlags의 ZF를 셋팅시켜
루프를 종료 시키는매커니즘을 가진다.
- EDX(Data Register)
데이터 레지스터. EAX의 보조 누산기로 주로 사용되어 입출력 연산시 간접 주소 지정 연산
시에는 보조값을 저장하는데 사용하기도 한다.
- EBP(Base Pointer)
스택의 베이스 포인터로 사용된다. 스택에 저장되는 것은 함수 수행시 지역 데이터가 들어가는데
이 베이스 포인트가 스택에서 함수의 시작점(모듈의 시작값을 저장)이 된다. 이 EBP를 기준으로
지역 변수 및 함수 인자 접근이 가능한 것이다. 스택 프레임 역시 이 레지스터로 나눌 수 있다.
- ESP(Stack Pointer)
현재까지 사용된 스택의 위치를 저장하는데 사용되는 레지스터.
- ESI(Source index), EDI(Destination Index)
연산및 간접 주소 연산에 주로 사용되며 문자열 처리 시 자주 사용된다.
'backup' 카테고리의 다른 글
SIMD INSTRUCTION SET SUMMARY (0) | 2013.07.24 |
---|---|
C# Timer 성능 측정을 위한 ms이하 까지 측정 가능한 Timer (2) | 2013.07.20 |
[SIMD 병렬 프로그래밍]MMX, SSE, AVX (0) | 2013.07.19 |
[SIMD 병렬 프로그래밍]SIMD 프로그래밍이란? (0) | 2013.07.19 |
[FX마진거래 HFT]요즘 테스트 진행하고 있는 FX마진 HFT 거래입니다. (2) | 2013.07.18 |