Example Instructions(1)
■ Basic arithmetic operation
add a, b, c # a = b + c
sub a, b, c # a = b – c
→ 규칙성을 통해 구현 간소화
■ 산술 연산
f = (g+h) - (i+j);
add t0, g, h # temp t0 = g + h
add t1,i, j # temp t1 = i + j
sub f, t0, t1 # f = t0 - t1
→ 프로그램 변수를 레지스터와 연결하는 것은 컴파일러의 일이다.
Example Instructions(2)
■ 메모리 연산 예시
g = h + A[8]; // Assume g in $s1, h in $s2
// Base address of A in $s3
Compiled MIPS (Index 8 requires offset of 32)
lw $t0, 32($s3) # 32 is offset, $s3 base register
add $s1, $s2, $t0 # g = h + A[8]
MIPS Operands
■ MIPS는 load-store 레지스터 구조이다.
- 32개의 레지스터, 각 32비트(4바이트) 길이
- 메모리 주소는 32비트 길이이며 "바이트/워드 주소 지정 가능"입니다.
- 각 단어는 32비트(4바이트)를 포함합니다.
- 프로세서와 메모리 사이의 공통 전송 단위
- 또한 일반적으로 레지스터 크기, 정수 크기 및
대부분의 아키텍처에서 명령 크기
Memory Content: Big Endian vs Little Endian
■ 8비트 바이트가 매우 유용하기 때문에, 대부분의 구조는 메모리의 개별 바이트를 주소 지정
- 정렬 제한 : 단어의 메모리 주소는 자연 단어 경계에 있어야 합니다 (MIPS-32에서 4의 배수).
Big Endian | Little Endian |
가장 왼쪽 바이트는 워드 주소 ex, IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA |
맨 오른쪽 바이트는 워드 주소 ex, Intel 80x86, DEC Vax, DEC Alpha(Windows NT) |
Example Instructions(3)
■ Immediate Operands
지속적인 데이터는 무엇일까?
예: a = b + 5
다음과 같이 상수값을 내포하고 있는경우 : 메모리에 거치지않고 명령어가 값을 가지고 연산한다.
명령에 지정된 상수 데이터
addi $s3, $s4, 5
일반적인 사례를 빨리 만든다! >> 성능 향상
작은 상수가 일반적입니다(예: i++, i+=2)
Amdal's 법칙으로부터 명령어 작업에 작은 값을 가진경우 즉석 값이라고 하며 메모리 접근의 load동작이 필요없다.
■ 상수 0
MIPS에서 레지스터 0은 상수 0입니다.
$0으로 지정할 수 있음
일반적인 작업에 유용합니다. ex, register 복사
add $t2, $s1, $zero
부호있는 수와 부호없는 수
■ Binary digit or bits
LSB(least significant bit) | MSB(most significant bit) |
MIPS워드에서 가장 오른쪽 비트 | MIPS워드에서 가장 왼쪽 비트 |
■ 부호 있는 이진수가 다음과 같은 세 가지 방법표현
- 크기와 부호
- 1의 보수
- 2의 보수
■ 부호 확장 : 분기 jump할 때 offset 16bit → 32bit 주소에 적용할 때 연산
MIPS(RISC) 설계원칙 (4가지)
① 단순함은 규칙성을 선호한다.
- 고정 사이즈 설명서
- 적은 수의 명령 형식
- opcode는 항상 처음 6비트입니다.
② 작은 것이 더 빠릅니다.
- 제한된 명령 집합
- 레지스터 파일의 제한된 레지스터 수
- 제한된 주소 지정 모드 수
③ 일반적인 사례를 빠르게 작성하십시오.
- 레지스터 파일의 산술 피연산자(load-store 시스템)
- 명령에 즉시 피연산자 포함 허용(constants)
④ 좋은 디자인은 좋은 절충을 요구한다.
- 다양한 유형의 해석/해석 지원
MIPS-32 ISA
■ Instruction Categories(범주)
- 계산적
- 불러오기/저장
- 점프 및 분기
- 부동 소수점 : coprocessor
- 메모리 관리
- special
■ 3 명령 형식: 모두 32비트 너비
R 형식 : 레지스터 / I 형식 : 즉시값 / J 형식 : jump 값
MIPS 산술 명령
■ MIPS 어셈블리 언어 산술문
add $t0, $s1, $s2
sub $t0, $s1, $s2
■ 각 산술 명령은 하나의 연산을 수행합니다.
■ 각 피연산자는 데이터 경로의 레지스터 파일($t0,$s1,$s2)에 모두 포함된 정확히 3개의 피연산자($t0,$s1,$s2)이다.
destination ← source1 op source2
■ 명령 형식(R 형식)
MIPS 명령 필드
■ MIPS 필드는 쉽게 참조할 수 있도록 이름이 지정됩니다.
op 6-bits :opcode에서 작업을 지정합니다.
rs 5-bits : 첫 번째 소스 피연산자의 파일 주소 등록
rt 5-bits : 두 번째 소스 피연산자의 파일 주소 등록
rd 5-bits : 결과 대상의 파일 주소 등록
Shamt 5-bits : 시프트 양(시프트 지시용)
funct 6-bits : 함수 코드 opcode 증강
MIPS Register File
■ 32비트 레지스터 32개 보유
- 읽기 포트 2개
- 쓰기 포트 1개
■ Register(레지스터)
- 기본 메모리보다 빠릅니다.
- 그러나 위치가 더 많은 등록 파일은 더 느립니다(예: 64 워드 파일은 32 워드 파일보다 50% 더 느릴 수 있습니다).
- 읽기/쓰기 포트 증가는 속도에 2차적으로 영향을 미칩니다.
- 컴파일러가 더 쉽게 사용할 수 있습니다.
- 예를 들어, (A*B) – (C*D) – (E*F)는 다음과 같이 모든 순서 또는 stack으로 곱셈을 수행할 수 있습니다.
- 코드 밀도가 향상되도록 변수를 고정할 수 있습니다(레지스터는 메모리 위치보다 더 적은 비트로 명명되기 때문에).
MIPS Register 규칙
$k0-$k1(예: 26-27)은 운영 체제용으로 예약되어 있습니다.
MIPS 메모리 접근 규칙
■ MIPS에는 메모리에 액세스하기 위한 두 가지 기본 데이터 전송 명령이 있습니다.
lw $t0, 4($s3) # load word from memory
sw $t0, 8($s3) # store word to memory
■ 데이터는 (lw) 레지스터 파일에 load되거나 (sw) 레지스터에서 저장된다 – 5비트 주소
■ 32비트 주소인 메모리 주소는 기본 주소 레지스터의 내용을 오프셋 값에 추가하여 형성됩니다.
- 액세스를 의미하는 16비트 필드는 기본 레지스터에서 주소의 ±213 또는 8,192 워드(±215 또는 32,768 바이트) 영역 내의 메모리 위치로 제한됩니다.
Machine Language - Load Instruction
■ Load/Store Instruction Format (I 형식)
메모리 접근 예시 : 배열
요소마다 4byte라고 가정한다.
MIPS Immediate Instructions
■ 작은 상수는 일반적인 코드에서 자주 사용된다.
■ 가능한 접근법?
- 메모리에 "상수"를 넣고 로드합니다.
- 1과 같은 상수에 대해 유선 연결된 레지스터(예: $0)를 만듭니다.
- 상수를 포함하는 특별한 지시사항을 가지고 있다!
addi $sp, $sp, 4 #$sp = $sp + 4
slti $t0, $s2, 15 #$t0 = 1 if $s2<15
■ Machine format (I 형식):
■ 상수는 명령어의 내부에 보관됩니다!
- 즉시 포맷은 값을 +2^15–1 ~ -2^15 범위로 제한합니다.
Machine Design의 두 가지 핵심원리
■ 명령은 숫자로 표시되므로 데이터와 구별할 수 없습니다.
Program = A sequence of instructions
■ 프로그램은 데이터와 마찬가지로 대체 메모리에 저장(읽거나 쓸 수 있음)됩니다.
■ stored-program 개념
- 프로그램은 바이너리 번호의 파일로 배송될 수 있습니다 – 바이너리 호환성
- 기존 ISA와 호환되면 컴퓨터가 기성 소프트웨어를 상속할 수 있습니다. 업계가 소수의 ISA를 중심으로 조정하도록 유도합니다.
MIPS 논리적 작업 개요
■ 산술 명령어는 레지스터의 내용을 단일 수량(서명 또는 서명되지 않은 정수)으로 본다.
■ 레지스터를 단일 32비트 숫자가 아닌 32개의 원시 비트로 보기
→ 워드 내의 개별 비트 또는 바이트에서 작동 가능
의사 결정을 위한 MIPS 지침
■ 일반적인 컴퓨팅 작업을 수행 필요요소
- Make decisions
- 반복 수행
■ 의사결정 지침
- 프로그램의 제어 흐름 변경
- 실행할 다음 명령 변경
■ MIPS의 두 가지 유형의 의사 결정 진술
- Conditional (branch)
bne $t0, $t1, label #“branch if not equal”
#C code: if (a != b) goto label
beq $t0, $t1, label #“branch if equal”
# C code: if (a == b) goto label
- Unconditional (jump)
j label
MIPS 제어 흐름 지침
■ MIPS 조건부 분기 지침:
bne $s0, $s1, Lbl #go to Lbl if $s0≠$s1
beq $s0, $s1, Lbl #go to Lbl if $s0=$s1
■ Instruction Format (I 형식)
다른 제어 흐름 지침
■ MIPS는 또한 무조건적인 분기 명령 또는 점프 명령을 가지고 있다.
j label #go to label
■ Instruction Format (J 형식):
절차 접근 지침
■ MIPS 프로시저 호출 지침:
jal ProcedureAddress #jump and link
PC+4를 레지스터 $ra에 저장하여 절차 반환을 위한 다음 지침에 대한 링크를 제공합니다.
■ Machine format (J 형식)
■ Then can do procedure return with a
jr $ra #return
■ Instruction format (R 형식):
Addressing Modes (주소지정방식)
주소 지정 방식
1. 레지스터 어드레싱
2. Base 어드레싱
3. 즉시값 어드레싱
4. pc-relative 어드레싱
: 현재 program counter에 대해 offset을 더해서 분기할 목적지를 정한다.
5. pseudodirect 어드레싱
MIPS Organization So Far
'컴퓨터 구조' 카테고리의 다른 글
Chapter5-2. 서로 다른 메모리 기술들 (0) | 2022.11.22 |
---|---|
Chapter.5-1 메모리 계층 이용 (0) | 2022.11.22 |
Chapter.2-1 컴퓨터 언어 (0) | 2022.10.04 |
Chapter.1 컴퓨터 추상화와 기술 (0) | 2022.10.03 |
Chapter.0 과목소개 및 기술동향 (0) | 2022.10.03 |