책- 정리/프로그래머가 몰랐던 멀티코어 CPU이야기

2장. RISC vs CISC 차이점

jinkwon.kim 2018. 3. 13. 09:40
728x90
반응형

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는 서로의 장점을 수용했기 때문이다. 

   

 

 






728x90
반응형