smile blog 2023. 6. 19. 16:51

명령어 : 컴퓨터 언어

 

* 레지스터를 나타내기 위해 MIPS 관례는 달러 기호 뒤에 두 글자가 따라 나오는 이름을 사용한다.

1. C나 Java의 변수에 해당하는 레지스터를 위해선 $s0, $s1 등을 사용

2. MIPS 명령어로 컴파일하기 위해 필요한 임시 레지스터를 위해서는 $t0, $t1 등을 사용

 

아래의 C 코드가 있다.

g = h + A[8];

g는 레지스터 $s1, h는 레지스터 $s2,

A의 시작 주소는 레지스터 $s3에 저장되어 있다고 하자. (base 레지스터 : $s3)

 

위의 코드를 MIPS 어셈블리 언어로 바꾸면 다음과 같다.

lw $t0, 32($s3)  # Temporary reg $t0 gets A[8]
add $s1, $s2, $t0	# g = h + A[8]

 

아래의 C 코드가 있다.

A[12] = h + A[8];

h는 레지스터 $s2, A의 시작 주소는 레지스터 $s3에 저장되어 있다고 하자.

 

위의 코드를 MIPS 어셈블리 언어로 바꾸면 다음과 같다.

lw $t0, 32($s3)  # Temporay reg $t0 gets A[8]
add $t0, $s2, $t0	# Temporary reg $to gets h + A[8]
sw $t0, 48($s3)  # Stores h + A[8] back into A[12]

명령어 병렬 처리 기법

명령어를 동시에 처리하는 방법

ex) 명령어 파이프라인닝

 

명령어 파이프라인

IF instruction fatch 명령어 인출

ID instruction decode 명령어 해석

EX execute instruction 명령어 실행

DA data access 메모리 접근

WB write back 결과 저장

 

그러나 파이프라이닝 너무 사용하면 위험 발생

 

데이터 헤저드 (데이터 위험)

: 데이터 의존적인 두 명령어를 무작정 동시에 실행하려고 하면 파이프라인이 제데로 작동 x

명령어 간 데이터 의존성에 의해 발생

 

ex) 명령어 1 실행 다음에 명령어 2 실행을 해야함 (순서가 바뀌면 안됨)

 

제어 헤저드 (제어 위험)

: 프로그램 카운터의 갑작스러운 변화

프로그램 카운터는 주로 현재 실행 중인 명령어의 다음 주소로 분기하는데 파이프라이닝에 의해서 실행 흐름이 바뀌면 미리 가지고 왔던 명령어가 쓸모 x