★컴퓨터 명령어 형식
★컴퓨터 시스템의 동작과정
1. 레지스터
1) 레지스터 종류
- 프로그램 카운터
- 명령어 레지스터
- 여러가지 레지스터 매우 많이 존재.
2) 레지스터 전송
- 3가지 전송 명령
: LOAD->주기억 장치에서 레지스터로 데이터를 '읽음'
STORE->레지스터에서 주기억 장치로 데이터를 '저장'
MOVE(MOV)->레지스터에서 레지스터로 데이터를 '이동'
-인텔 프로세서는 이 3가지 전송 명령을 MOVE(MOV)명령으로 모두 처리함
2. 컴퓨터 명령어
1) 명령어 형식
: 연산코드(opcode)와 오퍼랜드(operand, 피연산자)위치, 연산 결과의 저장 위치 등 여러 가지 정보로 구성
- 0주소 명령어 : 연산에 필요한 오퍼랜드 및 결과의 저장 장소가 묵시적으로 지정
opcode |
- 1주소 명령어 : 연산 대상이 되는 2개 중 하나만 표현, 나머지는 묵시적으로 지정
opcode | addr |
- 2주소 명령어
opcode | addr1 | addr2 |
- 3주소 명령어
opcode | addr1 | addr2 | addr3 |
※ 명령어 형식의 특징 한 눈에 보기
0주소 명령어 | 1주소 명령어 | 2주소 명령어 | 3주소 명령어 |
stack을 갖는 구조 - 데이터 기억 : push - 데이터 꺼내기 : pop |
누산기(AC)사용 | 연산에 필요한 두 오퍼랜드 중 하나가 결과 값 저장 | 오퍼랜드 2개와 결과 값의 저장 장소가 모두 다름 |
연산 결과는 누산기에 저장 | ADD R1, R2 : R1<-R1+R2 | 연산 후에도 입력 데이터 보존 | |
LOAD B : AC<-B (B를 AC에 저장) ADD C : AC <- AC+C (B와 C를 더해 AC에 저장) =>결과 : B+C |
프로그램이 짧아지지만, 명령어 해독 과정이 복잡함 | ||
ADD R1,R2,R3 : R1<-R2+R3 |
2) 명령어 종류
: 대체로 6개 그룹으로 나누지만 이전 모델과 호환성을 위해 추가된 특이한 명령어가 있거나, 여러 가지 이유로 명령어를 추가할 수 있다.
- 데이터 이동 명령 : 원본과 똑같은 새로운 객체를 만드는 '복사'를 의미함
+ 데이터 복사 이유
- 변수에 값을 할당하기 위해서
- 메모리와 레지스터 간에 데이터를 이동하여 프로그램 실행을 효율적으로 수행하기 위해서(LOAD,STORE,MOVE)
- 메모리 간 이동은 일반적으로 사용하지 않음
- 2항 연산 : 오퍼랜드(피연산자) 2개를 결합하여 결과를 생성한다.
+ AND 연산은 주로 워드에서 특정 비트를 추출하는 용도로 사용됨.
남기고 싶은 문자를 지정하고 AND연산을 통해 나머지 세 문자를 제거한 후, 오른쪽으로 시프트를 해줌
- 단항 연산 : 오퍼랜드와 결과가 각각 1개이다.
+ 시프트의 중요한 용도
ex) 0100->4 를 왼쪽으로 1비트 시프트한 경우 : 1000->8 (4의 2배)
오른쪽으로 1비트 시프트한 경우 : 0010->2 (4를 2로 나눈 결과)
+ 시프트는 특정 산술 연산의 속도를 높이는 데 사용
- 비교와 조건 분기 명령 : C언어에서 if문이라고 생각하자
+ 조건이 충족되면 특정 메모리 주소로 분기
+ 오버플로 비트 : 산술 연산의 결과 데이터가 표현 범위를 벗어났을 때 1로 설정
+ 캐리 비트 : 맨 왼쪽 비트에서 데이터가 넘칠 때 세트, 오버플로와 혼동 주의!!
- 프로시저 호출 명령 : 특정 작업을 수행하는 명령 그룹이며 프로그램 내 어디서든 호출 가능하다.
+ 어셈블리 '서브루틴', c언어에서 '함수', 자바에서 '메서드'
- 루프 제어 명령 : 명령 그룹을 정해진 횟수만큼 실해애야 하는 경우 사용한다.
3. 주소 지정 방식 : 오퍼랜드의 위치를 지정하는 것
1) 즉시 주소 지정
: 명령어 자체에 오퍼랜드를 포함하여 명령어가 인출될 때 오퍼랜드도 자동으로 인출하는 방법으로 주로 작은 값의 정수를 지정하는 데 사용
- MOVE R1 4 : 4를 R1에 즉시 저장
- 장점 : 오퍼랜드 인출을 위한 메모리 참조가 필요 없음
- 단점 : 상수만 가능하고 상수 값의 크기가 필드 크기로 제한
2) 직접 주소 지정
: 메모리에 위치한 오퍼랜드의 전체 주소를 지정함
- 명령어는 항상 정확히 동일한 메모리 위치에 액세스
- 값이 변할 수 있지만 위치는 변화 불가
- 컴파일할 때 알려진 주소의 전역 변수에 액세스하는 데만 사용 가능
3) 레지스터 주소 지정
: 1)즉시 주소 지정과 개념은 같고 위치가 메모리가 아닌 레지스터
- 가장 일반적인 주소 지정 방식
4) 레지스터 간접 주소 지정
: 직접 주소를 명령어에 포함하지 않으며, 포인터를 통해서 메모리의 주소를 레지스터에 저장한다. 즉 레지스터에서 참조를 해서 주기억장치로 간다.
- 가장 큰 장점은 전체 메모리 주소가 없어도 메모리를 참조할 수 있음
5) 변위 주소 지정
: 특정 레지스터에 저장된 주소에 변위를 더해 실제 오퍼랜드가 저장된 메모리 위치를 지정, 특정 레지스터가 무엇인지에 따라 여러 주소 지정 방식 가능
- 인덱스 주소 지정 : 레지스터에 일정한 변위를 더해 메모리 주소를 참조
- 상대 주소 지정, 베이스 주소 지정
6) 간접 주소 지정
: 메모리 참조가 두 번 이상 일어나는 경우 사용
- 데이터를 가져오는 데 시간이 많이 걸리며 프로그램 수행 시간이 길어짐
- 현재 간접 주소 지정을 지원하는 프로세스는 거의 없음
7) 묵시적 주소 지정
: 오퍼랜드의 소스나 목적지를 명시하지 않아도 암묵적으로 그 위치를 알 수 있는 방식
- PUSH R1 : 레지스터 R1의 값을 스택에 저장하라
- POP : 스택의 TOP에 있는 값을 누산기로 가져와라
- 누산기를 소스나 목적지로 사용하는 경우도 생략 가능
4. 컴퓨터 시스템의 동작--> 프로그램 실행
MOV 변수a 20 //상수 20을 변수a에 이동하여 저장 MOV 레지스터A 변수a //변수 a의 값을 레지스터 A에 이동하여 저장 ADD 레지스터A 1 //레지스터 A의 값과 1을 더한 결과를 레지스터 A에 저장 MOV 변수a 레지스터A //레지스터 A의 값을 변수 a에 이동하여 저장 |
'공부 > 컴퓨터구조' 카테고리의 다른 글
[10주차]제어장치(2), 기억장치 (0) | 2021.05.06 |
---|---|
[9주차]제어장치(2) (0) | 2021.05.01 |
[4주차]디지털 논리 회로-조합 논리 회로,집적 회로 /중앙 처리 장치~ (0) | 2021.04.03 |
[3주차]디지털 논리회로-불 대수 (0) | 2021.03.26 |
[1주차]컴퓨터 시스템의 구성 (0) | 2021.03.20 |