Notice
Recent Posts
Recent Comments
«   2024/12   »
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 31
Archives
Today
Total
관리 메뉴

SYDev

[컴퓨터 구조] Lecture 11: Arithmetic for Computers 본문

3학년 1학기 전공/컴퓨터 구조

[컴퓨터 구조] Lecture 11: Arithmetic for Computers

시데브 2024. 4. 21. 10:44
경희대학교 김정욱 교수님의 컴퓨터 구조 강의 내용을 기반으로 한 정리글

 

Floating Point Instruction in MIPS

  • 레지스터 테이블의 32개의 레지스터와는 별도의 floating point를 다루는 레지스터 $f0, $f1, $f2, .. .
  • int register와 다르게 floating point register 0는 숫자를 포함할 수 있다.

 

single precision arithmetic instruction

  • Addition - add.s
  • Subtraction - sub.s
  • Multiplication - mul.s
  • Division - div.s

 

double precision arithmetic instruction

  • Addition - add.d
  • Subtraction - sub.d
  • Multiplication - mul.d
  • Division - div.d

 

Floating point comparison

  • Format: c.x.s (Single precision), c.x.d (Double precision)
  • x: equl(eq), not equl(neq), less than(lt), less than or equal (le), greater than (gt), greater than or equal (ge)

 

Floating point branch

  • Branch, true (bc1t)
  • Branch, false (bc1f)

 

Load and store

  • load (lwc1)
  • save (swc1)

 

MIPS floating point machine language

-> MIPS에는 floating point의 immediate 정의 X

 

Compiling MIPS Assembly C Code

MIPS floating point machine language - Example 1

-> Static data에 접근하기 위해서는 Global pointer($gp)를 이용해야 한다.

 

 

f2c:
    lwc1 $f16, const5($gp)
    lwc1 $f18, const9($gp)
    
    div $f16, $f16, $f18
    
    lwc1 $f18, const32($gp)
    
    sub.s $f18, $f12, $f18
    mul $f0, $f16, $f18
    
    jr $ra

 

MIPS floating point machine language - Example 2

mm: ...
    li $t1, 32
    li $s0, 0
L1: 
    li $s1, 0
L2:
    li $s2, 0
    #[i][j] -> byte offset -> byte addressing
    
    sll $t2, $s0, 5
    addu $t2, $t2, $s1
    sll $t2, $t2, 3
    addu $t2, $a0, $t2
    l.d $f4, 0($t2)
    
L3:
    #b[k][j]
    sll $t0, $s2, 5
    addu $t0, $t0, $s1
    sll $t0, $t0, 3
    addu $t0, $a2, $t0
    l.d $f16, 0($t0)
   
    #a[i][k]
    sll $t0, $s0, 5
    addu $t0, $t0, $s2
    sll $t0, $t0, 3
    addu $t0, $a1, $t0
    l.d $f18, 0($t0)
   
    #저장할 값의 rValue 
    mul.d $f16,$f16, $f18
    add.d $f4, $f4, $f16
   
    
    addiu $s2, $s2, 1
    bne $s2, $t1, L3
    s.d $f4, 0($t2)	#최종적으로 정해진 값 c[i][j]에 저장
    
    addiu $s1, $s1, 1
    bne $s1, $t1, L2
    addiu $s0, $s0, 1
    bne $s0, $t1, L1
    ...