KR970008523B1 - 프로세서 - Google Patents

프로세서 Download PDF

Info

Publication number
KR970008523B1
KR970008523B1 KR1019920019326A KR920019326A KR970008523B1 KR 970008523 B1 KR970008523 B1 KR 970008523B1 KR 1019920019326 A KR1019920019326 A KR 1019920019326A KR 920019326 A KR920019326 A KR 920019326A KR 970008523 B1 KR970008523 B1 KR 970008523B1
Authority
KR
South Korea
Prior art keywords
bank
register
interrupt
banks
bus
Prior art date
Application number
KR1019920019326A
Other languages
English (en)
Inventor
노부히로 다키구치
소이치 가와사키
야스오 야마다
아키라 가누마
Original Assignee
가부시키가이샤 도시바
사토 후미오
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 가부시키가이샤 도시바, 사토 후미오 filed Critical 가부시키가이샤 도시바
Application granted granted Critical
Publication of KR970008523B1 publication Critical patent/KR970008523B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

없음.

Description

프로세서
제1도는 본 발명의 제1특징의 1실시예에 따른 프로세서의 주요부 구성을 도시한 도면,
제2도는 상태코드의 1구성예를 도시한 도면,
제3도는 프로세서 상태워드의 1구성예를 도시한 도면,
제4도는 뱅크 RAM에 격납하는 레지스터군의 구성을 도시한 도면,
제5도는 본 발명의 제1특징에 따른 실시예의 뱅크의 사용예를 도시한 도면,
제6도는 제5도에 도시된 뱅크의 사용예에서의 뱅크절환시의 처리흐름을 도시한 도면,
제7도는 본 발명의 제2특징에 따른 실시예의 뱅크의 사용예를 도시한 도면,
제8도는 제7도에 도시된 뱅크의 사용예에서의 뱅크절환시의 처리흐름을 도시한 도면,
제9도는 종래의 프로세서에서의 뱅크군의 구성을 도시한 도면이다.
* 도면의 주요부분에 대한 부호의 설명
1 : CPU2 : 뱅크 메모리
3 : 범용 레지스터4 : 현재 뱅크 포인터(CBP)
5 : 이전 뱅크 포인터(PBP)6 : 프로그램 카운터(PC)
7 : 사용자 스택 포인터(USP)8 : 프로세서 상태워트(PSW)
[산업상의 이용분야]
본 발명은 뱅크(bank) 구조를 갖춘 프로세서(processor)에 관한 것으로, 특히 다중인터럽트에 대응가능한 프로세서에 관한 것이다.
[종래의 기술 및 그 문제점]
통상, 마이크로프로세서(microprocessor)의 CPU(중앙연산장치) 내의 범용 레지스터는 반도체 칩의 크기 등에 따라서 사용할 수 있는 갯수의 제한을 받고 있다 .그 때문에, 뱅크구조라 불리우는 구조를 갖춘 마이크로 프로세서가 있다.
뱅크란 범용 레지스터(프로그램 내에서 주로 연산에 이용된다)의 집합체이다. 일반적으로 범용 레지스터는 격납하는 경우는, RAM(random access memory) 영역을 어떤 정해진 크기로 분할된 스페이스(뱅크 RAM이라 칭한다)에 격납한다. 뱅크를 절환함으로써, 몇개의 뱅크 RAM 중에서 1개의 뱅크 RAM을 선택하여 범용 레지스터의 격납이나 독출을 할 수 있다.
종래의 마이크로프로세서중에서 뱅크구조를 갖춘 것에 있어서는, 뱅크를 절환함으로써 범용 레지스터를 다수 갖추고 있는 것과 동등하게 된다. 예컨대, 제9도에 도시한 바와 같이, 마이크로프로세서가 1개의 뱅크에 있는 범용 레지스터(101)를 4개의 레지스터(R0 내지 R3)로 하여 256개의 뱅크를 갖추고 있으면, 이 마이크로프로세서는 4×256=1024개의 레지스터를 갖추고 있는 것과 동등하게 된다.
뱅크를 복수개 갖추고 있는 경우에는, 그 뱅크의 번호를 가리키는 뱅크 포인터(pointer)라는 레지스터가 존재한다. 그 레지스터의 값을 변경함으로써, 다른 뱅크에 격납되어 있는 내용을 현재 사용가능한 범용 레지스터로 취급할 수 있다.
종래의 뱅크구조를 갖추고 있는 마이크로프로세서 시스템에 있어서는, 인터럽트가 발생한 때에 사용하고 있던 뱅크번호의 퇴피처로서, 1) 스택 메모리(stack memory) 상, 2) 범용 레지스터 상이 고려되고 있다. 양자 모두 인터럽트 루틴(routine)에서 뱅크의 절환이 수행되더라도 인터럽트 루틴이 종료한 후에 각각의 퇴피처로부터 인터럽트 전의 뱅크번호를 읽어 오기 때문에, 그 뱅크번호를 봄으로써 본래의 뱅크로 리턴할 수 있다.
뱅크구조를 갖추고 있는 마이크로프로세서 시스템중에서, 인터럽트가 발생한 때에 사용하고 있던 뱅크번호를 스택 메모리로 퇴피시키는 것은, 마이크로프로세서의 외부버스에 접속된 저속의 스택 메모리로의 가입(인터럽트가 발생한 때) 및 독출(인터럽트의 처리로부터 리턴할 때)을 수행할 필요가 있으므로 시간이 걸린다.
한편, 뱅크구조를 갖추고 있는 마이크로프로세서 시스템중에서, 인터럽트가 발생하여 뱅크를 절환한 때에, 사용하고 있던 뱅크의 뱅크번호를 뱅크절환후의 범용 레지스터로 퇴피시키는 것은, 상기의 스택 메모리로 퇴피시키는 경우에 비해, 외부 버스로의 저속이 액세스가 없기 때문에, 리턴정보로 되는 뱅크번호의 독출, 기입이 빠르다.
그러나, 뱅크절환 후의 범용 레지스터를 사용해서 인터럽트 처리를 수행할 때에는, 리턴정보가 입력되어 있는 범용 레지스터를 사용할 수 없으므로, 인터럽트 처리에서 사용할 수 있는 범용 레지스터에 제한이 생겨 버린다. 만약, 그 범용 레지스터를 사용하고자 하는 경우에는, 스택 메모리 등으로 리턴 뱅크번호를 퇴피시키지 않으면 안된다. 이 때문에, 이것은 처음부터 스택 메모리로 퇴피시키는 방식보다도 느려진다.
[발명의 목적]
이에 본 발명은 상술한 문제점을 해결하기 위해 이루어진 것으로, 인터럽트 처리에 있어서 사용할 수 있는 레지스터에 제한을 받지 않고, 다중 인터럽트를 가능하게 함과 더불어 인터럽트 처리에 대한 고속의 응답성을 달성할 수 있는 프로세서를 제공하고자 함에 그 목적이 있다.
[발명의 구성]
상기한 목적을 달성하기 위해 본 발명의 프로세서는, 프로그램의 실행에 관계되는 특정 정보를 보존하는 전용 레지스터와; ㅍ로그램의 실행에 관계되는 불특정 정보를 보존하는 범용 레지스터 및; 현재 사용중에 있는 뱅크를 가리키는 정보와, 리턴뱅크를 가리키는 정보 및, 상기 전용 레지스터 및 범용 레지스터에 보존되어 있는 정보가 외부 버스를 매개하지 않고 전송되는 뱅크를 복수 세트 구비한 뱅크 메모리로 구성된다.
(작용)
상기 구성에 있어서, 본 발명을 실행되는 각각의 처리마다 그 처리에서 사용하는 전용 레지스터와, 범용 레지스터 및 그 처리전에 실행되어 아직 종료하지 않은 처리에 대응한 뱅크의 위치를 가리키는 정보를, 각각 대응한 뱅크로 외부 버스를 매개하지 않고 전송하여 보존하도록 하고 있다.
(실시예)
이하, 도면을 참조해서 본 발명의 실시예를 설명한다.
제1도는 본 발명의 제1특징의 1실시예에 따른 프로세서의 주요부 구성을 도시한 도면이다.
제1도에 있어서, 프로세서는 CPU(1)와 뱅크 메모리(2)를 갖추고 있다. CPU(1)는, 16비트 길이의 범용 레지스터(RW0 내지 RW15)로 이루어진 범용 레지스터군(3)과, 현재 뱅크 포인터(CBP; 4), 이전 뱅크 포인터(PBP; 5), 프로그램 카운터(PC; 6), 사용자 스택 포인터(USP; 7), 프로세서 상태워드(PSW; 8), 및 도시하고 있지 않지만 인터럽트 스택 포인터(ISP), 특수 스택 포인터(ESP), 상태코드(CO) 등과 같은 전용 레지스터군을 갖추고 있다.
현재 뱅크 포인터(CBP; 4)는 현재 사용중에 있는 뱅크의 위치를 가리키는 레지스터이고, 이전 뱅크 포인터(PBP; 5)는 현재 사용중에 있는 뱅크로부터 현재 사용중에 있는 뱅크를 이용하여 실행되는 처리가 종료한 후에 리턴해야 할 뱅크로 되는 리턴뱅크의 위치를 가리키는 레지스터이다. 다만, PBP(5)의 값이 "0"이라면, 스택 메모리로 리턴해야 할 뱅크의 위치정보가 존재하고 있는 것을 나타낸다. 프로그램 카운터(PC; 6)는 프로그램의 명령어가 입력되어 있는 메모리영역에 번지를 가리키는 레지스터로, 프로그램이 동작하고 있으면 값이 변화한다.
인터럽트 스택 포인터(ISP)는 인터럽트로부터 리턴해 올 때의 PC(6), PSW(8), PBP(5), USP(7)의 값이 격납되어 있는 메모리영역의 번지를 가리키는 레지스터이고, 사용자 스택 포인터(USP)는 사용자 프로그램의 서브루틴으로부터 리턴해 올 때의 PC(6), PSW(8), PBP(5)의 값이 격납되어 있는 메모리영역의 어드레스를 가리키는 레지스터이며, 특수 스택 포인터(ESP)는 시스템 콜(system call)로부터 리턴해 올 때의 PC(6), PSW(8), PBP(5), USP(7)의 값이 격납되어 있는 메모리영역의 어드레스를 가리키는 레지스터이다. 그리고, 상태코드(CC)는 연산결과의 상태를 나타내는 플래그(flag)를 격납하고 있는 레지스터이고, 프로세서 상태워드(PSW; 8)는 마이크로프로세서의 상태를 나타내는 레지스터이다.
상태코드(CC)는 제2도에 도시한 바와 같이 캐리 플래그(C)[21; 연산결과, 최상위 비트로부터 자릿수올림이 발생하거나, 빌림(borrow)이 발생한 경우에 "1"이 세트된다], 오버플로우 플래그(V)[22; 연산결과, 오버플로우가 발생한 때에 "1"이 세트된다], 제로 플래그(Z)(23; 연산결과가 제로인 때에 "1"이 세트된다), 부호 플래그(S)(24; 연산결과의 최상위 비트의 값을 복사한다)로 구성된다.
또, PSW(8)는 제3도에 도시한 바와 같이 작업 모드(TM)(31; 스택 포인터의 지정), 뱅크 사이즈(BS)(32; 현재 사용중에 있는 뱅크의 크기), 지연인터럽트의 지정(DI; 33), 특권모드의 지정(RG; 34), 단일 스텝동작의 지정(SS; 35), 인터럽트 허가(EI; 36), 인터럽트 마스크(IM; 37), 상태코드(CC; 21~24)의 내용 등과 같은 정보가 격납되어 있다.
제1도로 돌아가서, 뱅크 메모리(2)는 프로세서에 내장된 RAM내에 설치되어 있고, 예컨대 뱅크 1~뱅크 256을 갖추고 있으며, 뱅크 i(i=1~256)는 4개의 단위뱅크로 이루어져 4워드의 크기를 가지고 있다. 이러한 뱅크 메모리(2)에 있어서, 예컨대 범용 레지스터군(3)은 연속한 뱅크에 할당되고, PC(6), PBP(5), PSW(8), USP(7)로 이루어진 전용 레지스터는 1개의 뱅크에 할당된다. 또, 이하에 설명하는 실시예에 있어서는, 제4도에 도시한 바와 같이 1개의 뱅크가 4개 레지스터로 이루어진 연속한 4개의 뱅크의 레지스터군(R0~R15)에 범용 레지스터(3)를 할당하고, PC(6), PBP(5), PSW(8), USP(7)로 이루어진 전용 레지스터를 1개의 뱅크의 연속한 4개의 단위 뱅크에 할당한다. 이와 같이 하여 할당되는 뱅크와 전용 레지스터군 및 범용 레지스터군(3)은 외부버스를 매개하지 않고 고밴드폭으로 데이터 전송이 수행되도록 접속구성되어 있다.
이러한 구성에 있어서, 임의의 시간에 있어서 어떤 뱅크를 사용하고 있다가, 인터럽트가 발생함으로서 인터럽트 루틴(인터럽트 처리를 하기 위한 프로그램)으로 이행하여 뱅크를 절환했다. 그 때에, 그대로 인터럽트 루틴으로 이행한 것에서는, 어느 뱅크로 리턴할 것인지 알 수 없기 때문에, PBP(5)를 준비하여 인터럽트 루틴에서의 처리가 종료한 때에 사용할 뱅크의 위치(이하, 리턴 뱅크번호라 한다)를 알 수 있도록 한다.
또, 동시에 CBP(4)를 준비해 두어 현재 사용중에 있는 뱅크의 위치를 알 수 있도록 하고, 더욱이 뱅크절환이 발생한 때에 CBP(4)의 내용을 PBP(5)로 로드함으로써 리턴 뱅크번호를 보존한다. 뱅크를 리턴할 때는 PBP(5)의 값을 CBP(4)에 로드한다.
프로그램 실행시에 사용하고 있는 레지스터는, 범용 레지스터, PC(6), ISP, USP(7), ESP, CBP(4), PBP(5), CC, PSW(8)가 있다.
뱅크 RAM에는 제4도에 도시한 범용 레지스터군(3), PC(6), CSP(7), PSW(8), PBP(5)를 퇴피시키기 위한 영역(뱅크영역)이 확보되고, 각 뱅크에 할당되는 크기가 각각 같은 크기로 되도록 분할되어 있다. PBP(5), PC(6), USP(7), PSW(8)를 퇴피시키기 위해 1개의 뱅크가 필요하고, 이들 전용 레지스터를 이용한 처리에서 사용하고 있는 범용 레지스터(4,8,12,16 중 어느 것인가의 레지스터수로, 각각의 처리내용에 따라 다르다)를 퇴피시키기 위해 각각의 레지스터수에 대응하는 1~4개의 뱅크가 필요하게 된다.
한편, 서브루틴으로 절환된 때는, 절환된 루틴은 PBP(5), PC(6), USP(7), PSW(8)를 스택 메모리(후입 선출 기억장치; 도시하지 않음)로 퇴피시킨다.
뱅크를 절환하는 경우는, 주로 인터럽트 처리와 서브루틴 콜 및 시스템 콜에 의한 것으로 나뉘어진다.
인터럽트 처리에 의해 뱅크를 절환하는 경우에는, 먼저 인터럽트 조건이 성립하여 인터럽트가 발생하면, 인터럽트 요구신호를 인터럽트 제어회로에 출력한다. 제어회로는 동시에 받은 인터럽트중에서, 우선도가 가장 높은 것을 프로세서에 출력한다. 프로세서는 발생한 인터럽트가 현재 실행되고 있는 처리에 비해 우선도가 높고, 또 인터럽트가 허가되어 있으면, 인터럽트를 받아서 인터럽트 제어회로에 허가신호를 출력한다.
단, 칩외부로부터 마스크 불가능(non-maskable) 인터럽트는 인터럽트의 허가, 불허가에 관계없이, 현재 실행되고 있는 처리에 비해 우선도가 높으면 인터럽트를 받아서 허가신호를 출력한다.
인터럽트 제어회로는 허가신호를 받아서 그 인터럽트 요구원에 대응하는 벡터(vetor)를 발생시키고, 그 벡터로부터 마이크로프로세서가 인터럽트 처리의 개시 어드레스를 계산하여 그 값을 PC(6)에 기입한다.
처리의 개시시에 개시 어드레스에 기입되어 있는 1워드를 독출하여 뱅크를 절환할 것인지의 여부를 선택한다. 이 1워드는 프로그램에 의해 설정된다.
뱅크를 절환할 때는, 현 뱅크의 내용[범용 레지스터군(3), PC(6), PSW(8), USP(7), PBP(5)]을 뱅크 RAM으로 퇴피시키고, CBP(4)의 내용을 PBP(5)에 로드하며, CBP(4)에는 인터럽트 처리에서 사용하는 뱅크번호를 격납한다. 이 뱅크번호에 의해 지정된 뱅크 RAM으로부터 범용 레지스터를 로드하고 이 뱅크를 절환함으로써, 인터럽트 처리를 개시한다.
다음에, 서브루틴 콜에 의해 뱅크를 절환하는 경우에는, 사용자의 프로그램중에서 CALL 명령에 의해 서브루틴이 호출된다. USP(7)가 가리키는 스택 메모리로 현재 사용하고 있는 뱅크의 PC(6), PBP(5)를 퇴피시키고, 스택 메모리로 퇴피시켰으므로 PBP를 "0"으로 하고, CPB(4)는 그대로 한다. 이어서, CALL 명령에 의해 지정된 어드레스를 PC(6)에 기입하고, 서브루틴의 처리를 개시한다.
서브루틴에서는 뱅크를 절환하지 않기 때문에, 뱅크를 절환할 때에는 프로그램의 CHGBK 명령(뱅크절환 명령)에 의해 행한다. 그리고, 범용 레지스터만을 뱅크 RAM으로 퇴피시키고, CBP(4)에 새로운 뱅크번호를 기입한다. 뱅크를 변경했지만 PBP(5)는 조작하지 않는다. 뱅크를 절환할 때에, 뱅크를 1~3개 정도 겹치지 않도록 비키어 놓으면 파리미터의 주고 받음 및 결과의 수취가 가능하게 된다. 한편, 4개 이상의 뱅크를 겹치지 않도록 비키어 놓으면, 전혀 겹침이 없는 뱅크절환을 실현할 수 있다.
다음에, 시스템 콜에 의해 뱅크를 절환하는 경우에는, 시스템 콜(소프트웨어 인터럽트)은 마스크 불가능 인터럽트이므로, 인터럽트의 허가, 불허가에 관계없이 인터럽트를 받아들인다. 인터럽트 제어회로에 의해 그 인터럽트 처리에 대응하는 벡터를 발생시키고, 그 벡터로부터 인터럽트 처리의 개시 어드레스를 계산한다. 그와 동시에, 인터럽트된 처리에서 사용하고 있던 PC(6), PBP(5), PSW(8)를 스택 메모리에 기입하고, 스택 메모리에 기입했기 때문에 PBP에 "0"을 세트한다.
그리고나서, 계산된 개시 어드레스를 PC(6)에 기입한다. 시스템 콜에서는, 통상의 인터럽트 처리와 같이 자동적으로 뱅크를 절환하지 않기 때문에, 프로그램으로 뱅크의 절환을 행한다. 뱅크의 절환은 CHGBK 명령(뱅크 절환명령)에 의해 행한다.
먼저, 범용 레지스터만을 뱅크 RAM으로 퇴피시키고, CBP(4)에 새로운 뱅크번호를 기입한다. PBP(5)는 조작하지 않는다. 그리고, 시스템 콜의 처리를 실행한다. 또, 서브루틴 콜과 마찬가지로, 뱅크를 1~3개 정도 겹치지 않도록 비키어 놓으면, 파라미터의 주고 받음 및 결과의 수취가 가능하게 된다.
다음에, 인터럽트에 의한 뱅크절환으로부터 회복(回復)하는 경우에는, 인터럽트의 처리가 종료하고, RETI 명령(인터럽트로부터의 리턴명령)에 의해 본래의 뱅크로 회복한다. CBP(4)에 PBP(5)의 내용을 로드하고, CBP(4)가 가리키는 뱅크 RAM으로부터 범용 레지스터(3), PC(6), PBP(5), PSW(8), USP(7)를 로드한다. 이에 따라, 본래의 뱅크로 회복할 수 있다.
다만, 다음 회에 동일한 인터럽트가 들어온 때에 저속을 실행한 때 등, 인터럽트 처리에서 사용한 범용 레지스터 등의 내용을 보존할 필요가 있는 경우에는, 리턴하기 전에 그 내용을 뱅크 RAM에 기입하고, 리턴 명령을 프로그램으로 실행한다.
다음에, 서브루킨 콜에 의한 뱅크절환으로부터 회복하는 경우에는, 서브루틴 콜의 처리가 종료하고, 프로그램의 CHGBK 명령(뱅크절환명령)에 의해 서브루틴중 본래의 뱅크로 리턴한다. CBP(4)에 프로그램으로 절환하기 전에 CBP(4)의 값을 기입하고, CBP(4)가 가리키는 뱅크 RAM으로부터 범용 레지스터(3)만을 로드한다. 이에 따라, 본래의 뱅크로 회복할 수 있다.
이어서, RET 명령(서브루틴으로부터의 리턴명령)에 따라 본래의 루틴으로 회복한다. PBP(5)가 "0"이기 때문에, USP(7)가 가리키는 스택 메모리로부터 PC(6), PBP(5)를 로드한다. 그 때에, 뱅크의 겹침을 1로부터 3으로 설정하면, 결과의 주고 받음이 가능하다.
다음으로, 시스템 콜에 의한 뱅크절환으로부터 회복하는 경우에는, 시스템 콜의 처리가 종료하고, CHGBK 명령(뱅크리턴명령)에 따라 본래의 뱅크로 회복한다. CBP(4)에 프로그램으로 절환하기 전의 CBP(4)의 값을 기입하고, CBP(4)가 가리키는 뱅크 RAM으로부터 범용 레지스터(3)만을 로드한다. 이에 따라, 본래의 뱅크로 회복할 수 있다. RETI 명령(인터럽트 루틴으로부터의 리턴명령)에 의해 본래의 루틴으로 회복한다. PBP(5)가 "0"이기 때문에, USP(7)가 가리키는 스택 메모리로부터 PC(6), PBP(5), PSW(8)를 로드한다. 그리고, 본래의 루틴으로 리턴할 수 있다.
또, 서브루틴 콜이나, 시스템 콜에 의해 뱅크를 절환하는 경우에는, 절환한 레지스터 뱅크에 파라미터를 주고 받을 수 있는 것은 상술한 바와 같다. 뱅크를 절환할 때에 레지스터 뱅크를 겹쳐서 뱅크번호를 설정하면, 범용 레지스터에 입력되어 있는 파라미터를 주고 받는 것이 가능하게 된다.
즉, 범용 레지스터끼리가 겹쳐진 부분의 사이에서 파라미터의 주고 받음을 행할 수 있다. 이 때문에, 스택 메모리 등을 매개하지 않고 직접 행할 수 있으므로, 시간이 단축된다. 다만, 주고 받음에 의해 본래의 레지스터 뱅크의 레지스터 번호와 새로운 뱅크의 레지스터 번호가 달라지게 된다.
다음에는 제5도 및 제6도를 참조하여 뱅크절환의 1실시예를 설명한다.
제5도는 뱅크의 1사용예를 도시한 도면이고, 제6도는 뱅크절환시의 처리흐름을 나타낸 도면이다.
여기에서, 시스템 콜 1은 뱅크를 절환하지 않고, 서브루틴 2는 시스템 콜 2로 한다. 또, 사용중의 PBP(5)가 "0"인 때는 PC(6), PBP(5), PSW(8)가 스택으로 퇴피하고 있는 것을 나타낸다.
우선 먼저, 메인 루틴이 실행되고 있다. 이 때에는, CBP(4)에는 사용하고 있는 뱅크의 번호 15가 입력되어 있고, PBP(5)에는 초기화되어 "0"이 입력되어 있다. PC(6), PBP(5), USP(7), PSW(8)를 격납하는 뱅크는 뱅크 15이고, 범용 레지스터(3)를 격납하는 뱅크 RAM은 뱅크 16으로부터 뱅크 19를 사용하고 있다.
다음에, 서브루틴 1이 콜되면, 지금까지 사용하고 있던 뱅크의 PC(6), PBP(5)를 스택 메모리로 퇴피시키고, 스택 메모리로 퇴피시켰기 때문에 PBP에 "0"을 세트한다. 서브루틴 콜 명령에 의해 지정된 프로그램 번지를 PC(6)에 세트한다. 프로그램에 의해 사용되는 뱅크를 뱅크 15로부터 뱅크 12로 절환한다. 사용하고 있던 범용 레지스터(3)의 내용을 뱅크 16으로부터 뱅크 19로 퇴피시킨다. CBP(4)에 12를 세트하고, 범용 레지스터에 뱅크 13으로부터 뱅크 16까지의 값을 로드한다. 앞의 메인 루틴에서 사용하고 있던 뱅크 16의 R0~R3까지의 레지스터를, 서브루틴 1의 R12~R15로 직접 파라미터를 주고 받을 수 있다.
다음에, 인터럽트 루틴 1이 발생하면, 루틴 1의 개시시에 미리 프로그램으로 설정해 놓은 개시 어드레스에 있는 1워드를 독출하여 인터럽트 루틴 1에서 사용하는 뱅크번호와 크기를 읽어들인다. 이와 동시에, 서브루틴 1의 범용 레지스터는 뱅크 13으로부터 뱅크 16으로 퇴피시키고, PC(6), PSW(8), USP(7), PBP(5)는 뱅크 12로 퇴피시키며, CBP(4)의 내용 12를 PBP(5)에 로드한다.
PC(6)에는 인터럽트 루틴 1에 대응하는 개시 어드레스를 기입하고, CBP(4)에는 인터럽트 루틴 2에서 사용하는 뱅크번호 1을 입력하여 뱅크를 절환한다. 뱅크 2와 뱅크 3으로부터 범용 레지스터를 로드하여 사용한다.
그 다음에, 인터럽트 루틴 2가 발생하면, 인터럽트 루틴 1의 경우와 마찬가지로, 루틴의 개시시에 미리 프로그램으로 설정해 놓은 개시 어드레스에 있는 1워드를 독출하여 인터럽트 루틴 2에서 사용하는 뱅크번호와 크기를 읽어들인다. 그와 동시에, 인터럽트 루틴 1의 범용 레지스터는 뱅크 2로부터 뱅크 3으로 퇴피시키고, PC(6), PSW(8), USP(7), PBP(5)는 뱅크 1로 퇴피시키며, CBP(4)의 내용 1을 PBP(5)에 로드한다.
PC(6)에는 인터럽트 로틴 2에 대응하는 개시 어드레스를 기입하고, CPB(4)에는 인터럽트 루틴 2에서 사용하는 뱅크번호 8을 입력항여 뱅크를 절환한다. 범용 레지스터를 뱅크 9로부터 로드하여 사용한다.
그 다음에, 인터럽트 루틴 2의 처리가 종료하면, 인터럽트 루틴 2로부터의 리턴명령이 발생하고, CBP(4)에 PBP(5)의 값 1을 로드한다. 뱅크 1로부터 PC(6), PBP=12, PSW(8), USP(7)를 로드하고, 뱅크 2와 뱅크 3으로부터 범용 레지스터를 로드하여 본래의 뱅크로 회복한다. 그리고, 인터럽트 루틴 1의 처리의 계속을 실행한다.
이어, 인터럽트 루틴 1의 처리가 종료하면, 인터럽트 루틴 1로부터의 리턴명령이 발생하고, 인터럽트 루틴 2의 처리가 종료한 것과 마찬가지로, CBP(4)에 PBP(5)의 값 12를 로드한다. 뱅크 12로부터 PC(6), PBP=0, PSW(8), USP(7)를 로드하고, 뱅크 13으로부터 뱅크 16까지를 범용 레지스터에 로드하여 본래의 뱅크 12로 회복한다. 그리고, 서브루틴 1의 처리의 계속을 실행한다.
다음에, 서브루틴 1의 처리의 도중에서 시스템 콜 2가 발생하여 이를 받아들이면, 서브루틴 1에서 사용하고 있던 PC(6), PSW(8), PBP=0을 스택 메모리로 퇴피시킨다. 이어서, 그 소프트웨어 인터럽트 루틴에 대응하는 개시 어드레스를 PC(6)에 기입한다.
소프트웨어 인터럽트는 자동적으로 뱅크를 절환하지 않기 때문에, CBP(4)의 값은 12로 변하지 않는다. 스택 메모리로 퇴피시켰기 때문에, PBP에는 "0"을 세트한다. 프로그램으로 뱅크를 절환하여 CBP=10으로 한다. 범용 레지스터를 뱅크 11과 뱅크 12로부터 로드하여 사용한다.
다음에, 시스템 콜 2의 처리도중에서 인터럽트 루틴 3이 발생하면, 인터럽트 루틴 2의 경우와 마찬가지로, 루틴의 개시시에 미리 프로그램으로 설정해 놓은 개시 어드레스에 있는 1워드를 독출하여 인터럽트 루틴 3에서 사용하는 뱅크번호와 크기를 읽어들인다. 그와 동시에, 시스템 콜 2의 범용 레지스터는 뱅크 11로부터 뱅크 12로 퇴피시키고, PC(6), PSW(8), USP(7), PBP=0은 뱅크 10으로 퇴피시키며, CBP(4)의 내용 10을 PBP에 로드한다.
PC(6)에는 인터럽트 루틴에 대응하는 개시 어드레스를 기입하고, CBP(4)는 인터럽트 루틴 3에서 사용하는 뱅크번호 4를 입력하여 뱅크를 절환한다. 범용 레지스터는 뱅크 5로부터 뱅크 7을 로드하여 사용한다.
다음에, 인터럽트 루틴 3의 처리중에 시스템 콜 1이 발생하여 이를 받아들이면, 인터럽트 루틴 3에서 사용하고 있던 PC(6), PSW(8), PBP=10을 스택 메모리로 퇴피시킨다. 이어, 그 소프트웨어 인터럽트 루틴에 대응하는 개시 어드레스를 PC(6)에 기입한다.
소프트웨어 인터럽트는 자동적으로 뱅크를 절환하지 않기 때문에, CBP(4)의 값은 변하지 않는다. 스택 메모리에 퇴피시켰기 때문에, PBP에는 "0"을 세트한다. 시스템 콜 1은 뱅크절환을 수행하지 않기 때문에, CBP=4인 채로 되고, 범용 레지스터는 그대로 뱅크 5로부터 뱅크 7을 사용한다.
다음에, 시스템 콜 1의 처리가 종료하면, 인터럽트로부터의 복귀명령에 의해 인터럽트 루틴(3)으로 리턴한다. PBP는 "0"이기 때문에, 스택 메모리로부터 인터럽트 루틴(3)에서 사용하고 있던 PC(6), PSW(8), PBP=10을 로드한다. 뱅크는 절환하고 있지 않기 때문에, CBP(4)의 값은 4로 변하지 않고, 범용 레지스터는 그대로 뱅크 5로부터 뱅크 7을 사용하여 인터럽트 루틴 3의 처리를 재개한다.
그 다음에, 인터럽트 루틴 3의 처리가 종료되면, 인터럽트 루틴 3으로부터의 리턴명령이 발생하고, CBP(4)에 PBP(5)의 값 10을 로드한다. 뱅크 10으로부터 PC(6), PBP=0, PSW(8), USP(7)를 로드하고, 뱅크 11과 뱅크 12로부터 범용 레지스터를 로드하여 본래의 뱅크 10으로 회복한다. 그리고, 시스템 콜 2의 계속을 실행한다.
이어, 시스템 콜 2의 처리가 종료하면, 프로그램의 뱅크절환명령에 의해 CBP로 12를 로드하여 뱅크 12로 회복시킨다. PBP=0이기 때문에, 스택 메모리로부터 PC(6), PBP=0, PSW(8)를 로드한다. 범용 레지스터에 뱅크 13으로부터 뱅크 16까지를 로드하고, 다시 서브루틴 1의 처리를 실행한다.
그 다음에, 서브루틴 1의 처리가 종료하면, 프로그램에 의해 CBP(4)에 15를 로드하여 뱅크 15로 리턴한다. PBP=0이기 때문에, 스택 메모리로부터 PC(6), PBP=0을 로드한다. 범용 레지스터에 뱅크 16으로부터 뱅크 19까지를 로드하고, 메인루틴의 계속을 재개한다.
또한, CBP가 가리키는 값과, PBP가 가리키는 값의 양자를 보존하는 레지스터를 설치하도록 해도 좋다 .이와 같이, 본 발명에서는 리턴 뱅크번호를 엑세스할 때에, 저속의 외부버스를 매개하여 스택 메모리로 엑세스하지 않기 때문에, 인터럽트에 대하여 고속의 응답성을 갖게 할 수 있다.
또, PC나 PSW 등과 같은 전용 레지스터를 복수 세트 설치하지 않고, 다중 인터럽트에 대응하는 것이 가능하게 되며, 또 고속의 인터럽트 응답/복귀가 가능하게 된다.
더욱이, 리턴 뱅크번호를 보존하고 있는 레지스터의 값에 따라 리턴 뱅크번호를 격납하는 장소를 선택할 수 있기 때문에, 고속의 응답을 필요로 하지 않는 인터럽트시의 리턴 뱅크번호를 외부의 스택 메모리에 두는 것도 가능하여 내부에 있는 뱅크의 RAM을 효율적으로 사용할 수 있다. 예컨대, 인터럽트 1이 응답하고 있을 때에, 동일의 범용 레지스터를 이용하는 인터럽트 2가 발생한 경우, 인터럽트 2에서 사용하고 PC(6), PSW(8)를 뱅크게 기입해 버리기 때문에, 인터럽트 1에서 사용하고 있던 PC(6), PSW(8)를 스택 메모리로 퇴피시킬 수 있고, 또 스택 메모리에 둠으로써 뱅크 메모리를 절약할 수도 있다.
다음에는 본 발명의 제2특징에 따른 실시예를 설명한다.
이 실시예의 특징은, 상술한 실시예의 PBP(5)를 갖춘 것 대신에, 리턴뱅크번호를 격납하기 위해 1개의 뱅크를 사용하는 점에 있다.
여기에는, 1개의 뱅크는 제4도에 도시한 바와 같이 레지스터 4개로 구성되고, 연속하는 1~4개의 뱅크를 범용 레지스터로서 사용하며, PC(6), PSW(8), USP(7)를 선택하기 위해 1개의 뱅크를 사용한다.
임의의 시간에 있어서 어떤 뱅크를 사용하고 있다가, 인터럽트가 발생함으로써 인터럽트 루틴(인터럽트 처리를 하기 위한 프로그램)으로 이행하여 뱅크를 절환했다. 그 때에, 그대로 인터럽트 루틴으로 이행한 것에서는 어느 뱅크로 리턴할 것인지 알 수 없기 때문에, 뱅크 RAM에 리턴 뱅크번호를 격납해서 알 수 있도록 한다.
또, 동시에 CBP(4)를 준비해 두어 현재 사용중에 있는 뱅크의 위치를 알 수 있도록 한다. 더욱이, 뱅크절환이 발생한 경우, 절환한 앞의 리턴 뱅크 번호를 격납하는 뱅크 RAM에 CBP(4)를 로드함으로써 종료후에 리턴할 뱅크의 위치를 보존한다. 반대로, CBP(4)를 로드하면, 뱅크를 리턴할 수 있다.
한편, 서브루틴으로 절환한 때는, 절환된 루틴은 PC(6), USP(7), PSW(8)을 스택 메모리(후입선출 기억장치)로 퇴피시킨다.
뱅크를 절환하는 경우는, 주로 인터럽트 처리와 서브루틴 콜 및 시스템 콜에 의한 것으로 나눌 수 있다.
인터럽트 처리에 의해 뱅크를 절환하는 경우에는, 먼저 인터럽트 조건이 성립하여 인터럽트가 발생하면 인터럽트 요구신호를 인터럽트 제어회로에 출력한다. 제어회로는 동시에 받은 인터럽트중에서 우선도가 가장 높은 것은 프로세서로 출력한다. 프로세서는 발생한 인터럽트가 현재 실행되고 있는 처리에 의해 우선도가 높고, 또 인터럽트가 허가되어 있으면, 인터럽트를 받아서 인터럽트 제어회로에 허가신호를 출력한다.
다만, 칩 외부로부터의 마스크불가능 인터럽트는 인터럽트의 허가, 불허가에 관계없이, 현재 처리되고 있는 루틴에 비해 우선도가 높으면 인터럽트를 받아서 허가신호를 출력한다.
인터럽트 제어회로는 허가신호는 받아서 그 인터럽트 요구원에 대응하는 벡터를 발생시키고, 그 벡터로부터 마이크로프로세서가 인터럽트 루틴의 개시 어드레스를 계산하여 그 값을 PC(6)에 기입한다.
처리의 초기에 개시 어드레스에 기입되어 있는 1워드를 독출하여 뱅크를 절환할 것인지의 여부를 선택한다. 이 1워드는 프로그램에 의해 설정해 둔다.
뱅크를 절환하는 때는, 현 뱅크의 내용[범용 레지스터(3), PC(6), PSW(8), USP(7)]을 뱅크 RAM으로 퇴피시키고, CBP(4)의 내용을 인터럽트 루틴에서 사용하는 뱅크에 리턴 뱅크번호로서 로드하며, CBP(4)에는 인터럽트 루틴에서 사용되는 뱅크번호를 입력한다. 이 뱅크번호에 의해 지정된 뱅크 RAM으로붙 범용 레지스터(3)를 로드하여 뱅크를 절환하고, 인터럽트 처리를 개시한다.
다음에, 서브루틴 콜에 의해 뱅크를 절환하는 경우에는, 사용자 프로그램중에서 CALL 명령에 의해 서브루틴이 호출된다. USP(7)가 가리키는 스택 메모리에 현재 사용하고 있는 뱅크의 PC(6)를 퇴피시키고, 스택 메모리에 퇴피시켰으므로 뱅크에 있는 리턴 뱅크번호를 "0"으로 하며, CBP(4)는 그대로 한다. 그리고나서, CALL 명령으로 지정된 어드레스를 PC(6)에 기입하고, 서브루틴의 처리를 개시한다.
프로그램으로 뱅크를 절환할 때는, CHGBK 명령(뱅크절환명령)으로 실행한다. 범용 레지스터만을 뱅크 RAM으로 퇴피시키고, CBP(4)에 새로운 뱅크번호를 기입한다. 뱅크를 변경했지만, PBP(5)는 조작하지 않는다. 그리고, 루틴의 처리를 실행한다. 그 때에, 뱅크를 1~3개 정도 겹치지 않도록 비키어 놓으면, 파라미터의 주고 받음 및 결과의 수취가 가능하게 된다. 한편, 4개 이상을 겹치지 않게 비키어 놓으면, 전혀 겹침이 없는 뱅크절환을 실현할 수 있다.
다음에, 시스템 콜에 의해 뱅크를 절환하는 경우에는, 시스템 콜(소프트웨어 인터럽트)은 마스크 불가능 인터럽트이기 때문에, 인터럽트의 허가, 불허가에 관계없이 인터럽트를 받아들인다. 인터럽트 제어회로에 의해 그 인터럽트 루틴에 대응하는 벡터를 발생시키고, 그 벡터로부터 인터럽트 루틴의 개시 어드레스를 계산한다. 그와 동시에, 인터럽트된 루틴에서 사용하고 있던 PC(6), PSW(8)를 스택 메모리에 기입하고, 스택 메모리에 기입했기 때문에 리턴뱅크번호를 "0"을 세트한다.
그리고나서, 계산된 개시 어드레스를 PC(6)에 기입한다. 시스템 콜에서는, 통상의 인터럽트 루틴과 같은 자동적으로 뱅크를 절환하지 않기 때문에, 프로그램으로 뱅크의 절환을 행한다. 뱅크의 절환은 CHGBK 명령(뱅크절환명령)으로 행한다. 먼저, 범용 레지스터만을 뱅크 RAM으로 퇴피시키고, CBP(4)에 새로운 뱅크번호를 기입한다. PBP(5)는 조작하지 않는다. 그리고, 루틴의 처리를 실행한다. 또, 서브루틴 콜과 마찬가지로, 뱅크를 1~3개 정도 겹치지 않게 비키어 놓으면 파라미터의 주고 받음 및 결과의 수취가 가능하게 된다.
다음에, 인터럽트에 의한 뱅크절환으로부터 회복하는 경우에는, 인터럽트의 처리가 종료하면, RETI 명령(인터럽트로부터의 리턴명령)에 의해 본래의 뱅크로 회복한다. CBP(4)로 뱅크에 있는 리턴 뱅크번호의 내용을 로드하여 CBP(4)가 가리키는 뱅크 RAM으로부터 범용 레지스터(3), PC(6), PSW(8), USP(7)를 로드한다. 이에 따라, 본래의 뱅크로 회복할 수 있다.
다만, 다음회에 동일한 인터럽트가 들어온 경우에 계속을 실행하고자 할때 등, 인터럽트 루틴에서 사용한 범용 레지스터 등의 내용을 보존할 필요가 있는 경우에는, 리턴하기 전에 그 내용을 뱅크 RAM에 기입하고, 리턴하는 명령을 프로그램으로 실행한다.
다음에, 서브루틴 콜에 의한 뱅크절환으로부터 회복하는 경우에는, 서브루틴 콜의 처리가 종료하면, 프로그램의 CHGBK 명령(뱅크절환명령)에 의해 서브루틴중 본래의 뱅크로 리턴한다. CBP(4)에 프로그램으로 절환하기 전의 CBP(4)의 값을 기입하고, CBP(4)가 가리키는 뱅크 RAM으로부터 범용 레지스터만을 로드한다. 이에 따라, 본래의 뱅크로 회복할 수 있다.
그리고나서, RET 명령(서브루틴으로부터의 리턴명령)에 의해 본래의 루틴으로 회복한다. 리턴 뱅크번호가 "0"이기 때문에, USP(7)가 가리키는 스택 메모리로부터 PC(6)를 로드한다. 그 때에, 뱅크의 겹침을 1로부터 3으로 설정하면, 결과의 주고 받음이 가능하다.
다음에, 시스테 콜에 의한 뱅크절환으로부터 회복하는 경우에는, 시스템 콜의 처리가 종료하면 CHGBK 명령(뱅크 리턴명령)에 의해 본래의 뱅크로 회복한다. CBP(4)에 프로그램으로 절환하기 전의 CBP(4)의 값을 기입하고, CBP(4)가 가리키는 뱅크 RAM으로부터 범용 레지스터만을 로드한다. 이에 따라, 본래의 뱅크로 회복할 수 있다. RETI 명령(인터럽트 루틴으로부터의 리턴명령)에 의해 본래의 루틴으로 회복한다. 리턴 뱅크번호가 "0"이기 때문에, USP(7)가 가리키는 스택 메모리로부터 PC(6), PSW(8)를 로드한다. 그리고, 본래의 루틴으로 리턴할 수 있다.
다음에는, CBP(4)의 처리가 종료한 후에 사용해야 할 뱅크의 위치를 가리키고 있는 값을 격납하고 있는 뱅크의 위치를 지정한 실시예를, 제7도 및 제8도를 참조하여 설명한다.
제7도는 뱅크의 1사용예이고, 제8도는 뱅크절환시의 처리흐름을 도시한 도면이다.
여기에서, 시스템 콜 1은 뱅크를 절환하지 않고, 서브루틴 2는 시스템 콜 2로 한다. 또, CBP(4)로부터 1을 뺀 값이 지시하는 뱅크에 리턴 뱅크번호를 격납한다. 리턴 뱅크번호가 "0"인 때는, PC(6), PSW(8)가 스택 메모리로 퇴피하고 있는 것을 나타낸다.
우선 먼저, 메인루틴이 실행되고 있다. 이 때에는, CBP(4)에는 사용하고 있는 뱅크의 번호 15가 입력되고, 뱅크(14)에 있는 리턴 뱅크번호에는 초기화되어 "0"이 입력되어 있다. PC(6), USP(7), PSW(8)를 격납하는 뱅크는 뱅크 15를 사용하고 있고, 범용 레지스터(3)를 격납하는 뱅크 RAM은 뱅크 16~뱅크 19를 사용하고 있다.
다음에, 서브루틴 1이 콜되면, 지금까지 사용하고 있던 뱅크의 PC(6), 뱅크 14에 있는 리턴 뱅크번호를 스택 메모리로 퇴피시키고, 스택 메모리로 퇴피시켰기 때문에 뱅크 14에 있는 리턴 뱅크번호에 "0"을 세트한다. 서브루틴 콜 명령에 의해 지정된 프로그램 번지를 PC(6)에 세트한다. 프로그램에 의해 사용되는 뱅크를 뱅크 15로부터 뱅크 13으로 절환한다. 사용하고 있던 범용 레지스터의 내용을 뱅크 16으로부터 뱅크 19로 퇴피시킨다. 뱅크 14에 있던 리턴 뱅크번호 "0"을 뱅크 12에 로드한다. CBP에 13을 세트하고, 범용 레지스터에 뱅크 14로부터 뱅크 16까지의 값을 로드한다.
앞의 메인 루틴에서 사용하고 있던 뱅크 16의 R0로부터 R3까지의 레지스터를 서브루틴 1의 R8로부터 R11로 직접, 파라미터를 주고 받을 수 있다.
다음에, 인터럽트 루틴 1이 발생하면, 루틴 1의 개시시에 미리 프로그램으로 설정해 놓은 개시 어드레스에 있는 1워드를 독출하여 인터럽트 루틴 1에서 사용하는 뱅크번호가 크기를 읽어들인다. 이와 동시에, 서브루틴 1의 범용 레지스터는 뱅크 14로부터 뱅크 16으로 퇴피시키고, PC(6), PSW(8), USP(7)는 뱅크 13으로 퇴피시키며, CBP(4)의 내용 13을 뱅크 1에 있는 리턴 뱅크번호로 로드한다.
PC(6)에는 인터럽트 루틴에 대응하는 개시 어드레스를 기입하고, CBP(4)에는 인터럽트 루틴 1에서 사용하는 뱅크번호 2를 입력하여 뱅크를 절환한다. 뱅크 3으로부터 범용 레지스터를 로드하여 사용한다.
다음에, 인터럽트 루틴 2가 발생하면, 인터럽트 루틴 1의 경우와 마찬가지로, 루틴의 개시시에 미리 프로그램으로 설정해 놓은 개시 어드레스에 있는 1워드를 독출하여 인터럽트 루틴 2에서 사용하는 뱅크번호와 크기를 읽어들인다. 이와 동시에, 인터럽트 루틴 1의 범용 레지스터는 뱅크 3으로 퇴피시키고, PC(6), PSW(8), USP(7)는 뱅크 2로 퇴피시키며, CBP(4)의 내용 2를 뱅크 8에 있는 리턴 뱅크번호로 로드한다.
PC(6)에는 인터럽트 루틴에 대응하는 개시 어드레스를 기입하고, CBP(4)에는 인터럽트 루틴 2에서 사용하는 뱅크번호 9를 입력하여 뱅크를 절환한다. 범용 레지스터를 뱅크 10으로부터 로드하여 사용한다.
다음에, 인터럽트 루틴 2의 처리가 종료하면, 인터럽트 루틴 2로부터의 리턴 명령이 발생하고, CBP(4)에 뱅크 8에 있는 리턴 뱅크번호와 값 2를 로드한다. 뱅크 2로부터 PC(6), PSW(8), USP(7)를 로드하고, 뱅크 3으로부터 범용레지스터를 로드하여 본래의 뱅크로 회복한다. 뱅크 1에 있는 리턴뱅크번호는 13이 입력되어 있다. 그리고, 인터럽트 루틴 1의 처리의 계속을 실행한다.
그 다음에, 인터럽트 루틴 1의 처리가 종료하면, 인터럽트 루틴 1로부터의 리턴명령이 발생하고, 인터럽트 루틴 2의 처리가 종료한 것과 마찬가지로, CBP(4)로 뱅크 1에 있는 리턴 뱅크번호의 값 13을 로드한다. 뱅크 13으로부터 PC(6), PSW(8), USP(7)를 로드하고, 뱅크 14로부터 뱅ㅋ 16까지를 범용 레지스터로 로드하여 본래의 뱅크 13으로 회복한다. 뱅크 12에 있는 리턴 뱅크번호는 "0"이 입력되어 있다. 그리고, 서브루틴 1의 처리의 계속을 실행한다.
이어, 서브루틴 1의 처리도중에서 시스템 콜 2가 발생하여 이를 받아들이면, 서브루틴 1에서 사용하고 있던 PC(6), PSW(8)와 뱅크 12에 있는 리턴 뱅크번호의 값 "0"을 스택 메모리로 퇴피시킨다. 그리고 나서, 그 소프트웨어 인터럽트 루틴에 대응하는 개시 어드레스를 PC(6)에 기입한다.
소프트웨어 인터럽트는 자동적으로 뱅크를 절환하지 않기 때문에, CBP(4)의 값은 13으로 변하지 않는다. 스택 메모리로 퇴피시켰기 때문에, 뱅크 12에 있는 리턴 뱅크번호는 "0"을 세트한다. 프로그램으로 뱅크를 절환하여 CBP(4)를 13으로 12로 한다. 뱅크 12에 있던 리턴 뱅크번호 "0"을 뱅크 11에 로드한다. 범용 레지스터를 뱅크 13으로부터 로드하여 사용한다.
다음에, 시스템 콜 2의 처리도중에서 인터럽트 루틴 3이 발생하면 인터럽트 루틴 2의 경우와 마찬가지로, 루틴의 개시시에 미리 프로그램으로 설정해 놓은 개시 어드레스에 있는 1워드를 독출하여 인터럽트 루틴 3에서 사용하는 뱅크번호와 크기를 읽어들인다. 이와 동시에, 시스템 콜 2의 범용 레지스터는 뱅크 13으로 퇴피시키고, PC(6), PSW(8), USP(7)는 뱅크 12로 퇴피시키며, CBP(4)의 내용 12를 뱅크 4에 있는 리턴 뱅크번호로 로드한다.
PC(6)에는 인터럽트 루틴에 대응하는 개시 어드레스를 기입하고, CBP(4)에는 인터럽트 루틴 3에서 사용하는 뱅크번호 5를 입력하여 뱅크를 절환한다. 범용 레지스터는 뱅크 6으로부터 뱅크 7을 로드하여 사용한다.
그 다음에, 인터럽트 루틴 3의 처리중에 시스템 콜 1이 발생하여 이를 받아들이면, 인터럽트 루틴 3에서 사용하고 있던 PC(6)와 PSW(8) 및 뱅크 4에 있는 리턴 뱅크번호 12를 스택 메모리로 퇴피시킨다. 이어, 그 소프트웨어 인터럽트 루틴에 대응하는 개시 어드레스를 PC(6)에 기입한다.
소프트웨어 인터럽트는 자동적으로 뱅크를 절환하지 않기 때문에, CBP(4)의 값은 5로 변하지 않는다. 스택 메모리로 퇴피시켰기 때문에, 뱅크 4에 있는 리턴 뱅크번호에는 "0"을 세트한다. 범용 레지스터는 그대로 뱅크 6으로부터 뱅크 7을 로드하여 사용한다.
다음에, 시스템 콜 1의 처리가 종료하면, 인터럽트로부터의 복귀명령에 의해 인터럽트 루틴 3으로 리턴한다 .뱅크 4에 있는 리턴 뱅크번호는 "0"이기 때문에 스택 메모리로부터 인터럽트 루틴 3에서 사용하고 있던 PC(6), PSW(8)를 로드하고, 뱅크 4에 리턴 뱅크번호 12를 로드한다. 뱅크는 절환하고 있지 않기 때문에, CBP(4)의 값은 5로 변하지 않고, 범용 레지스터는 그대로 뱅크 6으로부터 뱅크 7로 로드하여 사용함으로써, 인터럽트 루틴 3의 처리를 재개한다.
그 다음에, 인터럽트 루틴 3의 처리가 종료하면, 인터럽트 루틴 3으로부터의 리턴명령이 발생하고, CBP(4)로 뱅크 4에 있는 리턴 뱅크번호의 값 2를 로드한다. 뱅크 12로부터 PC(6), PSW(8), USP(7)를 로드하고, 뱅크 13으로부터 범용 레지스터를 로드하여 본래의 뱅크 12로 회복한다. 뱅크 11에 있는 리턴 뱅크번호는 "0"이 입력되어 있다. 그리고, 시스템 콜 2의 계속을 실행한다.
다음에, 시스템 콜 2의 처리가 종료하면, 프로세서의 뱅크 절환명령에 의해 CBP(4)를 12로부터 13으로 변경하고, 뱅크 13으로 리턴한다. 뱅크 11에 있는 리턴 뱅크번호 "0"을 뱅크 12로 로드한다. 뱅크 12에 있는 리턴 뱅크번호는 "0"이기 때문에, 스택 메모리로부터 PC(6), PSW(8)를 로드하고, 뱅크 12에 있는 리턴 뱅크번호 "0"을 뱅크 12에 로드한다. 범용 레지스터에 뱅크 14로부터 뱅크 16까지를 로드하고, 다시 서브루틴 1의 처리를 실행한다.
그 다음에, 서브루틴 1의 처리가 종료하면, 프로그램에 의해 CBP(4)를 13으로부터 15로 변경하고, 뱅크 15로 리턴한다. 뱅크 12에 있던 리턴 번호 "0"을 뱅크 14에 로드한다. 뱅크 14에 있던 리턴 뱅크번호는 "0"이기 때문에, 스택 메모리로부터 PC(6)를 로드하고, 뱅크 14에 있는 리턴 뱅크번호 "0"을 뱅크 14에 로드한다. 범용 레지스터(3)에 뱅크 16으로부터 뱅크 19까지를 로드하고, 메인 루틴의 계속을 재개한다.
이와 같이, PBP를 설치하지 않고 PBP에 격납하는 내용을 산출하여 뱅크 메모리에 직접 전송하도록 해도, 상술한 실시예와 같은 효과를 얻을 수 있다. 또, PBP(5)의 레지스터가 불필요하게 되어, 구성의 간략화를 도모할 수 있다.
[발명의 효과]
이상 설명한 바와 같이 본 발명에 의하면, 뱅크를 절환할 때에 리턴뱅크의 위치를 가리키는 정보 및 전용 레지스터와 범용 레지스터의 정보를 외부 버스를 매개하지 않고 전송하여 퇴피시키는 뱅크를 뱅크 메모리에 복수 세트 설치하도록 했기 때문에, 인터럽트 처리 등에서 사용할 수 있는 범용 레지스터에 제한을 받지 않고, 인터럽트 처리의 응답/복귀를 고속으로 실행할 수 있다.
또, 퇴피영역을 복수 세트 설치함으로써 다중 인터럽트에 대응할 수 있다.
더욱이, 전용 레지스터의 내용을 퇴피시키는 영역을 선택하도록 했기 때문에, 뱅크 메모리를 효율적으로 이용할 수 있다.

