컴퓨터 구조

Chapter.2-2 컴퓨터 언어

YJ_ma 2022. 10. 4. 01:49

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