프로그램 제어 분기(branch)와 점프(jump) 명령어 PC의 값의 변경 순차적인 프로그램의 진행순서가 다른 부분으로 이동하여 수행 대표적인 프로그램 제어 명령어
분기명령 조건부 분기명령 무조건 분기명령 스킵(skip) 주소가 필요없는 무주소 명령어 콜(call)과 리턴(return) 명령어 서브루틴과 연관되어 사용 비교명령어와 테스트명령어 특정 상태를 나타내는 레지스터를 조정함으로써 후에 분기를 일으키게 하는 역할 수행 비교명령어는 두수의 크기를 비교하고, 테스트(test) 명령은 두수를 AND시켜서 특정 상태를 나타나는 비트를 조정
상태 비트 조건 상태비트: 조건 코드(condition code)나 플래그(flag) 상태 레지스터 비트
4개의 상태비트 V,Z,S,C 1) C비트: ALU의 출력 캐리 2) S비트: ALU의 연산결과에서 부호 비트 3) Z비트: ALU의 연산결과의 워드 4) V비트: C7, C8캐리의 excluive-OR 결과
조건부 분기 명령어 조건부 분기 명령어 표 . 각 니모닉은 분기를 나타내는 B와 조건이름 약자로서 구성하며 반대조건의 경우 N을 추가 - 비교 명령어 . 두개의 피연산자의 차이를 계산 . 부호가 있는 경우와 부호없는 경우의 비교
서브루틴 Call과 Return 서브루틴 어떤 특정한 작업을 수행하도록 자체가 일련의 명령어들로 구성되어 있는 프로그램 어떤 프로그램이 수행되는 도중 여러 위치에서 서브프로그램 호출 가능 서브루틴이 수행되고 나서는 다시 주프로그램으로 분기 서브루틴 호출동작 1) 현재 PC값(return address)을 어떤 위치에 기억 기억되는 장소는 기종에 따라 다르나 대부분 특정위치, 서브루틴의 첫번째 시작위치, 스택 등을 사용 2) 프로그램의 수행이 서브루틴의 시작으로 이동
서브루틴 call의 마이크로 연산 SP ← SP + 1 스택 포인터를 하나 증가시킨다 M[SP] ← PC PC의 내용을 스택에 넣는다 SP ← 유효주소 서브루틴으로 프로그램이 수행하게 한다 return from subroutine 명령어의 마이크로 연산 SP ← M[SP] 스택의 Top의 값을 PC에 넣는다 SP ← PC - 1 PC의 내용을 하나 감소시킨다 순환(recursive) 서브루틴 어떤 서브루틴이 자기 자신을 호출하는 것 스택을 사용하여 리턴 주소를 저장
프로그램 인터럽트 프로그램 수행 중 정상적인 프로그램의 수행을 벗어나게 하는 여러가지의 문제를 다루는 것 내부적 또는 외부적인 요구 인터럽트의 수행 프로그램을 벗어나서 서비스 프로그램을 수행 서비스 프로그램의 수행이 끝나면 원래의 프로그램 수행 인터럽트가 서브루틴 call과 다른 3가지 요건 1) 소프트웨어 인터럽트를 제외하고는 명령어의 수행에 의한 것이라기 보다 내,외부적 신호에 의하여 프로그램의 진행이 변경 2) 서비스 프로그램의 주소는 명령의 주소필드가 아니라 하드웨어에 의해 결정 3) 인터럽트에서는 PC뿐만 아니라 CPU의 다른 상태를 나타내는 정보도 대피
인터럽트 발생시 CPU의 확인 내용 프로그램 카운터의 내용 모든 레지스터의 내용 상태조건의 내용 program status word(PSW) CPU의 상태를 나타내는 정보를 기억 독립된 레지스터로 구성 ALU의 상태비트, 발생 가능한 인터럽트, CPU가 감독자 모드(kernel 모드: UNIX)인지 사용자 모드인지를 표시
인터럽트의 처리 인터럽트가 발생하면 CPU의 상태를 스택에 저장 프로그램 카운터가 바뀐다. 이때 서비스 프로그램의 시작 위치는 하드웨어적 동작에 의해 결정 어떤 기종에서는 인터럽트가 발생하면 항상 일정한 주소에서 수행되면서 인터럽트의 원인을 분석하여 그에 대응되는 처리를 제공 인터럽트 사이클(interrupt cycle) CPU는 명령어의 실행 사이클이 한번씩 완료될 때마다 인터럽트가 발생했는지를 확인 인터럽트가 발생했다면 인터럽트 사이클로 변환, 이 사이클 동안 PC와 PSW가 스택에 저장되고, 분기해야할 주소가 PC에 놓여지고, 새로운 PSW를 결정하여, 인터럽트 서비스 프로그램으로 진행
인터럽트의 형태 세가지 형태의 인터럽트 외부 인터럽트 내부 인터럽트 소프트웨어 인터럽트 입출력장치, 타이밍장치, 전원 등 외부적 요인으로 발생 예) 입출력 장치가 데이타의 전송을 요구, 정보 전송의 완료 통보, 정해진 시간이 지났을 때, 전원 공급이 끊어질 때 외부 인터럽트 프로그램은 비동기성, 즉 프로그램이 수행되는 당시의 상황(입출력 장치 등)에 의해 결정
내부 인터럽트 trap이라 불리기도 한다 불법적인 명령이나 데이타를 사용할 때 발생 예) overflow가 발생했거나, 0 으로 나눈다거나, 스택이 넘치거나, 메모리 보호가 어려워졌을 때 발생 인터럽트 프로그램은 동기성이다. 즉 매번 같은 위치에서 발생 외부 인터럽트와 같이 CPU의 하드웨어에서의 신호에 의해 발생
소프트웨어 인터럽트 특수한 call 명령어로 프로그램에 의해 프로그램상의 원하는 위치에서 고의로 발생 프로그램상의 원하는 위치에서 고의로 발생 예) 감독자 call 명령어(supervisor call instruction), 시스템 call 명령어(UNIX) * 사용자 모드에서 감독자 모드(kernel 모드: UNIX)로 CPU 상태를 변환시키는 것 * 복잡한 입력/출력 전송 절차와 같은 특수한 동작을 운영체제내에서 수행하는 모드 * 프로그램은 요구한 작업에 관한 정보를 운영체제에 제공해야 한다.