10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식
Section 01 컴퓨터에서 마이크로 프로세서 유형 보기 마이크로프로세서 중앙처리장치를 한 개의 칩으로 구현한 것 동작 클럭주파수, 데이터버스 비트수에 따른 성능 [그림 10-1] 제조회사에 따른 마이크로 프로세서
Section 02 어셈블리 프로그램의 이해 고급언어 저급언어 기계어 C, COBOL, PASCAL, FORTRAN 어셈블리어 기계어의 비트 형식이 나타내는 의미를 심벌(Symbol)로 표현한 것으로 프로그램을 이해하거나 작성하기가 쉽다. 기계어
컴파일러 : 고급 언어로 작성된 프로그램을 기계어로 변환 컴파일(compile) 컴파일러 : 고급 언어로 작성된 프로그램을 기계어로 변환 [그림 10-2] 고급 언어 프로그램의 컴파일을 통한 기계어 변환
어셈블리 프로그램 고급언어 : Para = 3 기계어 어셈블리어 : MOV Para, 3 11000111 00000110 00000000 00000000 00000011 00000000 어셈블리어 : MOV Para, 3 어셈블리 과정 [그림 10-3] 어셈블리 과정 어셈블리 프로그램 특장점 - 컴퓨터 하드웨어를 직접 접근 - 빠른 수행의 프로그램 - 기억장소를 적게 - 입출력장치를 효율적으로 사용
; X 와 가산기를 더하고 그 결과를 가산기에 저장 8086 어셈블리 언어의 형식 레이블 JUMP, LOOP와 같은 순환이나 반복 명령에서 해당 레이블로 프로그램 카운터 이동 연산 명령의 니모닉 또는 어셈블러 디렉티브 등을 기록 오퍼랜드 또는 피연산자 레지스터 이름, 정수, 라벨, 연산자, 주소 등을 기록 주석문 프로그램의 설명 DOSTART: ADD X ; X 와 가산기를 더하고 그 결과를 가산기에 저장 Label 부 Operation 부 Operand 부 Command 부
어셈블리 프로그램의 실행과정 기억장치 250번지에서 데이터를 가산기에 적재 기억장치 251번지의 데이터와 덧셈을 수행 결과를 다시 가산기에 저장 기억장치 251번지에 그 결과를 저장 프로그램의 주소 170번지로 점프 주소 명령어 기계 코드 100 LOAD 250 1250 101 ADD 251 5251 102 STA 2251 103 JUMP 170 8170 [표 10-1] 어셈블리 프로그램
어셈블리 프로그램의 실행 Load [그림 10-4] LOAD 명령어의 동작
어셈블리 프로그램의 실행 ADD [그림 10-5] ADD 명령어의 동작
어셈블리 프로그램의 실행 STORE [그림 10-6] STORE 명령어의 동작
어셈블리 프로그램의 실행 JUMP [그림 10-7] JUMP 명령어의 동작
프로그램이 실행 중에 프로세서가 현재 처리 순서를 중단시키고 다른 동작을 수행하도록 하는 것 Section 03 인터럽트 프로그램이 실행 중에 프로세서가 현재 처리 순서를 중단시키고 다른 동작을 수행하도록 하는 것 외부로부터 인터럽트 요구가 들어오면 프로세서는 원래의 프로그램 수행을 중단 요구된 인터럽트를 위한 서비스 프로그램을 먼저 수행 인터럽트 서비스 루틴(interrupt service routine : ISR) 인터럽트를 처리하기 위해 수행하는 프로그램 루틴 인터럽트의 예 오버플로우(overflow), ‘0’에 의한 나누기(division by zero) 등이 발생하면 프로그램이 종료 패리티 오류, 키보드 입력, 프린터 출력 등
인터럽트에 의한 제어 이동 [그림 10-8] 인터럽트에 의한 제어 이동
인터럽트 사이클 프로세서가 인터럽트 요구를 검사하는 과정 인터럽트 부 사이클이 포함된 명령어 사이클 [그림 10-10] 인터럽트 부 사이클이 포함된 명령어 사이클의 순서도
두 번째 클럭 : SP(스택 포인터)의 내용이 MAR로 전송 인터럽트 사이클의 마이크로 연산 t0 : MBR ← PC t1 : MAR ← SP, PC ← ISR 시작주소 t2 : M[MAR] ← MBR 첫 번째 클럭 : PC의 내용이 MBR로 전송 PC 내용은 주 프로그램에서 수행될 다음 명령어 주소 두 번째 클럭 : SP(스택 포인터)의 내용이 MAR로 전송 PC의 내용은 인터럽트 서비스 루틴의 시작 주소로 변경 스택 포인터는 MBR에 저장되어 있는 내용을 스택에 저장하기 위해서 저장할 위치를 지정하기 위해서 사용 세 번째 클럭 : MBR에 저장되어 있던 원래 PC의 내용이 스택에 저장
인터럽트 부 사이클에서의 데이터 흐름 [그림 10-11] 인터럽트 부 사이클에서의 데이터 흐름
인터럽트가 발생한 경우의 마이크로 연산 100 LOAD 250 101 ADD 251 102 STA 251 103 JUMP 170 - ISR시작주소 : 650번지 - SP 주소 : 999번지 Interrupt 발생
인터럽트가 발생한 경우의 마이크로 연산 [그림 10-12] 인터럽트 요구에 따른 상태 변화
인터럽트 서비스 루틴 수행 중 다른 인터럽트가 발생 인터럽트 불가능(interrupt Disabled) 다중 인터럽트 인터럽트 서비스 루틴 수행 중 다른 인터럽트가 발생 인터럽트 불가능(interrupt Disabled) CPU가 인터럽트 서비스 루틴을 처리하고 있는 도중에는 새로운 인터럽트 요구가 들어오더라도 CPU가 인터럽트 사이클을 수행하지 않도록 방지 인터럽트는 대기하게 되며, 현재의 인터럽트에 대한 처리가 종료된 후에 발생한 순서대로 처리 우선 인터럽트(Priority Interrupt) 인터럽트의 우선 순위를 결정 우선 순위가 낮은 인터럽트가 처리되고 있는 동안에 우선순위가 더 높은 인터럽트가 들어오면 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 처리
순차적인 다중 인터럽트 [그림 10-13] 순차적인 다중 인터럽트 처리
우선 순위 다중 인터럽트 [그림 10-14] 우선 순위 다중 인터럽트 처리
우선 순위 다중 인터럽트 다중 인터럽트 처리 시간 흐름 [그림 10-15] 다중 인터럽트 처리 시간 흐름
Section 04 명령어 세트 (instruction set) CPU가 수행할 동작을 정의하는 2진수 코드들의 집합 또는 명령어들의 집합 기계 명령어(machine instruction)라고도 함 일반적으로 어셈블리 코드(assembly code) 형태로 표현 명령어 세트 설계를 위해 결정되어야 할 사항들 CPU가 수행할 연산들의 수와 종류 및 복잡도 데이터 형태, 데이터 길이, 오퍼랜드 수와 길이 오퍼랜드의 주소지정 방법
명령어 세트의 특징 명령어의 구성 연산 코드(Operation Code) 오퍼랜드(Operand) 연산 코드(OP Code)는 수행될 연산을 지정(예: LOAD, ADD 등) 오퍼랜드(Operand)는 연산을 수행하는 데 필요한 데이터 혹은 데이터의 주소: 레지스터, 주기억장치, I/O장치 각 연산은 한 개 혹은 두 개의 입력 오퍼랜드들과 한 개의 결과 오퍼랜드를 포함 명령어는 여러 개의 필드로 구분:OP Code, Operend 1, Operend 2 명령어 분류 데이터 처리 데이터 저장 데이터이동 제어 [그림 10-16] 명령어 형식
오퍼랜드 형태와 수에 따른 명령어 분류 오퍼랜드가 주소를 나타내는 경우 명령어 분류 [그림 10-17] 주소 수에 따른 명령어 분류
1-주소 명령어 오퍼랜드를 한 개만 포함하는 명령어 [예] LOAD X ; AC ← M[X] X 주소 하나만 존재 [그림 10-18] 1-주소 명령어의 형식
2-주소 명령어 2개의 오퍼랜드를 포함하는 명령어 [예] MOV X, Y ; M[X] ← M[Y] [그림 10-19] 2-주소 명령어의 형식
ADD X, Y, Z ; M[X] ← M[Y] + M[Z] 3-주소 명령어 3개의 오퍼랜드를 포함하는 명령어 [예] ADD X, Y, Z ; M[X] ← M[Y] + M[Z] [그림 10-20] 3-주소 명령어의 형식
같은 연산을 1-주소 명령어, 2-주소명령어, 3-주소 명령어를 사용하여 연산할 경우 명령어 형식에 따라 스탭 수가 다름 명령어 형식이 프로그래밍에 미치는 영향 같은 연산을 1-주소 명령어, 2-주소명령어, 3-주소 명령어를 사용하여 연산할 경우 명령어 형식에 따라 스탭 수가 다름 0-주소 명령어 PUSH : Stack에 데이터를 저장 POP : Stack에서 데이터를 인출 명령어 주소 수가 많아지면 복잡해지고 명령어 길이가 길어져 인출속도가 길어짐 프로그램 당 명령어 수가 짧아져 연산속도가 빨라짐
명령어 세트에서 연산의 종류 데이터 전송 산술 연산, 논리 연산, 변환 입출력 명령어, 프로그램 제어 이동 명령어
데이터 전송 레지스터와 레지스터 사이에 데이터를 이동 레지스터와 기억장치 사이에 데이터를 이동 기억장치와 기억장치 사이에 데이터를 이동 데이터 전송 명령어에는 근원지 오퍼랜드(source operand)와 목적지 오퍼랜드 (destination operand)의 위치가 명시 전송될 데이터의 길이와 오퍼랜드의 주소지정 방식(addressing mode)등이 명시
데이터 전송 [예] CPU에서 읽기 동작 주소지정 방식에 근거하여 기억장치 주소를 계산, 실제 주소 획득 원하는 데이터가 캐시에 있는 지 검사 캐시 히트상태에서는 원하는 데이터를 캐시로부터 얻어서 CPU로 이동 캐시 미스상태의 경우, 기억장치 모듈로 읽기 명령을 전송하고 기억장치로부터 데이터가 CPU로 전송
산술 연산, 논리 연산, 변환 산술 연산 논리 연산 변환(Conversion) 기본산술 연산 특징적인 산술 연산 덧셈, 뺄셈, 곱셈, 나눗셈 특징적인 산술 연산 단일-오퍼랜드 연산 절대값(absolute) 연산 음수화(negate)연산 증가(increment) 연산 감소(decrement) 연산 논리 연산 비트들 간에 대한 AND, OR, NOT 및 exclusive-OR 연산 변환(Conversion) 2진수 → 10진수
입출력 명령어, 프로그램 제어 이동 명령어 입출력 명령어 프로그램 제어 이동 명령어 CPU와 외부 장치들간의 데이터 이동을 위한 명령어 분리형 I/O 특정 I/O 명령어 사용 기억장치-사상 I/O 일반적이 데이터 이동 명령어 프로그램 제어 이동 명령어 명령어 실행 순서를 변경하는 명령어 종류 분기 명령어 서브루틴 호출 명령어
오퍼랜드가 다음 실행될 명령어의 주소를 가지고 있음 분기 명령어 오퍼랜드가 다음 실행될 명령어의 주소를 가지고 있음 명령어 내용에 따라서 무조건 오퍼랜드의 주소로 이동하거나 조건 만족 시에만 이동하는 형태 조건 분기에서 연산 결과를 나타내는 조건 코드(condition code) zero(0) 부호(+, -) 오버플로우 플래그 예) BR 202 BRZ 211
다양한 분기 형태 [그림 10-23] 다양한 분기 형태
명령어 형식 : CALL X(Subroutine 이름) 서브루틴 수행 과정에서 스택의 변화 명령어 형식 : CALL X(Subroutine 이름) LORD F ADD C CALL X STOR A . X: MOV R1, D MUL R1,E RET
서브루틴 수행 과정에서 스택의 변화 [그림 10-25] 서브루틴 수행 과정에서 스택의 변화
명령어 형식 명령어 내의 비트 배열 명령어 세트에는 한가지 이상의 명령어 형식이 존재 연산코드의 비트 길이, 오퍼랜드의 수과 길이에 따라 명령어 형식이 달라질 수 있다.
버스 조직(Bus structure)에 의한 명령어 길이 명령어 길이에 따른 명령어 기억장치와 관련된 명령어 길이 기억장치 용량과 기억장치 조직에 의해서 주소를 지정하는 오퍼랜드 부분이 영향 기억장치의 용량이 많은 경우는 주소의 수가 많아지므로 오퍼랜드의 비트수가 많아 져야 한다 버스 조직(Bus structure)에 의한 명령어 길이 데이터를 전송하는 명령어의 경우 이에 맞는 명령어의 길이가 필요 CPU의 복잡도(complexity)와 CPU의 속도에 의한 명령어 길이 명령어는 CPU가 한 번에 읽고 쓸 수 있는 단위로 수행 CPU가 한 번에 읽고 쓸 수 있는 비트 수를 단어(Word) 단어의 크기에 따라서 명령어의 길이 결정
명령어의 종류에 따른 명령어 형식 연산 코드의 종류와 오퍼랜드가 많아지면 프로그램에 유리 주기억 장치의 용량이 증가, 가상 기억장치의 사용량이 증가하면 더 큰 기억장치 영역들을 주소 지정 가능 연산 코드, 오퍼랜드, 주소지정 방식, 주소 범위는 비트들을 필요로 하므로 명령어가 더 길어진다 긴 명령어는 비 효율적으로 사용될 가능성 존재 명령어 종류의 수와 비트 수에 대한 적절한 조정 필요 명령어 내 비트들의 할당에 영향을 주는 요소들 주소지정 방식의 수 명령어 내 오퍼랜드의 수 오퍼랜드 저장에 사용되는 레지스터의 수 레지스터 세트의 수 주소 영역(address range) 주소 세분화(address granularity): 주소 지정 단위(바이트, 워드, 블록)
길이가 서로 다른 더 많은 종류의 연산 코드들을 쉽게 제공 레지스터와 기억장치 참조들을 주소 지정 방식들과 다양하게 결합 가변길이 명령어 명령어 형식에서 서로 다른 길이를 가지는 경우 길이가 서로 다른 더 많은 종류의 연산 코드들을 쉽게 제공 레지스터와 기억장치 참조들을 주소 지정 방식들과 다양하게 결합 주소 지정이 더욱 융통적 CPU의 복잡도가 증가
다양한 주소지정 방식(addressing mode)을 사용 Section 05 주소지정방식 다양한 주소지정 방식(addressing mode)을 사용 제한된 명령어 비트들을 적절하게 이용하여 사용자(혹은 프로그래머)가 여러 가지 방법으로 오퍼랜드를 지정하고 더 큰 용량의 기억장치를 사용할 수 있도록 하기 위함 데이터가 저장된 기억장치의 실제 주소를 유효 주소(Effective Address) : EA 오퍼랜드 필드가 기억장치 주소를 나타내는 경우 : A 오퍼랜드 필드가 레지스터 번호를 나타내는 경우 : R 기억장치 A 번지의 내용 : (A), 레지스터 R의 내용 : (R)
직접 주소지정 방식 (direct addressing mode) 주소지정방식 직접 주소지정 방식 (direct addressing mode) 간접 주소지정 방식 (indirect addressing mode) 묵시적 주소지정 방식 (implied addressing mode) 즉치 주소지정 방식 (immediate addressing mode) 레지스터 주소지정 방식 (register addressing mode) 레지스터 간접 주소지정 방식 (register-indirect addressing mode) 변위 주소지정 방식 (displacement addressing mode) 상대 주소지정 방식(relative addressing mode), 인덱스 주소지정 방식(indexed addressing mode), 베이스-레지스터 주소지정 방식(base-register addressing mode)
직접 주소 지정 방식 오퍼랜드 필드의 내용이 유효 주소가 되는 방식 가장 일반적인 개념의 주소 방식 EA = A 데이터 인출을 위해 한 번만 기억장치에 액세스 연산 코드를 제외하고 남은 비트들이 주소 비트로 사용 지정할 수 있는 기억장소의 수가 제한, 많은 수의 주소를 지정 불가능 [그림 10-26] 직접 주소 지정 방식
오퍼랜드 필드에 기억장치 주소가 저장되어 있는 주소가 저장 그 주소가 가리키는 기억 장소에서 유효 주소 획득 간접 주소 지정 방식 오퍼랜드 필드에 기억장치 주소가 저장되어 있는 주소가 저장 그 주소가 가리키는 기억 장소에서 유효 주소 획득 EA = (A) 실행 사이클 동안 두 번의 기억장치 액세스가 필요하다는 단점 두 번의 액세스 첫 번째 액세스는 주소를 읽기 두 번째는 그 주소가 지정하는 위치로부터 실제 데이터를 인출 주소 지정 방식을 표시하는 간접비트(I)필드가 필요
간접 주소 지정 방식 [그림 10-27] 간접 주소 지정 방식 [그림 10-28] 간접 주소 지정 방식에서의 간접 비트 필드
명령어를 실행하는데 필요한 데이터의 위치가 별도로 지정되어 있지 않음 묵시적 주소 지정 방식 명령어를 실행하는데 필요한 데이터의 위치가 별도로 지정되어 있지 않음 명령어의 연산 코드가 내포하고 있는 방법을 묵시적 주소지정 방식이라고 함 명령어 길이가 짧음 명령어의 종류가 제한 SHL 명령어 AC(누산기)의 내용을 좌측으로 쉬프트(shift)시키는 것
오퍼랜드 필드의 내용이 연산에 사용할 실제 데이터 즉치 주소 지정 방식 데이터가 명령어에 포함되어 있는 방식 오퍼랜드 필드의 내용이 연산에 사용할 실제 데이터 프로그램에서 레지스터들이나 변수의 초기 값을 어떤 상수값(constant value)으로 세트하는 데 유용 데이터를 인출하기 위하여 기억장치를 액세스할 필요가 없다 상수 값의 크기가 오퍼랜드 필드의 비트 수에 의하여 제한 [그림 10-29] 즉치 주소 지정 방식에서 오퍼랜드 필드
레지스터 주소 지정 방식 연산에 사용할 데이터가 레지스터에 저장 오퍼랜드 부분이 레지스터 번호, 유효주소가 레지스터 번호 EA = R 오퍼랜드 필드가 레지스터들의 번호를 나타내기 때문에 비트 수가 적어도 가능 데이터 인출을 위하여 기억장치에 액세스 할 필요 없음 데이터가 저장될 수 있는 공간이 CPU 내부 레지스터들로 제한 [그림 10-30] 레지스터 주소 지정 방식
레지스터 간접 주소 지정 방식 [그림 10-31] 레지스터 간접 주소 지정 방식
변위 주소 지정 방식 직접 주소지정 방식과 레지스터 간접 주소지정 방식을 조합한 방식 오퍼랜드 필드 레지스터 번호필드 직접 주소지정 방식과 레지스터 간접 주소지정 방식을 조합한 방식 오퍼랜드 필드 레지스터 번호필드 변위 값 필드 두 오퍼랜드의 조합으로 유효 주소가 생성 [그림 10-32] 변위 주소 지정 방식
변위주소 지정방식은 사용하는 레지스터에 따라 변위 주소 지정 방식 변위주소 지정방식은 사용하는 레지스터에 따라 상대주소 지정방식 : PC를 사용 인덱스주소 지정방식 : 인덱스 레지스터 사용 베이스 레지스터 주소지정방식 : 베이스 레지스터 사용 간접사이클 명령어 실행에 필요한 데이터를 인출하는 사이클