컴퓨터 구조론 Lecture 2 - 3

D0Lim·2021년 1월 7일
0

컴퓨터 구조론

목록 보기
6/13
post-thumbnail

시작하기 전

이 글은 필자가 수업시간에 들은 내용과 강의록을 토대로 정리한 글입니다.
수업 필기이다 보니, 오류가 있거나 설명이 부족한 부분이 있을 수 있습니다.
궁금하신 점이나 지적하실 점이 있다면 댓글로 달아주세요! 확인 후 내용을 추가하거나 답변해드리도록 하겠습니다 :)

음수 표현법(How to represent negative numbers?)

  • … together with positive numbers?

  • Sign & Magnitude 표기

    • 맨 첫 비트를 sign 비트로 사용한다.
    • 음수와 양수 사이의 계산이 이상해진다.
  • 1’s complement

    • 1의 보수를 사용한다.
    • 그런데, 0과 -0이 표기가 다르다.
  • 2’s complement

    • 모든 비트를 뒤집어(flip)주고, 1을 더한다.
    • 상기 표기법의 단점들이 상쇄된다.

대부분, 2’s complement를 사용한다.


부호 있는 2의 보수 정수(2’s Complement Signed Integers)

  • n 비트의 수가 주어진다면,
x=xn12n1+xn22n2++x121+x020x = -x_{n-1}2^{n-1} + x_{n-2}2^{n-2} + \cdots + x_{1}2^{1} + x_{0}2^{0}

이다.

  • MSB는 부호(sign) 비트이다.
    • 음수의 경우엔 1
    • 음수가 아닐 경우엔 0이다.
    • 따라서, (2n1)-(-2^{n-1}) 은 표현될 수 없다.
    • 음수가 아닌 수들은 자명하게 부호가 없는 수의 표현과 2의 보수 표현이 같은 표현을 가진다.
  • 범위 : 2n1-2^{n - 1} 부터 2n112^{n - 1} - 1 까지
    • 8 비트를 사용한다면 \rightarrow -128 ~ 127
    • 16 비트를 사용한다면 \rightarrow -32768 ~ 32767
    • 32 비트를 사용한다면 \rightarrow -2,147,483,648 ~ 2,147,483,647
  • 특수한 경우
    • 0은 항상 0000 0000 … 0000 이다.
    • -1은 항상 1111 1111 … 1111 이다.
    • 가장 작은 수는 항상 1000 0000 0000 … 0000 이다.
    • 가장 큰 수는 항상 0111 1111 … 1111 이다.

부호 바꾸기(Signed Negation)

  • 부호를 바꾸는 법 : 모든 비트들을 뒤집고(flip), 1을 더하면 된다.
x+xˉ=11111112=1x + \bar{x} = 1111 \cdots 111_2 = -1
xˉ+1=x\bar{x} + 1 = -x

부호 확장(Sign Extension)

  • 부호 확장은 더 많은 비트를 사용해서 숫자의 값은 유지하면서 표현하는 방법이다.
  • MIPS 명령 셋에선 다음의 명령들로 수행 가능하다.
    • addi : 덧셈 연산을 통해서 즉각적으로 확장한다.
    • lb , lh : 불러와진 바이트나 하프워드(halfword)를 확장한다.
    • beq , bne : 변위(displacement)를 확장한다.
  • 부호 비트를 왼쪽으로 복제해서 확장한다. 참고로, 부호가 없는 값은 0을 복제해서 확장한다.

16진수

하나의 16진수 숫자마다, 4 비트가 들어간다고 보면 된다. 즉, 비트 문자열을 짧게 표현한 것이라고 보면 된다.


명령 표현하기(Representing Instructions)

  • 명령들은 기계 코드(Machine code)라고 불리는 이진수로 인코딩 된다.
  • MIPS 명령
    • 정확히 32 비트의 명령 word로 인코딩 된다.
    • 연산이나 레지스터 등을 인코딩할 때, 적은 수의 명령(Instruction) 포맷을 가진다.
  • 레지스터의 번호(Register numbers)
    • $t0 - $t7 은 레지스터 8번 - 15번이다.
    • $t8 - $t9 은 레지스터 24번 - 25번이다.
    • $s0 - $s7 은 레지스터 16번 - 23번이다.

MIPS R-포맷 명령(MIPS R-format Instructions)

mips 1

  • 명령 변수(Instruction fields)

    • op : 연산 코드(operation code)
    • rs : 첫 번째 소스(source) 레지스터
    • rt : 두 번째 소스(source) 레지스터
    • rd : 목적지(destination) 레지스터
    • shamt : 총 시프팅(shift) 수 \rightarrow 시프트 명령(Shift instruction)에만 쓰인다.
    • funct : 함수 코드(operation code를 확장한다)
  • 예시 : add , sub , and , slt


MIPS I-포맷 명령(MIPS I-format Instructions)

mips 2

  • 즉각 산술 연산 그리고 불러오기/저장(Load/Store) 명령에 사용된다.

    • rt : 목적지(destination) 혹은 소스(source) 레지스터
    • 상수(Constants) : 215-2^{15} 에서, 21512^{15} -1 까지
    • 주소(Address) : rs에서 오프셋이 기본 주소에 더해진다.
  • 예시 : lw , beq , slti , lui

  • 디자인 원칙(Design Principle) 4 : 좋은 디자인은 좋은 타협이 필요하다.

    • 포맷이 여러개 생기는 것은 디코딩을 복잡하게 하지만, 명령이 일정하게 32 비트가 될 수 있게 지킬 수 있게 한다.
    • 포맷을 가능한 비슷하게 한다.

논리적 연산(Logical Operation)

  • 비트 단위의 조작을 위한 명령들
OperationCJavaMIPS
Shift left<<<<sll
Shift right>>>>>srl
Bitwise AND&&and, andi
Bitwise OR||or, ori
Bitwise NOT~~nor
  • word에 비트들을 풀어넣거나 삽입할 때 유용하다.

0개의 댓글