Arithmetics

곱셈, 나눗셈 등은 어떻게 수행되고 분수, 실수를 어떻게 표현할 것인가.

Overflow

overflow는 값이 표현할 수 있는 범위를 벗어날때 발생하고 underflow표현할수있는 값보다 작아질 때 발생함.

다른 부호의 값들을 더할때는 overflow가 발생할 수 없다.

양수랑 양수를 더했는데 최상위비트가 1이면 음수가 되고 overflow가 발생했음을 알 수 있다.

반대로 negative숫자를 더했는데 sign bit가 0이 나와도 overflow가 일어났다.

unsigned instruction은 오버플로우가 일어나도 exception발생시키지 않는다.

C언어는 overflow를 무시한다. Signed instruction은 overflow에 exception을 발생시킨다.

스크린샷 2024-10-08 오후 4.49.11.png

Multiplication

스크린샷 2024-10-22 오후 2.15.19.png

multiplier = 곱할 수. multiplicand = 곱해지는 수

ALU = arithmetic logic unit 산수, 논리연산을 수행하는 하드웨어 유닛. ex) add, and, or

multiplicand는 64비트로 오른쪽부터 채워나간다.

datapath는 명령에 따라서 계산되는 정해진 흐름으로 레지스터, ALU등을 포함한다. control test는 제어신호를 생성해서 datapath에서의 연산을 조정한다.

product은 곱한 결과를 저장하는 하드웨어로 0으로 초기화되어있음.

multiplier와 multiplicand의 곱셈 결과가 길어질 수 있기 때문에 64비트이다.

스크린샷 2024-10-08 오후 5.02.58.png

처음에는 multiplier의 0번째 비트를 control test로 보내서 0인지 1인지 확인하고 1인 경우 product에 multiplicand더하고 결과를 product에 저장한다. add명령은 ALU가 수행한다.