산술 연산
- 덧셈, 뺄셈 : 피연산자가 세개
- 두 개의 소스와 하나의 대상
add a, b, c # a = b + c
sub a, b, c # a = b - c
- 디자인 원칙 1: 단순은 규칙을 선호한다.
- 규칙성이 있으면 구현이 더 간단하다.
- 단순성은 더 낮은 비용으로 더 높은 성능이 가능하다.
산술 예제
- C 코드
f = (g + h) - (i + j);
- MIPS 코드
add t0, g, h # temp t0 = g + h
add t1, i, j # temp t1 = i + j
sub f, t0, t1 # f = t0 - t1
레지스터 피연산자
- 산술 명령어는 레지스터 피연산자를 사용한다.
- MIPS에는 32비트 × 32개 레지스터 파일이 있다.
- 자주 액세스하는 데이터에 사용
- 0~31번
- 워드(word) : 32비트 데이터
- 어셈블러 이름
- 임시 값(temporary) : $t0, $t1, …, $t9
- 저장된 변수(saved) : $s0, $s1, …, $s7
- 디자인 원칙 2: 작을수록 빠르다
- 참조) 메인 메모리: 수백만 개의 위치
레지스터 피연산자 예제
- C 코드
f = (g + h) - (i + j);
# f, …, j : $s0, …, $s4
- MIPS 코드
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t0, $t1
메모리 피연산자
- 복합 데이터에 사용되는 메인 메모리
- 배열, 구조, 동적 데이터
- 산술 연산을 적용하려면
- 1. 메모리 값 → 레지스터로 로드
- 2. 레지스터 결과 → 메모리에 저장
- 메모리는 바이트 주소로 지정된다.
- 각 주소는 8비트 바이트를 식별
- 워드는 메모리에 정렬된다.
- 주소는 4의 배수
- MIPS는 빅 엔디안
- 최상위 바이트는 워드의 최하위 주소
- 참조) 리틀엔디안: 최하위 바이트는 최하위 바이트
메모리 피연산자 예제 1
- C 코드
g = h + A[8];
# g : $s1, h : $s2, A의 베이스 주소 : $s3
- MIPS 코드
- 8개 인덱스에는 32개 오프셋이 필요(word당 4 바이트)
lw $t0, 32($s3) # load word, 32 : 오프셋
add $s1, $s2, $t0
- A를 X라고 할 때 A[8]의 주소
- &A[8] = X + 32 (32인 이유는 4*8)
- 32($s3) : $s3이라는 주소에 32(오프셋)를 더한 주소
메모리 피연산자 예제 2
- C 코드
A[12] = h + A[8];
# h : $s2, A의 베이스 주소 : $s3
- MIPS 코
- 8개 인덱스에는 32개 오프셋이 필요
lw $t0, 32($s3) # load word, 32($s3) 주소의 값을 $t0에 넣어라
add $t0, $s2, $t0
sw $t0, 48($s3) # store word, $t0이 값을 48($s3) 주소에 넣어라
레지스터 vs 메모리
- 액세스 속도 : 레지스터가 메모리보다 더 빠르다.
- 메모리 데이터 작업에는 로드 및 저장이 필요
- 실행해야 할 추가 명령
- 컴파일러는 변수에 대해 가능한 한 레지스터를 사용
- 덜 자주 사용되는 변수에 대해서만 메모리로 빼낸다.
- 레지스터 최적화가 중요
직접 피연산자(Immediate Operands)
- 명령어에 지정된 상수 데이터
addi $s3, $s3, 4
# i = i + 4, i += 4
- 뺄셈 직접 명령 subi는 없다.
- '-'를 사용하면 된다.
addi $s2, $s1, -1
- 디자인 원칙 3: 일반적인 사례를 빠르게 만든다.
- 작은 상수가 일반적이다.
- 직접 피연산자는 로드 명령을 피한다.
상수 제로
- MIPS 레지스터 0($zero) = 상수 0
- 덮어쓸 수 없다.
- 일반적인 작업에 유용
- 예: 레지스터 간 이동
- add $t2, $s1, $zero
'컴퓨터시스템구조' 카테고리의 다른 글
[컴퓨터시스템구조] 06. MIPS 포맷(R-포맷, I-포맷) (1) | 2023.10.14 |
---|---|
[컴퓨터시스템구조] 05. Signed, Unsigned, 2의 보수 (0) | 2023.10.14 |
[컴퓨터시스템구조] 03. 성능 측정 (0) | 2023.10.13 |
[컴퓨터시스템구조] 02. 컴퓨터 추상화와 기술 (1) | 2023.10.13 |
[컴퓨터시스템구조] 01. 개요 (0) | 2023.10.13 |
산술 연산
- 덧셈, 뺄셈 : 피연산자가 세개
- 두 개의 소스와 하나의 대상
add a, b, c # a = b + c
sub a, b, c # a = b - c
- 디자인 원칙 1: 단순은 규칙을 선호한다.
- 규칙성이 있으면 구현이 더 간단하다.
- 단순성은 더 낮은 비용으로 더 높은 성능이 가능하다.
산술 예제
- C 코드
f = (g + h) - (i + j);
- MIPS 코드
add t0, g, h # temp t0 = g + h
add t1, i, j # temp t1 = i + j
sub f, t0, t1 # f = t0 - t1
레지스터 피연산자
- 산술 명령어는 레지스터 피연산자를 사용한다.
- MIPS에는 32비트 × 32개 레지스터 파일이 있다.
- 자주 액세스하는 데이터에 사용
- 0~31번
- 워드(word) : 32비트 데이터
- 어셈블러 이름
- 임시 값(temporary) : $t0, $t1, …, $t9
- 저장된 변수(saved) : $s0, $s1, …, $s7
- 디자인 원칙 2: 작을수록 빠르다
- 참조) 메인 메모리: 수백만 개의 위치
레지스터 피연산자 예제
- C 코드
f = (g + h) - (i + j);
# f, …, j : $s0, …, $s4
- MIPS 코드
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t0, $t1
메모리 피연산자
- 복합 데이터에 사용되는 메인 메모리
- 배열, 구조, 동적 데이터
- 산술 연산을 적용하려면
- 1. 메모리 값 → 레지스터로 로드
- 2. 레지스터 결과 → 메모리에 저장
- 메모리는 바이트 주소로 지정된다.
- 각 주소는 8비트 바이트를 식별
- 워드는 메모리에 정렬된다.
- 주소는 4의 배수
- MIPS는 빅 엔디안
- 최상위 바이트는 워드의 최하위 주소
- 참조) 리틀엔디안: 최하위 바이트는 최하위 바이트
메모리 피연산자 예제 1
- C 코드
g = h + A[8];
# g : $s1, h : $s2, A의 베이스 주소 : $s3
- MIPS 코드
- 8개 인덱스에는 32개 오프셋이 필요(word당 4 바이트)
lw $t0, 32($s3) # load word, 32 : 오프셋
add $s1, $s2, $t0
- A를 X라고 할 때 A[8]의 주소
- &A[8] = X + 32 (32인 이유는 4*8)
- 32($s3) : $s3이라는 주소에 32(오프셋)를 더한 주소
메모리 피연산자 예제 2
- C 코드
A[12] = h + A[8];
# h : $s2, A의 베이스 주소 : $s3
- MIPS 코
- 8개 인덱스에는 32개 오프셋이 필요
lw $t0, 32($s3) # load word, 32($s3) 주소의 값을 $t0에 넣어라
add $t0, $s2, $t0
sw $t0, 48($s3) # store word, $t0이 값을 48($s3) 주소에 넣어라
레지스터 vs 메모리
- 액세스 속도 : 레지스터가 메모리보다 더 빠르다.
- 메모리 데이터 작업에는 로드 및 저장이 필요
- 실행해야 할 추가 명령
- 컴파일러는 변수에 대해 가능한 한 레지스터를 사용
- 덜 자주 사용되는 변수에 대해서만 메모리로 빼낸다.
- 레지스터 최적화가 중요
직접 피연산자(Immediate Operands)
- 명령어에 지정된 상수 데이터
addi $s3, $s3, 4
# i = i + 4, i += 4
- 뺄셈 직접 명령 subi는 없다.
- '-'를 사용하면 된다.
addi $s2, $s1, -1
- 디자인 원칙 3: 일반적인 사례를 빠르게 만든다.
- 작은 상수가 일반적이다.
- 직접 피연산자는 로드 명령을 피한다.
상수 제로
- MIPS 레지스터 0($zero) = 상수 0
- 덮어쓸 수 없다.
- 일반적인 작업에 유용
- 예: 레지스터 간 이동
- add $t2, $s1, $zero
'컴퓨터시스템구조' 카테고리의 다른 글
[컴퓨터시스템구조] 06. MIPS 포맷(R-포맷, I-포맷) (1) | 2023.10.14 |
---|---|
[컴퓨터시스템구조] 05. Signed, Unsigned, 2의 보수 (0) | 2023.10.14 |
[컴퓨터시스템구조] 03. 성능 측정 (0) | 2023.10.13 |
[컴퓨터시스템구조] 02. 컴퓨터 추상화와 기술 (1) | 2023.10.13 |
[컴퓨터시스템구조] 01. 개요 (0) | 2023.10.13 |