isPowerfulBlog

[컴퓨터구조] #02 | Arithmetic for Computers 본문

CS

[컴퓨터구조] #02 | Arithmetic for Computers

왕밤빵도라에몽 2023. 10. 16. 20:23

임은진 교수님의 컴퓨터구조 lecture04~07을 학습하고 작성한 TIL입니다


2.4. Signed and Unsigned Numbers

signed 32-bit in 2's complement representation

✅ 1의 보수: 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 뺀 값, 비트 반전
✅ 2의 보수: 1의 보수에 1을 더한 값

-2 표현하기: +2의 2의 보수를 만든다.

  1. a +2를 2진수로 표현한다
    0000 0000 0000 0000 0000 0000 0000 0010
  2. b a의 1의 보수를 만든다
    1111 1111 1111 1111 1111 1111 1111 1101
  3. c b에 1을 더한다
    ```
    1111 1111 1111 1111 1111 1111 1111 1101
  • 1

= 1111 1111 1111 1111 1111 1111 1111 1110
= -2


### a=1111 1111 1111 1111 1111 1111 1111 1111₂을 십진수로 나타내기
**음수**
1. `b` a의 **1의 보수**를 만든다

b=0000 0000 0000 0000 0000 0000 0000 0000

2. `c` b에 1을 더한다 → c는 a의 절댓값

c=0000 0000 0000 0000 0000 0000 0000 0001

3. a는 십진수로 -c


**양수**
32-bit로 나타낼 수 있는 가장 큰 양수는

0111 1111 1111 1111 1111 1111 1111 1111


***

# 3. Arithmetic for Computers

## signed binary subtraction
### a-b = a + (-b)
b를 **양수/음수 관계없이** -b(2의 보수)로 만들어 덧셈을 함

## overflow
연산의 결과가 32-bit word로 표현될 수 없을 때 발생
**부호가 같은** 숫자끼리 더했는데 결과가 **부호가 다르게** 나오면 오버플로우가 발생한 것 → **overflow exception 발생**

## MIPS unsigned 명령어
### addu / addiu / subu
unsigned 숫자로 보고 연산을 하기 때문에
연산의 결과가 **overflow**가 되어도 **exception이 발생하지 않음**

## MIPS integer multiplication
### mult / multu
연산 값을 `LO`, `HI`에 나눠서 저장

mult rs, rt
multu rs, rt


## MIPS integer division
### div / divu
`LO` 몫
`HI` 나머지

div rs, rt
divu rs, rt


✅ **mfhi, mflo**를 통해서 `LO`와 `HI`에 저장된 값을 레지스터에 읽어올 수 있음

## MIPS logical operations
### or / ori
### and / andi
### nor
not(A) = not(A or 0) = A nor 0
not(A) = not(A or A) = A nor A

nor $t7, $t1, $t1 # $t7 = ~$t1

### sll
shift left logical

sll $t1, $s0, 4

**(a)** 왼쪽으로 i bits shift하는 것 = **(b)** 2^i만큼 곱하는 것
**연산속도: a > b**

### srl
shift right logical
msb가 이동함에 따라 왼쪽에 남는 비트들은 0으로 채워짐

srl $t4, $t2, 2

```
(a) 오른쪽으로 i bits shift하는 것 = (b) 2^i만큼 나누는 것
연산속도: a > b


참고 임은진 교수님 컴퓨터구조 강의안


2021년 벨로그 글 옮겨옴.