minhui study

week 2(2) - 명령어 동작 과정 본문

컴퓨터 구조/Swing study

week 2(2) - 명령어 동작 과정

minhui 2020. 4. 13. 22:52

[ 컴퓨터 프로그래밍 언어 ]

 

출처 : https://m.blog.naver.com/PostView.nhn?blogId=tipsware&logNo=221041215416&proxyReferer=https:%2F%2Fwww.google.com%2F

- 상위 프로그래밍 언어 ( 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

사진 출처 : https://m.blog.naver.com/PostView.nhn?blogId=tipsware&logNo=221041215416&proxyReferer=https:%2F%2Fwww.google.com%2F

 

명령어 동작 과정 문제.pdf
0.16MB
명령어 동작 과정 답.pdf
0.10MB

Comments