Previous chapter
Arithmetic Operations
add a, b, c
Assembly
볡μ¬
MIPS μ°μ λͺ
λ Ήμ΄λ λ°λμ ν μ’
λ₯μ μ°μ°λ§ μ§μνλ©° νμ λ³μ 3κ°λ₯Ό κ°λ νμμ μ격ν μ§ν¨λ€.
λ€ λ³μ b,c,d,eμ ν©μ aμ λ£λλ€κ³ μκ°νμ.
add a, b, c #The sum of b and c is placed in a
add a, a, d #The sum of b,c and d is now in a
add a, a, e #The sum of b,c,d and e is now in a
Assembly
볡μ¬
κ³ κΈ νλ‘κ·Έλλ° μΈμ΄μλ λ¬λ¦¬ ν μ€μ λͺ
λ Ήμ΄ νλλ§μ μΈ μ μμΌλ©°, μ€μ΄ λλλ©΄ μ£Όμλ λλλ€λ μ μ΄ Cμ λ€λ₯΄λ€.
λ§μ
μ°μ°μ νΌμ°μ°μ(operand)λ λν΄μ§ μ«μ 2κ°μ ν©μ κΈ°μ΅ν μ₯μ νλ, λͺ¨λ 3κ°μΈ κ²μ΄ μμ°μ€λ½λ€. λͺ¨λ λͺ
λ Ήμ΄κ° λ°λμ 3κ°μ© κ°λλ‘ μ ννλ κ²μ νλμ¨μ΄λ₯Ό λ¨μνκ² λ§λ€ μ μλ€.
λ°λΌμ νλμ¨μ΄ μ€κ³ 3λμμΉ μ€ μ²«λ²μ§Έλ₯Ό λμΆν μ μλ€.
κ°λ¨νκ² νκΈ° μν΄μλ κ·μΉμ μΈ κ²μ΄ μ’λ€.
Examples
a = b + c;
d = a - e;
C
볡μ¬
add a, b, c
sub d, a, e
Assembly
볡μ¬
C λͺ
λ Ήμ΄μμ MIPS μ΄μ
λΈλ¦¬ μΈμ΄ λͺ
λ Ήμ΄λ‘μ λ³νμ μ»΄νμΌλ¬μ μν΄ μ΄λ£¨μ΄μ§λ€.
μ»΄νμΌλ¬κ° μμ±ν MIPSμ½λλ μμ κ°μ κ²μ΄λ€.
f = (g + h) - (i + j);
C
볡μ¬
add t0, g, h
add t1, i, j
sub f, t0, t1
Assembly
볡μ¬
MIPS λͺ
λ Ήμ΄λ νλ²μ νλμ μ°μ°λ§ κ°λ₯νλ€λ κ²μ κΈ°μ΅νμ.
λ€μκ³Ό κ°μ Cλ¬Έμ₯μ μ»΄νμΌλ¬λ 볡μμ λͺ
λ Ήμ΄λ‘ λλμ΄μΌ νλ€.
μ»΄νμΌλ¬λ t0λΌλ μμ λ³μλ₯Ό μμ±ν΄ gμ hμ ν©μ ꡬνκ³ κ²°κ³Όλ₯Ό t0μ μ μ₯νλ€.
λ€μ μ°μ°μ λΊμ
μ΄μ§λ§, λΊμ
μ΄μ μ iμ jμ κ°μ ꡬν νμκ° μλ€. t1μ΄λΌλ μμλ³μλ₯Ό λ§λ€μ΄ i+jμ κ°μ μ μ₯νμ.
λ§μ§λ§μΌλ‘ fμ t0μ t1μ μ°¨λ₯Ό μ μ₯νλ©΄ λμ΄λ€.
Operand
μμ μμ€ μΈμ΄ νλ‘κ·Έλ¨κ³Όλ λ¬λ¦¬ μ°μ λͺ
λ Ήμ΄μ νΌμ°μ°μμλ μ μ½μ΄ μλ€.
λ μ§μ€ν°λΌκ³ νλ νλμ¨μ΄λ‘ μ§μ ꡬνλ νΉμ μμΉ λͺκ³³μ μλ κ²λ§μ μ¬μ©ν μ μλ€.
MIPS ꡬ쑰μμ λ μ§μ€ν°μ ν¬κΈ°λ 32λΉνΈλ€. MIPSμμλ 32λΉνΈκ° ν λ©μ΄λ¦¬λ‘ λ³΄ν΅ μ²λ¦¬λλ―λ‘ μ΄λ₯Ό μλλΌκ³ λΆλ₯Έλ€.
νλ‘κ·Έλλ° μΈμ΄μ λ³μμ λ μ§μ€ν°μ ν° μ°¨μ΄μ μ€ νλλ λ μ§μ€ν°μ μκ° νμ λμ΄ μλ€λ μ μ΄λ€.
λ μ§μ€ν° κ°μλ₯Ό 32κ°λ‘ μ ννλ μ΄μ λ νλμ¨μ΄ κΈ°μ μ 3κ°μ§ μ€κ³ μμΉ μ€ 2λ²μ§Έ μμΉμμ μ°Ύμ μ μλ€.
μμ κ²μ΄ λ λΉ λ₯΄λ€.
κ·Έλ¬λ μμ κ²μ΄ 무쑰건 λΉ¨λΌμ§μ§λ μλμ λͺ
μ¬νλΌ.
λ μ§μ€ν°κ° 31κ°λΌκ³ ν΄μ 32κ°λ³΄λ€ λΉ¨λΌμ§μ§λ μλλ€. β νλ‘μ μ°κ΄λμ΄μμ
λͺ
λ Ήμ΄λ₯Ό μμ±ν λ λ¨μνκ² λ μ§μ€ν° λ²νΈλ₯Ό μ¬μ©ν μ μμ§λ§ MIPSμμλ $ κΈ°νΈ λ€ λ κΈμκ° λμ€λ μ΄λ¦μ μ¬μ©ν κ²μ΄λ€.
λ€μ μμ λ₯Ό λ€μ μ΄λ²Όλ³΄μ.
f = (g + h) - (i + j);
Assembly
볡μ¬
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t1, %t2
Assembly
볡μ¬
Memory Operand
μνκΉκ²λ νλ‘κ·Έλλ° μΈμ΄μλ λ¨μ λ³μ μΈμλ λ°°μ΄μ΄λ ꡬ쑰체μ κ°μ 볡μ‘ν μλ£κ΅¬μ‘° ν¬μ±μ΄μ΄λ€. μ΄λ° ꡬ쑰λ₯Ό μν΄μ μ»΄ν¨ν°λ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ€.
λ μ§μ€ν°λ μλμ λ°μ΄ν°λ§μ λ€λ£° μ μμ§λ§, μ»΄ν¨ν° λ©λͺ¨λ¦¬λ μμμ΅κ°μ λ°μ΄ν°λ₯Ό μ μ₯νλ€.
MIPSμ μ°μ μ°μ°μ λ μ§μ€ν°μλ§ μ€νλλ―λ‘ λ©λͺ¨λ¦¬ λ μ§μ€ν° κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ λͺ
λ Ήμ΄κ° μμ΄μΌ νλ€. μ΄λ° λͺ
λ Ήμ΄λ₯Ό λ°μ΄ν° μ μ‘ λͺ
λ Ήμ΄(data transfer insruction)λΌκ³ νλ€.
λ©λͺ¨λ¦¬μ κΈ°μ΅λ λ°μ΄ν° μλμ μ κ·Όνλ €λ©΄ λ©λͺ¨λ¦¬ μ£Όμ(memory address)λ₯Ό μ§μ ν΄μΌ νλ€.
λ©λͺ¨λ¦¬λ μ£Όμκ° μΈλ±μ€ μν μ νλ 1μ°¨μ λ°°μ΄μ΄λ€. μ£Όμλ 0λΆν° μμνλ€.
μΈλ²μ©¨ λ°μ΄ν° μ£Όμλ 2μ΄κ³ , Memory[2]μ κ°μ 10μ΄λ€.
λ©λͺ¨λ¦¬μμ λ μ§μ€ν°λ‘ λ°μ΄ν°λ₯Ό 볡μ¬νλ λͺ
λ Ήμ μ μ¬(load)λΌκ³ νλ€.
λ μ§μ€ν° β λ©λͺ¨λ¦¬ λ‘ λ°μ΄ν°λ₯Ό μ½λ μ
μ₯μ΄κΈ° λλ¬Έ
lw save_reg, memory_access_reg
Assembly
볡μ¬
Examples
g = h + A[8];
C
볡μ¬
lw $t0, 8($s3)
add $s1, $s2, $t0
Assembly
볡μ¬
Aλ 100μλ λ°°μ΄μ΄κ³ , λ³μ g,hλ λ μ§μ€ν° $s1, $s2μ ν λΉλμλ€κ³ νμ νλ€.
λ°°μ΄μ μμμ£Όμκ° $s3μ κΈ°μ΅λμ΄ μλ€κ³ ν λ λ€μ C λ¬Έμ₯μ μ»΄νμΌνλ©΄ μ€λ₯Έμͺ½κ³Ό κ°μ΄ λ³νλλ€.
μ μ¬μ λ°λλ‘ λ μ§μ€ν°μμ λ©λͺ¨λ¦¬λ‘ λ°μ΄ν°λ₯Ό 보λ΄λ λͺ
λ Ήμ μ μ₯(store)μ΄λΌκ³ νλ€. μ μ₯ λͺ
λ Ήμ μκΉμλ μ μ¬μ κ°λ€. μ°μ°μ μ΄λ¦, μ μ₯ν λ°μ΄ν°λ₯Ό κ°κ³ μλ λ μ§μ€ν°, λ°°μ΄ μμ μ νμ μ¬μ©ν λ³μ, λ² μ΄μ€ λ μ§μ€ν°λ‘ ꡬμ±λλ€.
Examples
A[12] = h + A[8];
C
볡μ¬
lw $t0 32($s3)
add $t0, $s2, $t0
sw $tw, 48($s3)
Assembly
볡μ¬
λ³μ hκ° λ μ§μ€ν° $s2μ ν λΉλμ΄ μμΌλ©° λ°°μ΄ Aμ μμμ£Όμλ $s3μ λ€μ΄μλ€κ³ κ°μ νμ. λ€μ C λ¬Έμ₯μ MIPS μ΄μ
λΈλ¦¬ νλ‘κ·Έλ¨μ λ°κΎΈλ©΄ μ΄λ κ² λ²μλλ€.
μκΉμλ λ§μ΄ λ€λ₯΄λ€. 8κ³Ό 12κ° 32μ 48λ‘ 4λ°°λ λ»₯νκΈ° λμλ€!
μ΄κ² λ¬΄μ¨ κ°μ리μΈκ°!
Hardware / Software Interface 1
μ»΄νμΌλ¬λ λ°°μ΄μ΄λ ꡬ쑰체μ κ°μ μλ£κ΅¬μ‘°λ₯Ό λ©λͺ¨λ¦¬μ ν λΉνλ μΌλ λ΄λΉνλ€.
νλ‘κ·Έλ¨μμλ λ°μ΄νΈλ₯Ό λ§μ΄ μ°λ―λ‘ λλΆλΆμ μ»΄ν¨ν°λ λ°μ΄νΈ λ¨μλ‘ μ£Όμλ₯Ό μ§μ νλ€.
μλ
μλ μ£Όμλ μλλ₯Ό ꡬμ±νλ 4λ°μ΄νΈ μ£Όμ μ€ νλλ₯Ό μ¬μ©νλ€.
μ¦, μ°μλ μλμ μ£Όμλ 4μ© μ°¨μ΄κ° λλ©° MIPSμμ μλμ μ£Όμλ νμ 4μ λ°°μμ¬μΌ νλ€.
μ΄μ²λΌ λ©λͺ¨λ¦¬ λ΄μμ λ°μ΄ν°κ° μμ°μ€λ¬μ΄ κ²½κ³λ₯Ό μ§μΌ μ λ ¬λμ΄μΌ νλ μ μ½μ μ λ ¬ μ μ½(alignment restriction)μ΄λΌκ³ νλ€.
Big Endian and Little Endian
μΆν μΆκ° μμ
λ°μ΄νΈ μ£Όμμ μ¬μ©μ λ°°μ΄μ μΈλ±μ€μλ μν₯μ λ―ΈμΉλ€.
μμ μ½λμμ λ°μ΄νΈ μ£Όμλ₯Ό μ λλ‘ κ΅¬νλ €λ©΄ μλ μ£Όμ * 4λ₯Ό ν΄μΌνλ€.
Hardware / Software Interface 2
Constants
νλ‘κ·Έλ¨μ μ°μ°μμ μμλ₯Ό μ¬μ©νλ κ²½μ°λ λ§μ΄ μμ κ²μ΄λ€.
μ΄μ κΉμ§ λ°°μ΄ λͺ
λ Ήμ΄λ§μΌλ‘ μμλ₯Ό μ¬μ©νλ €λ©΄ λ©λͺ¨λ¦¬μμ μμλ₯Ό μ½μ΄μμΌ νλ€.
μμλ νλ‘κ·Έλ¨μ΄ μ μ¬λ λ λ©λͺ¨λ¦¬μ λ£μ΄μ§λ€.
lw $t0, AddrConstant4($s1) #$t0 = constant4
add $s3, $s3, $t0 #$s3 = $s3 + $t0 ($t0 == 4)
Assembly
볡μ¬
μ¬κΈ°μ $s1 + AddrConstant4λ μμ 4κ° μ μ₯λ λ©λͺ¨λ¦¬ μ£ΌμλΌκ³ κ°μ νλ€.
μ΄λ κ² μ¬μ©νλ κ²λ κ°λ₯μ νκ² μ§λ§, λ©λͺ¨λ¦¬μμ λ μ§μ€ν°λ‘ κ°μ 볡μ¬νλ κ²μ μκ°λ³΄λ€ μ½μ€νΈκ° λΉμΌ νλμ΄λ€.
λ°λΌμ μ μ¬ λͺ
λ Ήμ μ¬μ©νμ§ μμΌλ €λ©΄, νΌμ°μ°μκ° μμμΈ μ°μ μ°μ°μ μλ‘ λ§λλ λ°©λ²μ΄ μλ€.
μ΄ μμλ₯Ό μμΉ(immediate) νΌμ°μ°μλΌκ³ νλ€.
addi $s3, $s3,4 #$s3 = $s3 + 4
Assembly
볡μ¬
λ©λͺ¨λ¦¬μμ μμλ₯Ό κ°μ Έμ€λ κ² λ³΄λ€ ν¨μ¬ λΉ¨λΌμ§κ³ μλμ§λ₯Ό λ μλͺ¨νλ€.
μμ μ€ 0μ μ€μν μν μ νλ€. λͺ
λ Ήμ΄μ μ¬λ¬κ°μ§ λ³ν κΈ°μΆμ μ 곡ν μ μλ€.
볡μ¬(move)μ°μ°μ νΌμ°μ°μ μ€ νλκ° 0μΈ addλͺ
λ Ήμ΄λ€.
λ°λΌμ MIPSμμλ λ μ§μ€ν° $zeroλ₯Ό κ°μΌλ‘ λ¬Άλλ‘ νλ‘κ° κ΅¬νλμ΄μλ€.
Signed and Unsigned
μλ΅ν΄λ λ λ―?
Next chapter