일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 클린 코드
- L3 Router
- MMU
- addressing mode
- 공인 IP
- L2 switch
- page
- register
- 사설 IP
- 명령어
- Clean code
- floating point
- ack
- 코드 컴플릿
- physical address
- osi 7
- 가독성
- private ip
- cache
- refactoring
- interrupt
- network
- 리펙토링
- float
- Code complete
- Public IP
- Sector
- ALU
- TCP
- CPU
- Today
- Total
목록컴퓨터 구조/Integer Arithmetic (7)
Software Lab

아래 절차를 데이터 bit 수 만큼 반복한다. ① : controller는 divisor 값을 가져온다. ② : controller는 remainder 값을 가져온다. divisor 보다 remainder가 크다면 ③으로 간다. 작다면 ⑧로 간다. ③ : controller는 quotient 값에서 LSB를 1로 설정한다. ④ : divisor 값은 뺄셈을 위해 2의 보수기를 통과 후 ALU에 입력된다. ⑤ : remainder 값이 ALU 에 입력된다. ⑥ : controller는 ALU에 Add Opcode 신호를 보낸다. ⑦ : ALU는 뺄셈을 위해 2의 보수기를 통과한 divisor와 remainder로부터 입력된 두 값을 더하고, 그 결과를 remainder에 저장한다. ⑧ : controlle..

먼저 2진수에서 나눗셈 원리를 이해하자. dividend에서 divisor를 오른쪽으로 한 칸씩 이동하면서 빼는 것이다. 만약 뺄 수 있다면 해당 위치의 quotient bit는 1이 되고, 뺄 수 없다면 0이 된다. 간단한 예로 1011 / 1011 을 해보자.

아래 절차를 데이터 bit 수 만큼 반복한다. ① : controller는 multiplier 값에서 LSB(Least significant bit)를 가져온다. LSB가 1이면 ②로 간다. 0이면 ⑥으로 간다. ② : multiplicand 값이 ALU에 입력된다. ③ : product 값이 ALU에 입력된다. ④ : controller는 ALU에 Add Opcode 신호를 보낸다. ⑤ : ALU는 multiplicand와 product로부터 입력된 두 값을 더하고, 그 결과를 product에 저장한다. ⑥ : controller가 신호를 보내면 multiplicand는 비트열을 오른쪽으로 한 칸 이동한다. ⑦ : controller가 신호를 보내면 multiplier 비트열을 왼쪽으로 한 칸 이동한다..

먼저 2진수에서 곱셈 원리를 이해하자. multiplicand를 multiplier 각 bit 별 쪼개어서 곱한다. 다음으로 각각 구해진 값들을 모두 더하면 된다. 간단한 예로 0011 * 0101 을 해보자. ⓑ, ⓓ - multiplier의 bit가 0인 경우 결괏값은 항상 0이다. ⓐ, ⓒ - multiplier의 bit가 1이라면 그 bit가 왼쪽에서부터 떨어진 만큼 multiplicand를 오른쪽으로 이동한 값이 결괏값이다. ⓒ를 보면 왼쪽에서 2번째 bit이므로multiplicand 오른쪽으로 2번 이동한 값이 결괏값이다. 구해진 각각 결괏값들을 모두 더하면 된다. ⓑ, ⓓ와 같이 결괏값이 0인 경우는 더하지 않아도 된다.

A-B는 A+(-B)로 바꾸어 계산할 수 있다. 2의 보수기(2's complementer)는 값을 음수로 바꾸는 기능을 한다. 감산기는 2의 보수기를 통해 B를 -B로 바꾸어서 A와 덧셈 하도록 만들면 된다. 2의 보수에 대한 원리를 알아보자. 이진수에서 어떤 값의 2의 보수는 bit를 반전시킨 후 +1을 하면 된다. 아래는 부호 있는 4bit 정수의 목록이다. 5와 -5는 서로 간에 2의 보수 관계에 있다. 다른 값들도 마찬가지이다. 한번 실제 값으로 계산해 보자. A를 2 또는 -2로 두고 B를 5 또는 -5로 두자. 그리고 각각에 대하여 덧셈을 해보자. 아래와 같이 계산된 값이 정확하다.

아래 논리 회로는 전가산기(Full Adder)이다. 전가산기를 추상화하면 3개의 입력과 2개의 출력을 가지는 장치이다. 그렇다면 4bit Adder를 만들려면 전가산기 4개를 다음과 같이 연결하면 된다. n번째 bit에서 Cout은 n+1번째 bit에서 Cin으로 연결된다. 그리고 0번째 bit의 Cin은 항상 0 이 될 것이다. 마지막으로 가산기를 추상화하면 다음과 같다.

4bit 가산기의 동작 원리를 이해하자. 32bit, 64bit 가산기라도 4bit의 동작 원리와 다르지 않다. 먼저 2진수 덧셈 원리를 알아보자. n번째 bit 계산은 3개(A, B, Cin)의 입력값들을 덧셈한다. 그리고 2개(Y, Cout)의 출력값이 발생한다. n번째 bit 계산의 출력값 Cout 은 n+1번째 bit 계산에서 올림수 Cin가 된다. 그리고 0번째 bit에서 Cin은 원래 없지만 0으로 두자. 이제 3개(A, B, Cin)의 입력값과 2개(Y, Cout)의 출력값 대한 모든 경우의 수를 구할 수 있다. 위의 진리표를 만족하는 논리 회로를 만들 수 있다. 이것을 전가산기(Full Adder)라고 한다.