1. 과거 RISC vs CISC 차이점
[ 코드 ]
struct Vector{
int x;
int y;
int z;
}data[10];
data[index].y = 0x87654321;
RISC 코드 해석
ldr r1 , [sp, #4] ; r1 = index
mov r3 , #0xC ; r3 = sizeof(vector)
mul r2 , r1 , r3 ; r2 = index * sizeof(vector)
add r3 , sp , #8 ; r3 = data
add r3 , r3 , r2 ; r3 = &data[index]
add r2 , r3 , #4 ; r2 = &(data[index].y)
ldr r3 , [pc, #8] ; r3 = 0x87654321
str r3 , [r2] ; *(r2) = r3
CISC 코드 해석
movsxd rax, dword ptr[rsp+24h]
imul rax, rax, 0Ch
mov dword ptr [rsp+raw+34h], 8754321h
---------------- RISC 명령어 해독 ------------------------
ldr r1, [sp, #4] ; r1 = index
- ldr은 메모리에 있는 값을 읽어 레지스터에 올려(load)프로세서가 씀
str r3, [r2] ; *(r2) =r3
- str은 레지스터에 있는 값을 메모리에 저장한다.
mov r3, #0xc ; r3 = sizeof(Vector)
- mov는 이동을 뜻한다.
mul r2, r1,r3 ; r2 = index * sizeof(vector)
- mul은 곱하기를 뜻한다.
add r3, sp, #8 ; r3 = data;
- add는 더하기를 뜻한다.
* 기계어중 []으로 감싼 것은 그 부분을 주소로 해석하라는 뜻이다.
코드 해석
--------------- CISC 명령어 해독 -------------------------
- imul은 정수 곱셈
- ARM은 읽기/쓰기/이동을 load/store/move로 구분했지만 x86은 mov하나로 포괄한다.
- x86은 리틀 엔디안으 표현되며 4byte 0x87654321이 21 43 65 87 순으로 적힌다.
2. 최근 RISC vs CISC 차이점
- CISC에서도 내부적으로 RISC처럼 구현 된것도 존재한다.
- RISC도 CISC형식의 복잡한 명령어를 지원한다.
- 결국 이제는 명령어 형식이 RISC냐 CISC냐의 논쟁은 큰 의미가 없어졌다.
RISC, CISC는 서로의 장점을 수용했기 때문이다.
'책- 정리 > 프로그래머가 몰랐던 멀티코어 CPU이야기' 카테고리의 다른 글
7장. 파이프라인(pipeline) (2) | 2018.05.22 |
---|---|
6장. 프로세스 기본 동 (0) | 2018.05.22 |
3장. 프로세스의 기본 부품과 개념들 (0) | 2018.03.27 |