엔지니어가 되고 싶은 공돌이
06. Procedure and Jumping 본문
6. 1. Procedure
- Procedure: 제공되는 Parameter(인수)에 따라서 특정 작업을 수행하는 서브루틴.
- Procedure의 실행 과정: Procedure가 접근할 수 있는 곳에 Parameter를 넣고,
Procedure로 Control을 넘긴 뒤, Procedure는 Memory 자원을 획득합니다.
이후 Procedure는 작업을 수행하고, 결과 값을 호출한 프로그램이 접근할 수 있는 장소에 저장하고,
Procedure는 Control을 반납합니다.
- $a0 - $a3: 전달한 인수를 가지고 있는 Parameter Register.
- $v0 - $v1: Return Value Register.
- $ra: 호출한 곳으로 되돌아가기 위한 복귀 주소를 가지고 있는 Register.
- jal Address : 지정된 주소로 Jump하면서, 동시에 다음 명령어의 주소를 $ra에 저장합니다.
- jr $ra : jr 명령어는 레지스터에 저장된 주소로 Unconditional Jump하라는 명령어입니다.
- $t는 프로시저 호출 시, 피 호출 프로그램이 값을 보존해주지 않는 임시 레지스터이고,
$s는 프로시저 호출전과 호출 후의 값이 같게 유지되어야 하는 레지스터입니다.
보존되어야 할 레지스터 값들은 Stack에 저장합니다.
$s외에도 $sp, $ra Register 값들도 보존되어야 합니다. $a, $v는 보존되지 않습니다.
- Procedure Frame: 프로시저의 저장된 레지스터와 지역변수를 가지고 있는 Stack 영역.
- Frame Pointer = Base Pointer: Procedure Frame의 첫 번째 워드를 가리키는 Pointer.
Frame Pointer로 Procedure가 다른 Procedure,
호출한 프로그램의 Stack에 특별한 권한없이 접근하지 못하도록 막습니다.
Register Name | Register Number | Usage |
$zero | 0 | The Constant Value 0 |
$at | 1 | Assembly Only |
$v0 - $v1 | 2 - 3 | Values for Results |
$a0 - $a3 | 4 - 7 | Arguments |
$t0 - $t7 | 8 - 15 | Temporaries |
$s0 - $s7 | 16 - 23 | Saved |
$t8 - $t9 | 24 - 25 | More Temporaries |
$k0 -$k1 | 26 - 27 | OS Only |
$gp | 28 | Global Pointer |
$sp | 29 | Stack Pointer |
$fp | 30 | Frame Pointer |
$ra | 31 | Return Address |
6. 2. Jumping
- Register에 32bit 상수를 채우고 싶으면 lui 명령어를 이용해 상위 16bit를 채우고,
ori 명령어를 이용해 하위 16bit를 채우면 됩니다.
ex) lui $s1, 50
ori $s1, $s1, 100
Compiler, Assembler는 큰 숫자를 직접 다룰 수 없기 때문에 몇 조각으로 나눈 후
Register에서 다시 재조립해야 합니다.
[J Type]
op | address |
- op는 6bit, address는 26bit.
- Jump할 주소를 계산하는 방법은 다양합니다.
Operand의 Constant, Register 값을 주소로 사용할 수 있고,
Constant + Register를 계산해서 주소로 사용할 수 도 있습니다.
또는 PC 값을 이용해서 PC값과 명령어내의 상수의 합을 더해서 주소로 사용할 수 도 있습니다.
- ex) j 100
2 | 100 |
- 100은 word 크기이므로 실제로는 메모리주소 400에 접근하게 됩니다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
08. Arithmetic Operations (0) | 2025.04.29 |
---|---|
07. Compiler (0) | 2025.04.25 |
05. Logical Operation and Branch (0) | 2025.04.24 |
04. Instruction Format (0) | 2025.04.23 |
03. Instructions - Load and Store (0) | 2025.04.22 |