[Computer Architecture] Arithmetic for Computers

G·2023년 3월 28일
0

Computer Architecture

목록 보기
7/16

산술 연산을, 레지스터와 연산기 등 하드웨어의 관점을 중심으로 알아본다.

정수, 실수, 오버플로우에 대해 모두 알아본다.

When overflow occurs in MIPS

MIPS에서 overflow가 일어났을 땐 프로그래밍 언어에 따라 다르다. C언어는 오버플로가 발생했을 때 아무일도 일어나지 않으므로, addu, addui, subu와 같은 instruction을 사용한다.

exception을 요구하는 언어들은 add, addi instruction을 사용한다.

exception handler를 실행하기 위해서, 발생시키기전의 PC를 EPC regsiter에 저장한다.
exception handling이 종료되고, EPC에 있는 값을 PC에 복원한다.

이를 mfc0 instruction으로 처리한다.

mfc0 $k0, $13 13번 레지스터(EFC)에 있는 값을 $K0에 저장한다.
다른 범용 레지스터에 저장하면 값이 overwrite 될 수 있다.

Instruction for Multimedia

Multimedia를 위한 산술 instruction은 상대적으로 작은 값을 사용하는 data를 처리하기 위해 레지스터를 부분적으로 나누어 instruction을 제공한다.
32bit register를 8bit으로 나누어 각각의 Multimedia를 위한 값에 산술연산을 수행한다.
이 부분적인 값들에 overflow가 나면 어떻게 될까? 오디오 데이터를 위한 값이면 양수 -> 음수가 되면 아예 이상한 데이터가 전달될 수 있기 때문에, 가장 큰 양수값으로 set 해준다.

Multiplication Hardware


곱셈 연산을 위한 하드웨어이다. 이를 구현하기 위해 64bit, 64bit, 32bit의 레지스터와 64bit의 ALU가 필요하다.

  • product는 계산된 값을 저장한다.
  • ALU는 곱셈을 수행한다.
  • control test는 승수의 최하위 bit이 1인지 0인지 판단한다.(0이면 아무것도 더하지 않는다.)


간단하게 위와 같이 동작한다. 승수의 최하위 bit가 1이면 더해준다. 0이면 아무것도 하지 않는다.
이후 승수를 오른쪽으로 shift, 피승수를 왼쪽으로 shift한다. 이 이유는 곱셈의 성질을 곱씹어보면 된다.

Optimized Multiplier


64bit, 32bit의 레지스터만 필요하여 더 효율적으로 구현되어 있다. 32bit의 ALU가 필요한 이유는 product에 승수와 결과값 모두 저장하기 때문이다.

product 오른쪽 32bit에 저장된 승수의 최하휘 bit이 1이면 피승수를 왼쪽에만 더해준다.
그리고 product를 오른쪽으로 shift하면 다음에 곱할 승수의 최하위 bit이 업데이트 되며 결과값도 한칸 내려가기 때문에, 곱셈의 성질을 만족한다.

profile
열심히 안 사는 사람

0개의 댓글