Claims (5)

  1. 복수의 전용 레지스터와 복수의 범용 레지스터, 산술논리유니트(ALU) 및 명령의 실행을 제어하기 위한 콘트롤러를 갖춘 CPU와, 상기 CPU에 접속된 시스템버스, 상기 시스템버스에 접속되어 프로그램을 격납함과 더불어 상기 시스템버스를 매개해서 상기 CPU로 명령을 공급하는 프로그램 메모리, 상기 시스템버스에 접속되어 데이터를 격납함과 더불어 상기 프로그램의 실행중에 상기 시스템버스를 매개해서 상기 CPU와 데이터를 주고 받는 데이터 메모리, 상기 CPU에 접속되고, 상기 시스템버스와 분리되어 설치된 전용 버스 및, 상기 전용 버스를 매개해서 상기 범용 레지스터의 내용을 일시적으로 격납하거나 재저장하는 복수의 레지스터 뱅크를 갖춘 뱅크 메모리를 구비하고, 상기 전용 레지스터가, (a) 현재의 작업에 사용되고 있는 상기 범용 레지스터의 내용을 격납하기 위한 상기 복수의 레지스터 뱅크중 현재의 가리키는 포인터를 격납하는 현재 뱅크 포인터 레지스터와, (b) 이전의 작업에 사용된 상기 범용 레지스터의 내용을 격납하기 위한 상기 복수의 레지스터 뱅크중 이전의 뱅크를 가리키는 포인터를 격납하는 이전 뱅크 포인터 레지스터를 포함하고 있는 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서, 뱅크절환이 발생한 경우에, 상기 범용 레지스터의 내용을 상기 현재 뱅크 포인터 레지스터와 상기 이전 뱅크 포인터간에서 직접 전송하는 것을 특징으로 하는 프로세서.
  3. 제1항에 있어서, 상기 전용 버스가, 상기 복수의 레지스터 뱅크의 뱅크를 가리키는 어드레스를 전송하는 어드레스버스와, 뱅크절환이 발생한 경우에 상기 어드레스버스상의 어드레스에 따라 상기 전용 버스를 통해 전송되는 상기 범용 레지스터의 내용을 전송하는 데이터버스로 이루어진 것을 특징으로 하는 프로세서.
  4. 제3항에 있어서, 뱅크절환이 발생한 경우에, 상기 전용 레지스터의 내용을 상기 전용 버스를 매개해서 상기 복수의 레지스터 뱅크의 뱅크에 격납하는 것을 특징으로 하는 프로세서.
  5. 제4항에 있어서, 상기 전용 버스의 폭이 상기 시스템버스의 폭보다 넓은 것을 특징으로 하는 프로세서.
