고급목차 - lsis.com2-2)MASTER-K 고급.pdf · 목 차 목 차 제1 장 기본 명령어의 개요 및 메모리의 구성──────────── 1 1.1 기본 명령어의
명령어의 구성
description
Transcript of 명령어의 구성
명령어의 구성
컴퓨터 명령어의 개요컴퓨터 명령어 형식주소지정방식명령어의 종류
명령어의 개요
• 컴퓨터의 논리적 구조의 이해– 어셈블리어 매뉴얼을 참조
• 하드웨어에 의해 실행되는 명령어에 대한 자세한 사항을 기록• 명령어의 2 진 코드와 기호화된 이름에 대한 정의를 기록
– 컴퓨터는 다양한 명령어와 명령어 형태를 가짐• 제어장치에서 명령어를 해석하고 실행하기 위한 제어신호를 제공
• 명령어– 컴퓨터가 어느 정보를 가지고 어떤 처리를 하는지를 나타내는
것으로 연산코드와 오퍼랜드로 구성
명령어의 구성
• 명령어의 구성– 연산코드와 오퍼랜드로 구성
• OP code : 처리해야 할 연산의 종류• Operand( 피연산자 ) : 처리할 정보나 처리된 정보
• 명령어 형식– 명령어를 구성하는 필드의 수와 배치방식 및 각 필드의 비트 수 – 필드라는 비트그룹으로 나뉨
• 연산코드 필드 : 수행할 연산을 위한 명령어를 나타냄• 오퍼랜드 필드 : 연산코드에서 결정된 명령을 수행할 대상이 되는
데이터 또는 데이터가 저장된 주소를 나타냄
연산코드 (OP code) 오퍼랜드 (Operand)
명령어의 기능
• 함수연산 기능– 데이터 처리 명령어가 산술과 논리 연산을 수행
• 전달기능– 데이터 전송 명령어가 레지스터 사이의 정보
전달이나 중앙처리 장치와 주기억 장치 사이의 정보 이동을 수행
• 제어기능– 프로그램 제어 명령어가 명령어의 수행 순서를
제어
컴퓨터 명령어 형식
• 명령어 set– 컴퓨터에서 사용할 수 있는 명령어의 집합– 컴퓨터의 구조적 정보를 나타내는 가장 중요한 정보– 컴퓨터 계열 (family) 에 속하는 컴퓨터들은 컴퓨터
자체는 달라도 명령어 set 은 동일하나 계열이 다르면 다른 명령어 set 을 가짐
• 윈도우 계열 Vs 유닉스 계열 Vs 매킨토시 계열
기억 장소에 따른 명령어 형식
• 오퍼랜드를 기억시켜 놓는 장소에 따른 명령어 형식의 분류– 누산기를 이용한 명령어 형식– 다중 레지스터를 이용한 명령어 형식– 스택 구조를 이용한 명령어 형식
기억 장소에 따른 명령어 형식 - 누산기
• 누산기를 이용한 명령어 형식 (1 주소 명령어 )– 함수 연산 기능의 명령어를 수행할 때 오퍼랜드
중의 하나가 누산기에 기억되도록 하는 컴퓨터 구조– 중앙처리장치 내에 있는 유일한 데이터 레지스터
• 오퍼랜드를 기억시키는 레지스터 ( 누산기 )
– 하나의 기억 장치 주소 필드를 사용• ADD X AC AC + M[X]• 누산기의 내용 + X 번지 내용 누산기에 저장
특수 레지스터(PC, MAR, MBR)
산술 / 논리연산장치(ALU)
누산기(AC)
입력버스
출력버스
기억 장소에 따른 명령어 형식 - 다중레지스터
• 다중레지스터를 이용한 명령어 형식 (2-3 주소 )– 중앙처리장치 내에 여러 개의 레지스터
• 세 개의 레지스터가 필요– 예
• ADD R1, R2, R3 R3 R1 + R2• ADD R1, R2 R2 R1 + R2• MOVE R1, R2 R2 R1
레지스터 set산술 / 논리연산장치
(ALU)
입력버스
출력버스
기억 장소에 따른 명령어 형식 – 스택구조
• 스택 구조를 이용한 명령어 형식 (0 주소 )– 연산에 필요한 오퍼랜드와 연산의 결과를 스택에
기억시키는 구조– 스택 (Stack : LIFO)
• 가장 마지막에 저장된 데이터를 가장 먼저 얻는 후입선출의 특성을 가지는 데이터 구조
– 명령어 형식은 연산코드만 표시• ADD 주소 필드가 필요 없음• Push X TOS M[X] • POP X M[X] TOS
산술 / 논리연산장치
스택
0
1
2
3
4
5
스택포인터
오퍼랜드 수에 따른 명령어 형식 -3 주소
• 3- 주소 명령어 (three-address instruction) 형식– 오퍼랜드의 수가 3 개인 명령어 형식– 주소필드는 처리장치 레지스터 혹은 기억장치 레지스터
• ADD A, B, R1 R1 M[A] + M[B]
– 장점• 산술식을 프로그램하는 데 있어서 프로그램의 길이가 짧아짐
– 단점• 3 주소 명령어를 2 진 코드화 했을 때 세 개의 오퍼랜드를
나타내기 위한 비트 수가 다른 주소 명령어 형식보다 많이 필요
연산코드 오퍼랜드 1 오퍼랜드 2 오퍼랜드 3
오퍼랜드 수에 따른 명령어 형식 -2 주소
• 2- 주소 명령어 형식– 오퍼랜드의 수가 2 개인 명령어 형식– 상업용 컴퓨터에서 가장 많이 사용– 주소필드는 처리장치 레지스터 혹은 기억장치 레지스터
• MOVE A, R1 R1 M[A]• ADD B, R1 R1 R1 + M[B]
– 장점• 3 주소 명령어에 비해 명령어의 길이가 짧아짐
– 단점• 같은 내용을 수행하기 위한 명령어의 수가 증가
– 3 주소 (1 개의 명령어 ) Vs 2 주소 (2 개의 명령어 )
ADD A, B, R1
오퍼랜드 수에 따른 명령어 형식 -1 주소
• 1- 주소 명령어 형식– 오퍼랜드의 수가 1 개인 명령어 형식– 오퍼랜드를 가져오거나 연산결과를 저장하기 위한
임시적인 장소로 누산기를 사용• LOAD A AC M[A]• ADD B AC AC+M[B]• STORE X M[X] AC
– 장점• 3 주소 명령어에 비해 명령어의 길이가 짧아짐
– 단점• 같은 내용을 수행하기 위한 명령어의 수가 증가
– 3 주소 (1 개의 명령어 ) Vs 1 주소 (3 개의 명령어 )
ADD A, B, X
R1
오퍼랜드 수에 따른 명령어 형식 -0 주소
• 0- 주소 명령어 형식– 기억장치 스택을 사용하며 주소 필드는 사용하지 않음
• TOS : 스택의 최상위• TOS-1 : 최상위의 바로 아래 항목
– 산술 연산의 수행• TOS-1 의 오퍼랜드를 가져와 연산을 수행한 후에 결과를 TOS 에
저장• 레지스터와 기억장치 주소를 사용하지 않음• PUSH A TOS M[A]• PUSH B TOS M[B]• ADD TOS TOS+TOS-1
• POP X M[X] TOS– 명령어의 길이가 짧아 기억공간을 적게 차지하나 많은
양의 정보가 스택과 주기억장치를 이동하므로 비효율적
ADD A, B, X
오퍼랜드 수에 따른 장단점
• 오퍼랜드 수가 많아질수록– 명령어가 복잡
• 레지스터의 수가 많아져 연산속도가 빨라짐• 프로그램이 짧아져 프로그램당 명령어 수가 감소
• 오퍼랜드 수가 적어질수록– 명령어가 간단
• 실행속도 증가• 프로그램 길이 증가
주소 지정 방식
• 주소지정방식– 프로그램 수행시 오퍼랜드의 지정 방법을 결정– 오퍼랜드를 실제 참조하기 전에 명령어의 오퍼랜드를
변경하거나 해석하는 규칙을 지정하는 형식 • 유효 주소
– 규칙의 적용에 의해 만들어진 오퍼랜드 주소– 주로 주소 필드의 값이 바로 오퍼랜드의 주소가 됨– 계산해야 할 때도 있음
• 별도의 연산필드를 가진 명령어 형식
연산코드 주소 혹은 오퍼랜드방식
– 연산코드 : 수행할 연산의 종류를 지정– 연산방식 : 연산에 필요한 오퍼랜드의 주소를 알아내는데 사용– 주소 필드 : 존재하면 기억 장치나 레지스터의 주소를 지정
의미 주소 지정 (implied mode)
• 주소필드를 필요로 하지 않는 방식– 연산코드에 지정된 묵시적 의미의 오퍼랜드를 지정
• 스택에서 ADD 와 같은 명령어는 스택의 TOS 항목과 그 아래 항목을 더하여 스택의 TOS 저장하는 명령어로서 오퍼랜드가 스택의 TOS 에 있다는 것을 묵시적으로 가정
• MUL X AC AC X M[X]– X 가 곱해지는 대상과 저장되는 위치가 모두 AC 인 것으로
묵시적 지정이 됨
• 장점– 오퍼랜드가 생략되므로 명령어의 길이가 짧아짐
• 단점– 명령어의 종류가 제한됨
즉치 주소 지정 (immediate mode)
• 오퍼랜드를 명령어 자체 내에 지정 – 오퍼랜드에 저장된 내용이 명령어에서 사용될 실제 데이터– 레지스터나 변수의 값을 초기화하는데 유용
• LDI 100, R1 R1 100– 레지스터 R1 에 데이터 100 을 초기화
• 장점– 오퍼랜드가 데이터이므로 기억장치 접근이 필요 없음
• 단점– 데이터의 크기가 오퍼랜드의 비트 수에 의해 제한
직접 주소 지정 (direct-addressing mode)
• 명령어의 주소필드에 직접 오퍼랜드의 주소를 저장시키는 방식 – 오퍼랜드에 저장된 내용이 가리키는 주소로 가야 실제
데이터• AC M[ADRS]• ADRS 의 값이 가지는 주소로 가서 실제 데이터를 가져다 AC
에 저장• 장점
– 기억장치를 한번만 접근• 단점
– 오퍼랜드의 길이에 의해 접근할 수 있는 기억장치의 주소공간에 한계가 있음
간접 주소 지정 (indirect-addressing mode)
• 명령어의 주소필드에 유효 주소가 저장되어 있는 기억장치의 주소를 기억 – 오퍼랜드가 가리키는 주소로 가서 다시 그 값이 가리키는 주소로
가야 실제 데이터• AC M[M[ADRS]] M[ADRS]• ADRS 의 값이 가지는 주소에서 다시 그 값을 주소로 하는 실제
데이터를 가져다 AC 에 저장• 장점
– 기억장치의 주소 공간이 CPU 가 한번에 접근할 수 있는 단어의 길이에 의해 결정
• 단점– 두 번의 기억장치 접근이 필요– 주소지정 방식을 나타내는 방식필드 (mode) 가 필요
• 직접 =0, 간접 =1
레지스터와 레지스터 간접주소지정 (register mode)
• 레지스터 방식– 오퍼랜드에 실제 오퍼랜드가 저장된 레지스터가 저장– 오퍼랜드에는 레지스터 번호가 저장 유효주소 = 레지스터번호 – 장점 : 오퍼랜드의 비트가 적고 레지스터를 접근하므로 고속– 단점 : 오퍼랜드가 중앙처리장치의 레지스터로 제한
• 레지스터 간접주소지정 방식– 레지스터가 실제 오퍼랜드가 저장된 기억장치의 주소 값을 갖고 있는
방식 • 오퍼랜드 자체가 아니라 오퍼랜드가 저장된 주소를 가짐• 유효 주소 = 지정된 레지스터에 있는 주소
– 자동 증가나 자동 감소 방식에 주로 사용– 장점 : 주소필드의 비트 수가 직접 주소를 지정하는 것보다 적다
상대 주소 지정
• 유효주소를 계산하기 위해 처리장치 내에 있는 특정 레지스터의 내용에 명령어 주소필드 값을 더하는 방식– 명령어가 지정하는 오퍼랜드가 다음 실행 명령어
위치에서 상대적으로 얼마만큼 위치에 있다는 의미– 분기형 명령어에서 주로 사용
• PC (program counter)– 상대 주소를 계산하기 위해 사용되는 레지스터– 다음에 실행될 명령어가 있는 곳의 주소를 가짐
• 유효주소의 계산 – 유효주소 = 명령어 주소부분의 내용 + PC 의 내용
• 명령어 주소 부분 : 부호 (+/-) 가 있는 수
인덱스된 주소 지정 (indexed mode)
• 인덱스된 주소지정– 인덱스 레지스터의 내용을 명령어 주소 부분에 더해서
유효주소 구함• 특정한 CPU 레지스터나 레지스터 set 중의 하나• 인덱스 레지스터는 명령어의 주소 영역에 대한 상대적인 위치
값을 가짐– 배열을 인덱싱할 때 주로 사용– 유 효 주 소 = 명 령 어 주 소 부 분 의 내 용 +
인덱스레지스터의 내용• 베이스 - 레지스터 모드
– 인덱스된 주소지정방식의 변형• 인덱스 레지스터 대신 베이스 - 레지스터를 사용• 베이스 레지스터는 베이스 주소를 가짐
주소지정 방식의 요약
주소지정 기호표기 레지스터 전송 주소 AC
즉치 LDA #NBR AC NBR 251 500
직접 LDA ADRS AC M[ADRS] 500 800
간접 LDA [ADRS] AC M[M[ADRS]] 800 300
상대 LDA $ADRS AC M[ADRS+PC] 752 600
인덱스 LDA ADRS(R1) AC M[ADRS+R1] 900 200
레지스터 LDA R1 AC R1 - 400
레지스터간접 LDA (R1) AC M[R1] 400 700
ADRS, NBR=500
다음 명령어
700
800
600
300
200
OP-code mode
기억장치
250251252
400
500
752
800
900
PC = 250
R1 = 400
AC
연산코드 : AC 에 적재하라
과 제
ADRS, NBR=200
다음 명령어
500
800
600
300
200
OP-code mode
기억장치
100101102
200
302
500
800
900
PC = 100
R1 = 200
AC
연산코드 : AC 에 적재하라
주소지정 주소 AC
즉치
직접
간접
상대
인덱스
레지스터레지스터간접
명령어의 종류
• 기본적인 명령어 집합– 데이터 전송명령어 – 데이터 처리명령어 – 프로그램 제어명령어
데이터 전송 명령어
• 2 진 정보의 내용을 변화시키지 않고 한 장소에서 다른 장소로 데이터를 전송하는 것– 레지스터간 , 레지스터와 기억장치간 , 기억장치간– 입출력 명령어가 포함
• 대표적인 명령어전송 명령어 니모닉 기 능Load LD 기억장치에서 레지스터로 전송Store ST 레지스터에서 기억장치로 전송Move MOVE 레지스터에서 다른 레지스터로 전송Exchange XCH 두 레지스터간 또는 레지스터와 기억장치간 데이터 교환Push PUSH 레지스터에서 스택으로 데이터 전송
Pop POP 스택에서 레지스터로 전송
Input IN 입력장치에서 레지스터로 전송Output OUT 레지스터에서 출력장치로 전송
데이터 처리 명령어
• 데이터에 대한 연산을 실행하고 컴퓨터에 계산 능력을 제공– 산술 명령어
• 사칙연산에 대한 산술 명령어를 제공• 1 증가 , 1 감소 , 2 의 보수 등의 연산을 포함
– 논리와 비트 처리 명령어• 레지스터나 기억장치에 저장된 단어에 대해 2 진 연산을 수행• 오퍼랜드 각 비트를 독립적으로 간주하며 각 비트를 부울식의 한
변수로 처리• Clear, Set, Complement, AND, OR, …
– 쉬프트 명령어• 오퍼랜드의 비트를 왼쪽이나 오른쪽으로 이동• 논리적 쉬프트 : 남는 비트는 0 으로 채움• 산술적 쉬프트 : 부호 비트는 고정 , 왼쪽은 부호로 오른쪽은 0
으로• 회전형 쉬프트 : 버려지는 비트는 반대쪽으로 순환
프로그램 제어 명령어
• 프로그램 명령어는 기억 장치에 연속적으로 저장됨– 제어장치에 의해 연속적으로 읽어 하나씩 처리
• 명령어를 가져올 때마다 PC 가 자동으로 1 씩 증가되어 다음 명령어의 주소를 갖게 됨
• 프로그램 제어 명령어의 수행– PC 의 값과 제어 흐름이 바뀜– 이전 계산 결과에 따라 흐름을 제어하거나 다른 프로그램 세그먼트로 분기할
수 있는 능력을 제공하기 때문에 가능
제어 명령어 니모닉 기 능Branch BR 조건 혹은 무조건적으로 유효 주소로 분기Jump JMP 조건 혹은 무조건적으로 유효 주소로 분기Skip SKP 조건이 만족되면 다음 명령어를 수행하지 않고 넘어감Call CALL 서브루틴 호출Return RET 서브루틴 실행 후 복귀Compare CMP 두 오퍼랜드의 뺄셈을 통해 상태 레지스터의 값을 변환Test TEST 논리 AND 연산만 구현