Search
πŸ’Ώ

Lecture 04 : 2.1~2.4

course
last review
2023/04/10
mastery
rookie
progress
pending
date
2023/03/22
4 more properties
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