KR1019920019326A 1991-10-21 1992-10-21 프로세서 KR970008523B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP91-272750 1991-10-21
JP27275091 1991-10-21

Publications (1)

Publication Number Publication Date
KR970008523B1 true KR970008523B1 (ko) 1997-05-24

Family

ID=17518238

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019920019326A KR970008523B1 (ko) 1991-10-21 1992-10-21 프로세서

Country Status (4)

Country Link
US (1) US5557766A (ko)
EP (1) EP0538817B1 (ko)
KR (1) KR970008523B1 (ko)
DE (1) DE69231957T2 (ko)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07114498A (ja) * 1993-10-15 1995-05-02 Toshiba Corp マイクロプロセッサ
JP2677202B2 (ja) * 1994-08-12 1997-11-17 日本電気株式会社 マイクロプロセッサ
JPH08305585A (ja) * 1995-05-11 1996-11-22 Matsushita Electric Ind Co Ltd 割込制御装置
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US5987601A (en) * 1997-02-14 1999-11-16 Xyron Corporation Zero overhead computer interrupts with task switching
KR100263908B1 (ko) * 1997-07-23 2000-08-16 윤종용 디지탈 다기능 디스크 롬 시스템의 데이타 처리장치 및 방법
US5913049A (en) * 1997-07-31 1999-06-15 Texas Instruments Incorporated Multi-stream complex instruction set microprocessor
US6154832A (en) * 1998-12-04 2000-11-28 Advanced Micro Devices, Inc. Processor employing multiple register sets to eliminate interrupts
US6668317B1 (en) * 1999-08-31 2003-12-23 Intel Corporation Microengine for parallel processor architecture
US6983350B1 (en) 1999-08-31 2006-01-03 Intel Corporation SDRAM controller for parallel processor architecture
US6427196B1 (en) 1999-08-31 2002-07-30 Intel Corporation SRAM controller for parallel processor architecture including address and command queue and arbiter
WO2001016715A1 (en) 1999-09-01 2001-03-08 Intel Corporation Branch instructions in a multithreaded parallel processing system
WO2001016702A1 (en) 1999-09-01 2001-03-08 Intel Corporation Register set used in multithreaded parallel processor architecture
US7191309B1 (en) 1999-09-01 2007-03-13 Intel Corporation Double shift instruction for micro engine used in multithreaded parallel processor architecture
US6532509B1 (en) 1999-12-22 2003-03-11 Intel Corporation Arbitrating command requests in a parallel multi-threaded processing system
US6694380B1 (en) 1999-12-27 2004-02-17 Intel Corporation Mapping requests from a processing unit that uses memory-mapped input-output space
US6307789B1 (en) 1999-12-28 2001-10-23 Intel Corporation Scratchpad memory
US6625654B1 (en) 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US6631430B1 (en) 1999-12-28 2003-10-07 Intel Corporation Optimizations to receive packet status from fifo bus
US7620702B1 (en) 1999-12-28 2009-11-17 Intel Corporation Providing real-time control data for a network processor
US6661794B1 (en) 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
US6952824B1 (en) 1999-12-30 2005-10-04 Intel Corporation Multi-threaded sequenced receive for fast network port stream of packets
US6584522B1 (en) 1999-12-30 2003-06-24 Intel Corporation Communication between processors
US7480706B1 (en) 1999-12-30 2009-01-20 Intel Corporation Multi-threaded round-robin receive for fast network port
US6976095B1 (en) 1999-12-30 2005-12-13 Intel Corporation Port blocking technique for maintaining receive packet ordering for a multiple ethernet port switch
EP1122643A1 (de) * 2000-02-07 2001-08-08 Siemens Aktiengesellschaft Schaltungsanordnung und Verfahren zur Hardware-Interruptbehandlung
US7681018B2 (en) * 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
US20020053017A1 (en) * 2000-09-01 2002-05-02 Adiletta Matthew J. Register instructions for a multithreaded processor
JP2002189603A (ja) * 2000-12-19 2002-07-05 Fujitsu Ltd 計算機とその制御方法
US7020871B2 (en) * 2000-12-21 2006-03-28 Intel Corporation Breakpoint method for parallel hardware threads in multithreaded processor
JP3699003B2 (ja) * 2001-04-18 2005-09-28 Necマイクロシステム株式会社 データ処理装置および方法
US6603683B2 (en) * 2001-06-25 2003-08-05 International Business Machines Corporation Decoding scheme for a stacked bank architecture
US7487505B2 (en) 2001-08-27 2009-02-03 Intel Corporation Multithreaded microprocessor with register allocation based on number of active threads
US7216204B2 (en) 2001-08-27 2007-05-08 Intel Corporation Mechanism for providing early coherency detection to enable high performance memory updates in a latency sensitive multithreaded environment
US7225281B2 (en) 2001-08-27 2007-05-29 Intel Corporation Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms
US6868476B2 (en) 2001-08-27 2005-03-15 Intel Corporation Software controlled content addressable memory in a general purpose execution datapath
US7126952B2 (en) 2001-09-28 2006-10-24 Intel Corporation Multiprotocol decapsulation/encapsulation control structure and packet protocol conversion method
US7158964B2 (en) * 2001-12-12 2007-01-02 Intel Corporation Queue management
US7107413B2 (en) * 2001-12-17 2006-09-12 Intel Corporation Write queue descriptor count instruction for high speed queuing
US7269179B2 (en) * 2001-12-18 2007-09-11 Intel Corporation Control mechanisms for enqueue and dequeue operations in a pipelined network processor
US7895239B2 (en) * 2002-01-04 2011-02-22 Intel Corporation Queue arrays in network devices
US7181573B2 (en) * 2002-01-07 2007-02-20 Intel Corporation Queue array caching in network devices
US6934951B2 (en) 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US7181594B2 (en) * 2002-01-25 2007-02-20 Intel Corporation Context pipelines
US7610451B2 (en) 2002-01-25 2009-10-27 Intel Corporation Data transfer mechanism using unidirectional pull bus and push bus
US7149226B2 (en) * 2002-02-01 2006-12-12 Intel Corporation Processing data packets
US7437724B2 (en) * 2002-04-03 2008-10-14 Intel Corporation Registers for data transfers
US7471688B2 (en) 2002-06-18 2008-12-30 Intel Corporation Scheduling system for transmission of cells to ATM virtual circuits and DSL ports
US7337275B2 (en) 2002-08-13 2008-02-26 Intel Corporation Free list and ring data structure management
US7352769B2 (en) 2002-09-12 2008-04-01 Intel Corporation Multiple calendar schedule reservation structure and method
US7433307B2 (en) 2002-11-05 2008-10-07 Intel Corporation Flow control in a network environment
US6941438B2 (en) * 2003-01-10 2005-09-06 Intel Corporation Memory interleaving
TWI222597B (en) * 2003-03-14 2004-10-21 Mediatek Inc Method for accessing external memory of a microprocessor
US7443836B2 (en) 2003-06-16 2008-10-28 Intel Corporation Processing a data packet
US7213099B2 (en) 2003-12-30 2007-05-01 Intel Corporation Method and apparatus utilizing non-uniformly distributed DRAM configurations and to detect in-range memory address matches
WO2008122746A1 (en) * 2007-04-10 2008-10-16 Cambridge Consultants Limited Data processing apparatus
WO2010004245A1 (en) 2008-07-10 2010-01-14 Cambridge Consultants Limited Processor with push instruction
GB2461848B (en) * 2008-07-10 2013-01-30 Cambridge Consultants Data processing apparatus having a number of operating modes
US8825926B2 (en) * 2009-04-13 2014-09-02 Microchip Technology Incorporated Processor with assignable general purpose register set

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4091447A (en) * 1976-07-19 1978-05-23 Union Carbide Corporation Interrupt control system for a microcomputer
US4217638A (en) * 1977-05-19 1980-08-12 Tokyo Shibaura Electric Co., Ltd. Data-processing apparatus and method
US4250546A (en) * 1978-07-31 1981-02-10 Motorola, Inc. Fast interrupt method
JPS5757345A (en) * 1980-09-24 1982-04-06 Toshiba Corp Data controller
JPS6140650A (ja) * 1984-08-02 1986-02-26 Nec Corp マイクロコンピユ−タ
JPS61262922A (ja) 1985-05-17 1986-11-20 Fujitsu Ltd レジスタデ−タの高速スタツク回路
JPS6290728A (ja) * 1985-06-27 1987-04-25 Nec Corp 割込処理方法
JP2545789B2 (ja) * 1986-04-14 1996-10-23 株式会社日立製作所 情報処理装置
US5050067A (en) * 1987-08-20 1991-09-17 Davin Computer Corporation Multiple sliding register stacks in a computer
US5146581A (en) * 1988-02-24 1992-09-08 Sanyo Electric Co., Ltd. Subprogram executing data processing system having bank switching control storing in the same address area in each of memory banks
JPH0795277B2 (ja) * 1988-11-25 1995-10-11 日本電気株式会社 データ処理装置
JPH02183342A (ja) * 1989-01-10 1990-07-17 Fuji Electric Co Ltd 割込み制御装置
JPH0711793B2 (ja) * 1989-07-13 1995-02-08 株式会社東芝 マイクロプロセッサ

