컴퓨터/컴퓨터구조

[CA] Arithmetic for Computer

xeskin 2020. 4. 19. 14:41
반응형

Binary Substraction

- 두번째 피연산자의 negation을 더하는 걸 생각.

- 7 - 6 = 7 + (-6)

- 결과값이 표현 범위를 벗어나면 overflow가 발생함.

  1. 양수 두개를 빼거나, 음수 두개를 뺄 때는 overflow가 발생하지 않음.

  2. 음수에서 양수를 빼거나, 양수에서 음수를 빼는 경우에 발생할 수 있음.

 

Overflow of Unsigned Integers

- Unsigned integers는 보통 overflow가 무시되는 메모리 주소에 사용됨.

- 그러므로, 어떤 경우에는 overflow를 무시하고, 다른 경우에는 overflow를 인식할 수 있는 방법이 필요함.

  1. add, addi, sub => overflow exception을 일으킴.

  2. addu, addiu, subu => overflow exception을 일으키지 않음.

 

Handling Overflow

- Overflow를 해결하는 방법은 언어마다 다름.

  1. C, Java: integer overflow를 무시함.

    MIPS C compilers => 산술 연산의 unsinged version을 발생시킴.

  2, Ada, Fortran: overflow가 프로그램에게 인식됨

    MIPS Fortran compilers => 피연산자 타입에 따라 적절한 명령어를 제공함.

- MIPS는 예외없이, overflow를 탐지함.

  1. 예외일 때, 예외를 일으킨 명령어의 주소는 EPC 레지스터에 저장됨 (Exception Program Counter)

  2. 그러고나서, exception handler로 jump함.

  3. mfc0 명령어가 EPC를 범용 레지스터에 복사해서, 예외가 발생한 명령어에 돌아갈 수 있게끔 도와줌.

 

Multiplication

- 0010 x 0011 하는 경우를 생각. (multiplicand = 0010, multiplier = 1001), multiplicand는 매 스템마다 왼쪽으로 이동함.

  1. multiplier의 값이 1이니까 multiplicand와 product를 더해준 값을 product에 저장함.

  2. multiplicand를 왼쪽으로 옮김.

  3. multiplier를 오른쪽으로 옮김 >> iteration 1회

  4. multiplier의 값이 1이니까 multiplicand와 product를 더해준 값을 product에 저장함.

  5. multiplicand를 왼쪽으로 옮김.

  6. multiplier를 오른쪽으로 옮김 >> iteration 2회

  7. multiplier의 값이 0이니까 아무런 연산을 하지 않음.

  8. multiplicand를 왼쪽으로 옮김.

  9. multiplier를 오른쪽으로 옮김 >> iteration 3회

  10. 7-9를 똑같이 해줌.

 

Optimized Multiplier

- Multiplicand register와 ALU가 32bit임. multiplier register가 필요하지 않음.

- Product register는 64bit임.

- Multiplier는 product register의 오른쪽 반에 위치함.

- Multiplicand 대신에 product를 이동시킴.

반응형

'컴퓨터 > 컴퓨터구조' 카테고리의 다른 글

[CA] Processor (1)  (0) 2020.04.20
[CA] Instructions: Language of Computer  (0) 2020.04.18
[CA] Computer Abstraction and Technology  (0) 2020.04.18