minhui study
week 2(2) - 명령어 동작 과정 본문
[ 컴퓨터 프로그래밍 언어 ]
- 상위 프로그래밍 언어 ( high level programming language )
: 인간의 언어 체계와 유사하고, 프로그램을 작성하기가 용이하다.
: 컴파일러나 인터프리터에 의해 기계어로 번역되어 실행된다.
ex) FORTRAN, COBOL, C, PASCAL ...
- 하위 프로그래밍 언어 ( low level programming language )
: 컴퓨터 내부에서 바로 처리 가능한 프로그래밍 언어
ex) 기계어, 어셈블리어
구분 | 고급 언어 | 저급 언어 |
호환성 | 좋다 | 나쁘다 |
용이성 | 쉽다 | 어렵다 |
실행속도 | 상대적으로 느리다 | 빠르다 |
-> 기계어 (Machine Language)
- 컴퓨터가 사용하는 언어로 CPU가 명령을 처리할 때 사용하는 언어이고 다음과 같이 이진숫자로 구성되어 있다.
- CPU는 기계 명령어를 해독하여 동작을 수행하고 CPU에 따라 고유의 기계어 명령 형식이 존재한다.
-> 어셈블리 언어 (Assembly)
- 기계어를 사람이 사용하는 언어에 가깝게 문자로 기호화한 것으로 CPU에 따라 어셈블리 언어의 형식이 다르다.
- 어셈블리어를 기계어로 번역하는 프로그램이 제공되는데 이 프로그램을 '어셈블러' 라고 한다.
[ 어셈블리 명령어 ]
- 어셈블리 명령어 형식
레이블 부: | 연산부 | 오퍼랜드 부 | ;주석문 부 |
(1) 레이블 부 (Label)
- JUMP, LOOP와 같은 순환이나 반복명령어에서, 중앙처리장치의 실행을 해당 레이블로 이동시킬 때 사용함
- 레이블을 생성할 때는 8문자 이내의 영문자/숫자를 사용함
이름 필드로 사용할 수 없는 예 | |
TOP LOOP | 빈칸이 포함 됨 |
2position | 숫자가 첫 번째 문자로 사용됨 |
ABC99.1 | .은 첫 번째 문자로 사용되어야 함 |
CAP*MINI | 허용되지 않는 특수 문자 *이 사용됨 |
(2) 연산부 ( Operation)
- 프로세서에서 실행되는 기호화된 명령어나 어셈블러 지시자 등의 의사 명령어를 나타낸다.
- 의사 명령어는 어셈블러에게 무엇인가를 지시하거나 프로세서에서 실행되는 명령어들로 바꿔준다.
(3) 오퍼랜드 부 / 피연산자 부 (Operand)
- 연산자에 의해 사용되는 데이터를 지정하는 필도로 프로세서 명령어를 실행하기 위해 필요한 레지스터 이름, 정수, 라벨, 연산자, 주소 등으로 구성되어 있다.
- 명령어에 따라 필요한 데이터의 수가 다르기 때문에 8086 프로세서는 0개, 1개, 2개까지의 오퍼랜드를 사용 가능
- 오퍼랜드 구성은 CPU 내부 블록과 주변의 인터페이스 설계에 따라 달라질 수 있다.
오퍼랜드의 개수가 서로 다른 몇 개의 명령어 | |
RET | 호출한 프로시져 위치로 복귀하라는 명령어 |
DEC AB | AB 레지스터의 내용을 1 감소시키는 명령어 |
ADD AB , 10 | AB 레지스터의 내용에 10을 더하는 명령어 |
(4) 주석문 부 (Comment)
- 프로그램 작성을 위한 설명을 나타내는 곳으로 세미콜론(;)으로 시작하여 어셈블러는 세미콜론 다음의 내용을
무시한다.
[ 어셈블리 명령어 동작 ]
(어셈블리 프로그램 예제)
※ PC (Program Counter) : 프로그램 카운터
IR (Instruction Register) : 명령어 레지스터
ALU (Arithmetic Logic Unit) : 산술논리연산장치
AC (Accumulator) : 누산기
(1) 100 LOAD 250 // 1250
101 ADD 251 // 5251
102 STOR 251 // 2251
103 JUMP 170 // 8170
-> 프로그램 카운터에 있는 100번지 주소에서 1250 기계코드를 가져와 명령어 레지스터에 담는다.
-> 1250 = 1 + 250 : 250번지에 있는 0004를 꺼내와서 누산기에 옮겨담는다.
-> 프로그램 카우터는 다음 주소인 101번지를 담게 된다.
(2) 100 LOAD 250 // 1250
101 ADD 251 // 5251
102 STOR 251 // 2251
103 JUMP 170 // 8170
-> 프로그램 카운터에 있는 101번지 주소에서 5251 기계코드를 가져와 명령어 레지스터에 담는다.
-> 5251 = 5 + 251 : 251번지에 있는 0003를 꺼내와서 누산기에 있는 0004와 ALU에서 더한다.
-> 프로그램 카우터는 다음 주소인 102번지를 담게 된다.
(3) 100 LOAD 250 // 1250
101 ADD 251 // 5251
102 STOR 251 // 2251
103 JUMP 170 // 8170
-> 프로그램 카운터에 있는 102번지 주소에서 2251 기계코드를 가져와 명령어 레지스터에 담는다.
-> 2251 = 2 + 251 : 누산기에 저장되어 있는 0007을 251번지에 넣는다.
-> 프로그램 카우터는 다음 주소인 103번지를 담게 된다.
(4) 100 LOAD 250 // 1250
101 ADD 251 // 5251
102 STOR 251 // 2251
103 JUMP 170 // 8170
-> 프로그램 카운터에 있는 103번지 주소에서 8170 기계코드를 가져와 명령어 레지스터에 담는다.
-> 8170 = 8 + 170 : 170번지로 JUMP해야 하므로 프로그램 카운터에 170번지를 담는다.
[ 명령어의 집합 ]
- 명령어 집합(instruction set) : CPU가 수행할 동작을 정의하는 2진수 코드로 명령어들의 집합
-> 일반적으로 어셈블리 코드 형태로 표현됨
-> CPU의 사용 목적, 특성에 따라 결정됨
- 명령어 집합 설계를 위해 결정되어야 할 사항들
-> 연산 종류 : CPU가 수행할 연산들의 수와 종류 및 복잡도
-> 데이터 형태 : 연산을 수행할 데이터들의 형태, 데이터의 길이, 수의 표현 방식
-> 명령어 형식 : 명령어의 길이, 오퍼랜드 필드들의 수와 길이
-> 주소지정 방식 : 피연산자의 주소를 지정하는 방식
- 명령어 형식
- 명령어는 연산 코드와 오퍼랜드로 구성됨
-> 연산 코드 : 함수 연산 기능, 전달 기능, 제어 기능, 입출력 기능
-> 오퍼랜드 : 연산을 수행하는데 필요한 데이터 혹은 데이터의 주소
- 명령어를 표현하는 형식은 여러 개의 필드들로 구성됨
- 각 필드는 일련의 비트 패턴에 의해 표현됨
- 세 개의 필드들로 구성된 16비트 명령어
- 명령어가 수행하는 연산
-> 함수 연산 기능 : 산술 연산이나 논리 연산 수행
-> 전달 기능
: CPU와 주기억장치 사이, CPU 내의 레지스터 간의 정보교환과 적재, 저장기능을 수행
: 정확한 데이터 전송을 위해서 근원지 오퍼랜드와 목적지 오퍼랜드의 위치가 명시되어야 함
-> 제어 기능
: 프로그램의 수행흐름을 제어
: 분기, 서브루틴 호출 명령어 => 프로그램 내의 명령어의 실행 순서를 변경
-> 입출력 기능 : CPU와 외부 장치들 간의 데이터 이동 수행
- 분기 명령어
-> 명령어 내용에 따라서 무조건 오퍼랜드(다음에 실행할 명령어 주소 포함)의 주소로 이동하거나 조건 만족 시에만 이동
- 서브 루틴 호출 명령어
-> 호출(CALL) 명령어 : 현재 프로그램 카운터 내용을 스택에 저장하고 서브루틴의 시작 주소로 분기하는 명령어
-> 복귀(RET) 명령어 : CPU가 원래 실행하던 프로그램으로 되돌아가도록하는 명령어
< 출처 >
강의노트, 디지털논리와 컴퓨터 설계, Harris et al. (조영완 외 번역), 사이텍미디어, 2007, 컴퓨터 구조와 원리 (비주얼 컴퓨터 아키텍처), 신종홍 저, 한빛미디어, 2011
'컴퓨터 구조 > Swing study' 카테고리의 다른 글
week4 - 명령어 분류와 형식 (0) | 2020.05.26 |
---|---|
week3(2) - 메모리 구조와 레지스터 종류 (0) | 2020.05.20 |
week3(1) - 명령어를 효과적으로 실행하기 위한 기법 (0) | 2020.05.19 |
week 2(1) - 컴퓨터 정보의 표현 (0) | 2020.04.13 |
week 1 - 중앙처리장치(CPU) 구조 및 명령어 동작 과정 (0) | 2020.04.08 |