Also Published As

Publication number Publication date
DE69231957T2 (de) 2002-04-04
DE69231957D1 (de) 2001-08-30
EP0538817B1 (en) 2001-07-25
EP0538817A2 (en) 1993-04-28
US5557766A (en) 1996-09-17
EP0538817A3 (en) 1993-08-18

Similar Documents

Publication Publication Date Title
KR970008523B1 (ko) 프로세서
US3401376A (en) Central processor
US6223279B1 (en) Single chip microcomputer having a dedicated address bus and dedicated data bus for transferring register bank data to and from an on-line RAM
US5386563A (en) Register substitution during exception processing
EP0087978B1 (en) Information processing unit
US5729724A (en) Adaptive 128-bit floating point load and store operations for quadruple precision compatibility
US5115506A (en) Method and apparatus for preventing recursion jeopardy
US5740093A (en) 128-bit register file and 128-bit floating point load and store for quadruple precision compatibility
EP0239078B1 (en) Register saving/restoring system
JP2004157636A (ja) データ処理装置
EP0230350B1 (en) Protection of data in a multiprogramming data processing system
EP0385136B1 (en) Microprocessor cooperating with a coprocessor
JP3539984B2 (ja) プロセッサ
US4816992A (en) Method of operating a data processing system in response to an interrupt
EP0560393B1 (en) Microprocessor and data processing system with register file
JP4756599B2 (ja) データ処理装置
JP2007317232A (ja) データ処理装置
GB2156551A (en) Data processor
JPS6236575B2 (ko)
JPS6049352B2 (ja) デ−タ処理装置
US11782871B2 (en) Method and apparatus for desynchronizing execution in a vector processor
CN112799792B (zh) 一种嵌入式操作系统的任务上下文寄存器保护方法
JPH0397035A (ja) 記憶手段構成方式
JPH0245207B2 (ko)
JPS59218569A (ja) マイクロ・コンピユ−タ

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
G160 Decision to publish patent application
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20110920

Year of fee payment: 15

EXPY Expiration of term