Computer Security

#6 컴퓨터구조와 명령어 본문

컴퓨터구조&어셈블리어

#6 컴퓨터구조와 명령어

쿠리 Kuri 2022. 5. 16. 18:30

명령어의 구성 요소

1.연산코드와 피연산자

-연산코드(Operation Code,Opcode): 1.기계(CPU)가 수행할 동작을 나타내는 코드이다.

                                                 2.명령어에서 '어떤 연산'인지를 나타내는 부분이다.

-피연산자(Operand):연산(동작)의 대상. 주로 레지스터나 메모리상의 데이터가 그 대상이 된다.

 

2.명령어 코드의 형식

-명령어 코드의 비트열은 필드라고 불리는 몇 개의 그룹으로 나누어진다.

명령어 필드에 들어가는 요소들은 다음과 같다.

→수행해야 할 연산을 명시한 연산 코드(Opcode)필드

→메모리의 주소나 레지스터, 즉 피연산자의 주소를 지정하는 주소(Address)필드

→피연산자의 유효 주소(effective address)가 결정되는 방법을 나타내는 모드 필드

 

-CPU설계에 따라 피연산자의 주소의 개수는 달라질 수 있고, 피연산자 주소를 나타내는 다양한 방식들을 제공한다.

 피연산자 주소를 나타내는 방식을 두고 주소지정방식(Addressing mode)이라 한다.

 

 

2.어셈블리어 코드의 형식

-어셈블리어의 각 줄은 다음과 같이 필드라 불리는 세 개의 부분으로 구성된다.

   1. 레이블 필드: 심볼 주소를 나타내거나 빈칸이 될 수도 있다.

   2. 명령어 필드: 기계 명령어나 의사(pseudo) 명령어를 기술

   3. 주석(comment): 명령어에 대한 주석을 기술한다.

 

코드형식

Label   |  instruction  |  comment

 

 

 

3.의사 명령어(Pseudo Instruction)

-어셈블러 디렉티브(Assembler Directive)라고도 함

-기계 명령어가 아니라 번역 과정에서 발생되는 어떤 상황에 관한 정보를 어셈블러에게 알려주는 명령어

-의사 명령어는 어셈블리어 코드와 달리 기계 코드로 번역되지는 않는다.

-어셈블러 구현체에 종속적

 

 

4.주소지정방식(Addressing mode)

-CPU 설계에 따라 연산의 대상이 되는 피연산자(레지스터나 메모리,I/O 장치 등)를 지정하기 위한 다양한 

 어드레싱 기법 제공

   -포인터, 카운터 인덱싱, 프로그램 재배치(relocation) 등의 편의를 프로그래머에게 제공함으로써 융통성 제공

   -명령어의 주소 필드의 비트 수를 줄인다.

유효주소(Effective Address): 주소지정방식에 의해 결정되는 피연산자의 실제 주소

 

피연산자의 주소를 표현하는 방법들

 

묵시 주소지정방식(Implied addressing mode)

-피연산자가 묵시적으로 명령어의 정의에 따라 정해져있다.

ex)

int ; X레지스터의 값을 1증가

dey ; Y레지스터의 값을 1감소

rts ; 서브루틴을 종료

sei ; 인터럽트 비활성(interrupt disable) 비트를 1로 세트한다.

clc ; 캐리(Carry) 비트를 0으로 클리어한다.

php ; PusH Processor status register : 상태 레지스터를 스택에 푸시한다.

 

 

레지스터 주소지정방식(Register addressing mode)

 

-CPU 레지스터를 피연산자로 지정하는 방식

ex)

    add  $t2, $t0, $t1     t0와 t1을 더해서 t2에 저장

    and  $t3, $t2, $s0   

    or    $t4, $t3, $s1

 

 

즉시 주소지정방식(Immediate addressing mode)

-피연산자 그 자체가 명령어 주소 필드에 들어가는 방식

ex)

    lda  #$10  ; 누산기 레지스터 A에 0x10 적재

    adc  #$20  ; 누산기에 0x20 덧셈

 

 

직접주소와 간접주소

직접주소(direct address): 주소 필드에 들어가는 주소가 피연산자의 유효주소인 경우를 직접주소라한다.

                                 직접 주소지정방식은 직접주소를 이용하여 피연산자를 지정한다.

 

간접주소(indirect address):주소 필드에는 피연산자의 유효주소 대신 피연산자의 유효주소가 저장되어 있는 메모리 주소가 들어간다.   피연산자의 간접 참조를 위해 별도의 사이클이 필요하다.

 

레지스터 간접 주소지정방식:  주소 필드에서 지정한 레지스터는 피연산자의 유효주소를 저장하고 있다.

간접 주소지정방식: 주소 필드에는 피연산자의 유효주소를 저장하고 있는 메모리 주소가 들어간다.

 

 

 

인덱스와 베이스 주소

-피연산자의 유효주소는 베이스(기준) 주소에 인덱스 값을 더해서 구한다.

 Effective Address = Base Adress + Index

-흔히 데이터 배열에 접근할 때 사용하는 방법. 배열의 시작 주소를 베이스 주소로 사용하고 시작주소로부터 떨어진 인덱스 값을 인덱스 레지스터를 통해 지정하는 방식

->명령어의 주소 필드에는 베이스 주소가 들어간다.

 

-인덱스 주소지정방식과 달리 배열의 시작주소를 베이스 레지스터에 저장하고 그로부터 떨어진 인덱스 값을 명시하는 방식을 베이스 레지스터 주소지정방식(base register addressing mode)라 한다.

->명령어의 주소필드에는 인덱스 값이 들어간다.

 

 

상대 주소지정방식(Relative addressing mode)

-프로그램 카운터가 명령어의 주소  필드와 합해져서 유효 주소가 결정된다.

-주소 필드에 들어가는 값은 PC로부터 상대적으로 떨어진 오프셋이다.

-근거리 분기(점프) 명령어에서 주로 사용된다.

-주소 필드의 비트 수를 절약할 수 있다는 장점이 있다.

 

 

명령어 집합에 따른 컴퓨터 분류

 

CISC와 RISC


CISC(Complex Instruction Set Computer) 구조의 특징

-많은 수의 명령어

-다양한 주소지정방식

-가변 길이 명령어 형식

-메모리의 피연산자를 처리하는 명령어

 

RISC(Reduced Instruction Set Computer) 구조의 특징

-상대적으로 적은 수의 명령어

-상대적으로 적은 수의 주소지정방식

-메모리 참조는 load와 store 명령어만으로 제한된다.

-모든 연산은 CPU 레지스터 안에서 수행된다.

-고정 길이 명령어 형식

-단일 사이클의 명령어 실행(평균적인 값)

 

 

'컴퓨터구조&어셈블리어' 카테고리의 다른 글

#8 x86 구조 (레지스터 구조)  (0) 2022.05.20
#7 x86의 구조 (역사)  (0) 2022.05.19
#5 컴퓨터 구조2  (0) 2022.05.15
#4 컴퓨터 구조1  (0) 2022.05.14
#3 어셈블리어 스택  (0) 2022.05.13
Comments