* a program = a sequence of instructions
명령어들은 순서대로 실행된다. (분기 명령어 제외)
** 분기 명령어 (branch instructions) 란?
-> 프로그램의 control flow를 바꾸는 명령어이다. 반복문, 조건문 등에서 필요하다.
*** Label 이란?
-> 어셈블리어에서 명령어 주소의 별명
**** PC 란?
- PC (program counter) : 레지스터로, 현재 실행 중인 명령어의 주소가 저장된다.
메모리 주소가 4씩 증가하므로, PC 또한 다음 명령어가 실행될 때마다 4씩 증가한다.
branch 명령어는 PC의 값을 강제로 다른 값으로 바꿔준다.
- j Exit이 없으면 다음 명령어인 Else를 실행하게 돼서 의도대로 흘러가지 않게 됨
-
4를 곱한다는 것은 맨 끝 두 자리를 0으로 채워주는 것
-
앞자리는 sign extension 해 줌
-
PC (현재 수행 중인 명령어 주소) 를 더하는 이유는 BTA가 현재 위치와 가깝고, 상대적이기 때문에 현재 수행하는 명령어 주소에 offset을 더하는 것이다.
-
뒤로 branch 할 수도 있고, 앞으로 할 수도 있어서 imm 필드가 음수와 양수 모두 가능한 것이다.