Two Key Principles of Machine Design (컴퓨터 설계의 두가지 핵심 원칙)
- 명령어는 숫자로 표현이 되므로 데이터와 구분할 수 없다.
- 데이터와 표현 방법이 같으므로, 표현 원칙이 달라야 구분할 수 있다.
- 명령어들의 집합을 프로그램이라고 하고, 프로그램도 데이터처럼 메모리에 저장되어 읽고 쓰여진다.
- 이를 Stored-program concept 라고 한다.
- 프로그램들은 바이너리 숫자 파일로써 저장이 된다 -> 바이너리 호환이 된다.
- 이를 Stored-program concept 라고 한다.
MIPS Logical Operations Overview (MIPS 논리 연산)
산술명령어들은 레지스터에 들어있는 값 전체를 하나의 부호가 있거나 없는 정수로 취급하였다.
하지만, 레지스터에 들어있는 32bit의 값을 개별적으로 처리하는 방법이 필요하다.
MIPS Shift Operations
R 포멧, 산술 연산에서는 채워지지 않았던 저 부분이 채워져있다. (빨간 동그라미)
MIPS Logical Operations
위의 표에서 봤던 것들 중 and, or, nor 과 i format 이 포함된 andi, ori 등등 여러가지가 가능할 것이다.
MIPS Instructions for Making Decisions (MIPS 의사 결정)
일반적인 컴퓨팅 작업을 수행하기위해서는 대략 두가지가 필요하다.
- 어떤 조건을 만족하는지에 따라 의사결정이 달라짐
- 반복하여 실행
의사 결정 명령어의 역할
- 조건 검사 결과에 따라 프로그램의 제어 흐름을 바꾼다.
- 다음에 실행될 명령어의 순서를 바꾼다.
두가지 타입의 의사결정 명령어
- Conditional (branch) 조건분기
- Unconditional (jump) 점프
조건분기
bne $t0, $t1, label //$t0, $t1을 비교하여 같지 않다면 분기해라
bnq $t0, $t1, label //$t0, $t1을 비교하여 같다면 분기해라
MIPS Control Flow Instructions (조건분기)
I format 에는 어디로 갈것인가 에 대한 정보가 들어있다.
맨 뒤에 있는 offset값은 분기할 주소값(어디로 갈 것인가?)을 나타낸다.
Other Control Flow Instructions (점프)
J Format이 해당되고, 하위 26bit를 이용해서 program count 값을 바꾸어 무조건 jump한다.
Instructions for Accessing Procedures
프로시저 호출 명령어
jal ProcedureAddress #jump and link
실행을 하고 난 후, 돌아와서 재개를 해야하므로, 그때 필요한 값 (return address) 도 저장이 되어야한다.
MIPS assembly language (명령어 카테고리별 예)
프로세서가 기본적으로 지원하는 명령어
1.arithmetic, logical - 산술 논리 연산
2.Data transfer - 데이터 전달 명령어, 프로세서와 메모리 사이에 버스를 통해 데이터 전달
3.Decisions making (의사결정을 위한 명령어)
- conditional branch (조건분기)
- unconditional jump (무조건 점프)
1과 0으로 표현하기위한 명령어 format / 32bit 동일한 길이로써 3가지 format
Addressing Modes (주소 지정 방식)
연산에 필요한 값(operand)들을 나타내는 정보/방법
메모리에 접근하기위해서는 메모리 주소값을 계산하는 방법이 필요하다. 그리고 그 내용은 명령어 32bit 길이 내에 하나의 필드 또는 두개 이상의 필드가 합한 형태로 표현이 된다.
명령어 형태의 register addressing 은 레지스터에 들어있는 값들에 대해서 연산한다. 그리고 그 결과를 destination register에 저장한다.
메모리에 접근할 때 주소값을 계산해야하는데, 하위에 있는 offset값(16bit) 을 32bit로 맞춰주고 base register ( 32bit 값 )에 더한다.
그럼 메모리 내에 접근할 주소값이 나온다.
실제로 연산에 필요한 한 부분(operand)를 명령어 32bit길이상에 갖고있는것.
그렇다면 이 값을 연산에 사용하기 위해서 메모리에 접근 할 필요가 없어진다.
메모리에 접근하는데는 상대적으로 시간이 많이 걸리기때문에 전체적으로 프로그램 실행시간이 줄어든다
program counter값을 기준으로 해서 상대적으로 addressing을 하는것이다.
특정 조건이 만족되면 분기를 해야하는데 어디로 분기를 할 것인가? ->
program counter가 가리키는 32bit 에다 명령어 상에 포함되어있는 offset값(길이가 다르므로 맞춰주어야한다)을 더한다.
결과값이 분기 조건이 만족된 경우, 목적지 주소가 결정이 된다. 그럼 그곳에 있는것이 명령어가 될 것이다.
jump를 통해 destination instruction을 결정하게된다.
MIPS Organization So Far
프로그램을 구성하는 명령어들이 어떻게 만들어지고, 그들이 실행하는것과 실제로 메모리 레지스터들이 어떻게 연결되는지에 대해 나타낸 그림
프로그램이 실행되는곳 - processor
컴파일 된 프로그램이 데이터와 함께 저장되어있는곳 -memory
프로그램이 실행되기 위해서는 메모리로부터 프로세서로 들어와야만 한다.
그때, 실행하는 주체는 ALU 이다.
e.g. 더하기 동작
- PC(program counter)가 가르키는 위치로부터 명령어를 가져온다.
- 메모리에서 프로세서로 가져온 명령어를 decode(해독)해보니, b, c 를 더해서 a에 넣으라는 더하기 동작을 의미한다.
- 그때, 명령어는 32bit의 binary값으로 되어있었고 그 값을 instruction format에 따라 decode(해독)해보니...
- 32개의 레지스터중 2개의 값을 읽어서 ALU에서 더하기를 하고, 그 결과를 dst addr에다가 저장을 하라는 해석이 된다.
프로세스와 메모리를 연결해주는것들을 버스 라고 한다.
결국 메모리에 접근하려면 주소가 전달이 되어야 할 것이고, 쓰기를 할것인지, 읽기를 할 것인지전달이 된 후 각각 32bit만큼 읽고 쓰게될것이다.
그때 그 주소는 32bit 크기에 대해서 4의 배수의 간격으로 word주소가 결정이 될 것이다.
참고) The C Code Translation Hierarchy
참고) Compiler Benefits
사용하는 gcc 옵션에 따라 성능이 달라진다.
참고) The Java Code Translation Hierarchy
'ETC > CS' 카테고리의 다른 글
[기술면접] 1. CS - 개발상식 (0) | 2021.11.26 |
---|---|
[컴퓨터구조] ch.2-3 MIPS (0) | 2020.10.25 |
[컴퓨터구조] ch.2-2 산술 동작 (0) | 2020.10.24 |
[컴퓨터구조] Ch.2-1 컴퓨터 언어 - Language of the Compute (0) | 2020.10.24 |
[컴퓨터구조] Ch.1 컴퓨터 추상화와 기술 - Computer Abstractions and Technology (0) | 2020.10.21 |
댓글