KR100328162B1 - 정보처리회로와마이크로컴퓨터와전자기기 - Google Patents
정보처리회로와마이크로컴퓨터와전자기기 Download PDFInfo
- Publication number
- KR100328162B1 KR100328162B1 KR1019970020002A KR19970020002A KR100328162B1 KR 100328162 B1 KR100328162 B1 KR 100328162B1 KR 1019970020002 A KR1019970020002 A KR 1019970020002A KR 19970020002 A KR19970020002 A KR 19970020002A KR 100328162 B1 KR100328162 B1 KR 100328162B1
- Authority
- KR
- South Korea
- Prior art keywords
- stack pointer
- register
- instruction
- stack
- registers
- Prior art date
Links
- 230000010365 information processing Effects 0.000 title claims abstract description 34
- 238000000034 method Methods 0.000 claims abstract description 59
- 230000033001 locomotion Effects 0.000 claims abstract description 52
- 238000001784 detoxification Methods 0.000 claims 8
- 238000011084 recovery Methods 0.000 abstract description 12
- 238000010586 diagram Methods 0.000 description 19
- 230000006870 function Effects 0.000 description 12
- 238000007792 addition Methods 0.000 description 10
- 238000006073 displacement reaction Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 4
- 241000435574 Popa Species 0.000 description 3
- 230000010355 oscillation Effects 0.000 description 2
- 101100396933 Pseudomonas aeruginosa (strain ATCC 15692 / DSM 22644 / CIP 104116 / JCM 14847 / LMG 12228 / 1C / PRS 101 / PAO1) imm2 gene Proteins 0.000 description 1
- ATJFFYVFTNAWJD-UHFFFAOYSA-N Tin Chemical compound [Sn] ATJFFYVFTNAWJD-UHFFFAOYSA-N 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30163—Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/324—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
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
본 발명의 정보 처리 회로는 스택 포인터를 취급하는 처리를 짧은 명령 길이로 효율적으로 기술하여, 실행하는 것 및 레지스터 대피나 레지스터 복구 처리를, 효율적으로 기술하여, 인터럽트 처리 및 서브루틴 호출·복귀의 처리 속도를 향상시킨다. 상기 정보 처리 회로를 가지고 있는 CPU는 스택 포인터 전용의 레지스터 SP를 포함하고 있으며 SP를 암묵의 피연산자로 하는 스택 포인터 전용 명령군을 명령 디코더로 해독한다. 범용 레지스터, PC, SP, 주소 가산기, ALU, PC 인크리멘트, 내부 버스, 내부 신호선, 외부 버스 등을 사용하여 상기 스택 포인터 전용 명령군을 하드웨어적으로 실행한다. 상기 스택 포인터 전용 명령군은 SP 상대 로드명령이나 스택 포인터 이동 명령이나 call 명령이나 ret 명령이나 연속 푸시 명령이나 연속 팝 명령을 포함하고 있다.
Description
본 발명은 정보 처리 회로, 이 정보 처리 회로가 내장된 마이크로 컴퓨터, 및 상기 마이크로 컴퓨터를 사용하여 구성된 전자기기에 관한 것이다.
종래, 32비트 데이타를 처리할 수 있는 RISC 방식의 마이크로 컴퓨터로서는 32 비트폭의 고정길이 명령이 사용되고 있다. 그 이유는 고정 길이 명령을 사용하면, 가변길이 명령을 사용하는 경우에 비해, 명령의 디코딩에 필요한 시간을 단축할 수 있고, 또한 마이크로 컴퓨터의 회로 규모를 작게 할 수 있기 때문이다.
하지만, 32비트의 마이크로 컴퓨터에서도, 특히 32비트를 필요로 하지 않는 명령도 많다. 따라서 모든 명령을 32비트로 기술하면, 명령에 장황한 부분이 생기는 명령이 많아지며, 메모리의 사용 효율이 저하된다.
따라서, 본원의 발명자는 제어회로를 복잡하게 함이 없이 메모리의 사용 효율을 향상시키기 위해서, 처리할 수 있는 데이타의 비트폭보다 짧은 비트폭의 고정길이 명령을 처리하는 마이크로 컴퓨터에 대한 검토를 행해 왔다.
하지만, 예컨대 32비트 고정 길이의 명령을 단지 16비트의 고정 길이로 맞추면 이하와 같은 문제점이 발생한다.
즉, RISC 방식의 마이크로 컴퓨터에서는 처리 및 명령 세트의 범용성을 중시하므로, 스택 포인터를 취급하는 처리를 행하는 경우, 어느 한쪽의 범용 레지스터를 스택 포인터로서 사용하여, 범용 레지스터를 조작 대상으로 하는 명령을 사용하여 상기 처리를 행하고 있었다. 따라서, 이러한 처리를 기술할 때의 상기 명령에는 스택 포인터로서 사용하고 있는 범용 레지스터의 지정이 필요하게 된다.
예컨대, 스택 포인터에 소정의 오프셋치를 가산하여 얻어진 메모리 주소로 특정되는 데이타를 소정의 레지스터로 전송하는 처리를, 범용 레지스터를 조작 대상으로 하는 명령으로 기술하는 경우, 그 명령의 오브젝트 코드에는, 상기 오프셋치, 상기 소정의 레지스터를 특정하는 정보, 스택 포인터로서 사용하고 있는 레지스터를 특정하는 정보가 필요하게 된다.
이와 같이, 범용 레지스터를 조작 대상으로 하는 명령으로 스택 포인터를 취급하는 처리를 기술하는 경우, 오브젝트 코드로 지정하는 정보가 많아지기 때문에, 명령의 내용을 16비트의 고정 길이로 기술하기는 곤란하다. 여기에서 명령 길이를 예컨대 32비트로 하면, 명령 중에도 특히 명령에 32비트를 필요로 하지 않는 명령도 많으므로, 명령에 장황한 부분을 발생하는 명령이 많아지며, 메모리 사용 효율의 저하를 초래한다.
또한, 명령 길이가 길어지면 이를 저장하는데 필요한 메모리의 양도 증가하므로, 메모리의 효율적인 사용이라는 관점에서 고정길이 명령뿐만 아니라, 가능한한 짧은 명령을 사용하는 것이 바람직하다.
또한, 예컨대 C 언어와 같이 스택 포인터에 관련지어서 오토 변수의 기억 영역이 확보되는 언어로 기술된 프로그램을 실행하는 경우, 스택 포인터를 취급하는 명령이 많아지므로, 스택 포인터를 취급하는 명령을 효율적으로 기술하여 실행하는것이 바람직하다.
따라서, 스택 포인터를 취급하는 처리를 행하는 경우, 가능한 한 짧은 명령길이로 그 명령 내용을 기술하이 실행할 수 있는 구조가 요구되고 있다.
또한, 최근의 특히 RISC 방식의 CPU는 성능을 높이기 위해 내부에 많은 범용레지스터를 가지고 있다. 많은 레지스터를 내부에 가짐으로써 메모리에 액세스하지 않고도 CPU 내부에서 고속으로 많은 처리를 할 수 있기 때문이다. 이와 같이 내부 레지스터를 많이 가지고 있으면, 인터럽트 처리나 서브루틴 호출시의 레지스터 대피(退避, save)와 복구의 처리시, 대피하여야 할 레지스터 수가 많아진다.
이하, 스택계 명령 중에도 서브루틴으로 들어가거나 나올 때에 많이 이용하는 레지스터의 대피(待避), 복귀 명령을 예를 들어 종래 예를 설명한다.
통상, 마이크로 컴퓨터의 명령 세트는 CPU의 레지스터를 메모리에 설치한 스택에 대피하거나 복구하기 위한 명령을 가지고 있다. 이 때문에 전용의 명령을 가지고 있는 것, 혹은 레지스터 간접 주소지정 명령을 가지고 있는 것이 있다.
상기 대피하거나 복구하기 위한 명령에 관한 기술로서는, 인텔 사의 80386에 관하여, 「80386 프로그래밍」 (John H. Crawford, Patric P. Gelsigner 공저, 이와타니히로시 역)에 이하와 같은 기술이 있다.
즉, 레지스터를 스택에 기입하는 명령으로서 push, pusha, pushad가 있으며, 스택으로부터 레지스터에 데이타를 전달하는 명령으로서 pop, popa, popad가 있다.
push 명령으로 레지스터를 스택에 기입할 때는 push EAX와 같이 피연산자로서 레지스터를 지정한다. 이는 32비트 레지스터 EAX의 경우이다. 레지스터 EAX,ECX, EDX, EBX를 모두 스택에 쓰는 경우에는,
push EAX
push ECX
push EDX
push EBX
와 같이 push 명령을 반복한다.
이와 같이 push, pop 명령으로 레지스터를 1개씩 조작하면 오브젝트 코드의 크기가 커지고, 프로그램의 실행 스텝도 많아지며, 그 때문에 프로그램의 실행 시간이나 처리 동작은 보다 느려진다.
따라서, 80386이 가지고 있는 8개의 범용 레지스터 전부를 스택에 기입하기위해서는 pusha 또는 pushad 명령을 이용한다. pusha는 8개의 레지스터의 각각의 하위 16비트 레지스터를 대상으로 하고, pushad는 32비트를 대상으로 한다. pusha, pushad에 의해 push 명령을 8회 반복하는 것을 생략할 수 있다.
pop, popa, popad 명령에 대해서도 마찬가지이다.
push 명령을 반복하는 것이 불리한 점으로는 프로그램 코드가 길어진다는점, 1명령마다 페치(fetch)하여 실행하므로 실행이 느리다는 점이다. 이러한 점은 상기 pusha, pushad에 의해, 상기 8개의 레지스터를 모두 스택에 기록하는 경우에 크게 개선된다. 하지만, 4개의 경우라든가 6개의 경우 등과 같이 8 미만의 레지스터를 기록하는 경우에는 이 점은 개선되지 않는다.
즉, 80386과 같이 pusha, pushad, popa, popad 명령으로 모든 레지스터를 조작하면, 레지스터의 전부를 대피 ·복구할 필요가 없을 때도, 이 사이클이 길고 느린 이용하지 않으면 안된다. 이러한 경우, 명령은 하나의 명령으로 끝나지만 명령의 실행 사이클은 길어진다는 문제가 생긴다.
또한, call 명령이나 복귀 명령 등으로 서브루틴으로 분기하거나, 호출된 루틴으로 복귀할 때에는, 복귀할 위치의 주소로서 필요하게 되는 프로그램 카운터의 대피나 복구의 처리가 필요하게 된다. 종래의 RISC 방식의 CPU에서는, 이들 처리를 소프트웨어적으로 실현하고 있었다. 즉, 상기 처리를 기술한 어셈블러 명령(오브젝트 코드)을 실행함으로써, 상기 프로그램 카운터의 대피나 복구의 처리를 행하고 있었다. 이 때문에, call 명령이나 복귀 명령은 오브젝트 코드의 증가가 초래되고, 또한 1명령마다 패치하여 실행하므로 실행 속도의 둔화가 초래된다.
본 발명의 목적은 스택 포인터를 취급하는 처리를 짧은 명령 길이로 효율적으로 기술하여, 실행할 수 있는 구조를 가지고 있는 정보 처리 회로와 마이크로 컴퓨터와 전자기기를 제공하는 데 있다.
또한 본 발명의 다른 목적은 레지스터 대피나 레지스터 복구의 처리를 효율적으로 기술하여, 인터럽트 처리 및 서브루틴 호출·복귀의 처리 속도가 빠른 정보처리 회로와 마이크로 컴퓨터와 전자기기를 제공하는 데 있다.
도 1은 본 실시예의 CPU의 회로 구성의 개략을 설명하기 위한 도면.
도 2는 본 실시예의 CPU가 가지고 있는 레지스터 세트를 나타내는 도면.
도 3은 스택 포인터의 일반적인 동작에 대해 설명하기 위한 도면.
도 4는 스택 포인터 전용 명령의 사용예와 메모리에 설치된 스택의 사용 상태 및 스택 포인터의 상태에 대해 설명하기 위한 도면.
도 5는 메모리상의 오토변수를 레지스터로 전송하는 처리를 설명하기 위한 도면.
도 6A, 도 6B는 SP 상대 로드 명령 및 범용 로드 명령의 비트 필드를 나타낸 도면.
도 7은 워드 데이타 판독의 SP 상대 로드 명령의 동작을 설명하기 위한 흐름도.
도 8은 워드 데이타 기록의 SP상대 로드 명령의 동작을 설명하기 위한 흐름도.
도 9A 내지 도 9F는 복수의 루틴에 걸쳐서 프로그램이 실행되는 경우의 각 루틴에 의한 메모리상의 스택의 사용 상태 및 스택 포인터의 상태를 설명하기 위한 도면.
도 10A, 도 10B는 스택 포인터 이동 명령 및 범용 연산 명령의 비트 필드를 나타낸 도면.
도 11은 가산 스택 포인터 이동 명령의 동작을 설명하기 위한 흐름도.
도 12는 감산 스택 포인터 이동 명령의 동작을 설명하기 위한 흐름도.
도 13은 call 명령과 ret 명령에 의한 프로그램의 실행의 제어를 설명하기 위한 도면.
도 14는 PC상대 서브루틴 호출명령의 비트 필드를 나타낸 도면.
도 15는 PC상대 서브루틴 호출명령의 동작을 설명하기 위한 흐름도.
도 16은 ret 명령의 동작을 설명하기 위한 흐름도.
도 17A, 도 17B는 push 명령 실행시의 움직임을 모식적으로 나타낸 도면.
도 18A, 도 18B는 pop 명령 실행시의 움직임을 모식적으로 나타낸 도면.
도 19는 pushn, popn 명령의 비트 도표를 나타낸 도면.
도 20은 연속 푸시 명령(pushn), 연속 팝 명령(popn)을 실행하는 하드웨어 구성을 설명하기 위한 블록도.
도 21은 pushn 명령의 동작을 설명하기 위한 흐름도.
도 22는 popn 명령의 동작을 설명하기 위한 흐름도.
도 23은 본 실시의 형태의 마이크로 컴퓨터의 하드웨어 블록도.
※ 도면의 주요부분에 대한 부호의 설명 ※
11 : 범용 레지스터 13 : 프로세서 상태 레지스터
20 : 명령 디코더 40 : ALU
50 : 메모리 60 : 버스 제어 유닛
상기 목적을 달성하기 위해, 본 발명은 스택 포인터 전용으로 사용되는 스택포인터 전용 레지스터와; 이 스택 포인터 전유 레지스터를 암묵(暗默)의 피연산자로 하는 오브젝트 코드를 가지고, 상기 스택 포인터 전용 레지스터를 기초로 하는 처리가 기술된 스택 포인터 전용 명령군의 오브젝트 코드를 해독하여, 상기 오브젝트 코드를 기초로 제어신호를 출력하는 해독 수단과; 상기 스택 포인터 전용 명령군을 상기 제어신호 및 상기 스택 포인터 전용 레지스터의 내용을 기초로 실행하는 실행 수단을 포함하고 있는 것을 특징으로 하고 있다.
이때, 오브젝트 코드란 일반적으로 번역 프로그램에 의해 기계어로 번역한 결과로 얻어지는 프로그램 코드를 말하지만, 본 발명에서는 번역 프로그램에 의한 것인지 아닌지에 관계없이, 기계어로 기술되어 있는 프로그램 코드를 포함하는 넓은 개념으로 사용한다.
본 발명의 정보 처리 회로는 스택 포인터 전용의 스택 포인터 전용 레지스터를 가지고 있으며, 상기 스택 포인터 전용 레지스터를 조작 대상으로 하는 스택 포인터 전용 명령군의 해독, 실행을 행하도록 구성되어 있다.
상기 스택 포인터 전용 명령군은 스택 포인터 전용 레지스터를 취급하기 위한 전용의 연산 코드를 가지고 있으므로, 오브젝트 코드의 피연산자에 스택 포인터를 특정하기 위한 정보를 필요로 하지 않는다. 바꿔 말하면, 상기 스택 포인터 전용 명령군은 스택 포인터 전용 레지스터를 암묵의 피연산자로 하고 있다. 이 때문에, 범용 레지스터의 1개를 스택 포인터에 할당하고, 범용 레지스터를 조작 대상으로 하는 명령을 사용하여 스택 포인터의 조작을 행하는 경우와 비교하여, 짧은 명령 길이로 스택 포인터를 취급하는 명령을 기술할 수 있다.
따라서, 본 발명에 의하면, 스택 포인터를 취급하는 처리를 짧은 명령 길이로 기술하여 실행할 수 있는 정보 처리 회로를 제공할 수 있다. 또한, 명령을 기억하는 메모리의 사용 효율이 좋은 정보 처리 회로를 제공할 수 있다.
본 발명은 상기 스택 포인터 전용 명령군이 전송 레지스터 특정 정보를 오브젝트 코드에 가지고 있는 로드 명령을 포함하고 있으며, 상기 해독 수단이 상기 로드 명령을 해독하여 상기 실행 수단이 상기 로드 명령을 실행할 때, 메모리상의 소정의 제1영역으로부터 소정의 제1레지스터측으로의 데이타의 전송과 상기 소정의 제1레지스터로부터 상기 소정의 제1영역측으로의 데이타의 전송 중 적어도 하나의 전송을, 상기 스택 포인터전용 레지스터에 의해 특정되는 메모리 주소 및 상기 전송레지스터 특정정보에 의해 특정되는 레지스터 주소를 기초로 행하는 것을 특징으로 하고 있다.
이때, 상기 스택 포인터 전용 명령군에 포함되는 상기 로드 명령은 메모리와 레지스터간에서 데이타의 전송을 행하는 명령이고, 메모리로부터 레지스터측으로의 전송과 레지스터로부터 메모리측으로의 전송 중 적어도 하나의 전송을 포함하는 개념이다. 또한, 데이타의 내용은 주소 데이타도 포함하는 개념이다. 메모리 주소란 전송시의 메모리상의 영역을 특정하기 위한 주소를 말한다.
상기 로드 명령은 스택 포인터 전용 레지스터를 조작대상으로 하기 위한 전용의 연산 코드를 가지고 있기 때문에, 오브젝트 코드의 피연산자에 스택 포인터를 특정하기 위한 정보를 필요로 하지 않는다. 이 때문에, 스택 포인터에 관련된 메모리 주소를 가지고 있는 메모리상의 영역과 레지스터간에서 데이타의 전송 처리를 행하는 경우 짧은 명령 길이로 기술할 수 있다.
본 발멍은 상기 로드 명령이 상기 메모리상의 상기 제1영역의 주소를 특정하기 위한 오프셋에 관한 정보인 오프셋 정보를 오브젝트 코드에 포함하고 있으며, 상기 실행 수단이 상기 스택 포인터 전용 레지스터의 내용과 상기 오프셋 정보에 의해 상기 메모리 주소를 특정하는 것을 특징으로 하고 있다.
이때, 오프셋 정보란 오프셋치를 직접 즉치(卽値)로 지정한 것이라도 되고, 오프셋치가 저장된 레지스터 등의 주소를 지정하는 경우와 같이 간접적으로 지정하는 경우라도 된다. 오프셋 정보를 포함한 상기 로드 명령이 실행되는 경우, 전송시에 필요한 상기 메모리 주소는 스택 포인터 전용 레지스터의 내용 및 오프셋 정보를 기초로 특정된다.
따라서, 스택 포인터 및 상기 오프셋 정보를 기초로 특정되는 메모리 주소를 가지고 있는 메모리상의 영역과 레지스터간에서 데이타의 전송 처리를 행하게 하는 경우, 짧은 명령 길이로 기술할 수 있다.
또한, 본 발명에 의하면, 예컨대 스택 포인터가 항상 워드 경계를 가리키는 구조의 정보처리 회로에 있어서도, 적당한 오프셋 정보를 지정함으로써, 스택상의 임의의 영역을 지정할 수 있다. 이 때문에, 데이타의 크기에 따라서 효율적으로 스택에 저장할 수 있으며, 스택의 사용 효율의 향상을 도모할 수 있다.
본 발명은 상기 오프셋 정보가 즉치로 주어진 즉치 오프셋 정보와 메모리상의 소정의 데이타의 크기에 관한 데이타 크기 정보를 포함하고 있으며, 상기 실행수단이, 이 즉치 오프셋 정보와 데이타 크기 정보를 기초로, 즉치 오프셋 정보를 왼쪽으로 논리 쉬프트를 함으로써, 오프셋치를 생성하여, 상기 스택 포인터전용 레지스터의 내용과 상기 오프셋치를 가산한 값에 의해 상기 메모리 주소를 특정하는 것을 특징으로 하고 있다.
이때, 즉치 오프셋 정보란 오프셋치를 직접 즉치로 지정한 것을 말한다. 또한 데이타 크기 정보란 전송하여야 할 메모리상 데이타의 크기를 말한다. 통상 데이타 크기는 8비트의 바이트 데이타나, 16비트의 하프워드 데이타, 32비트의 워드데이타 등의 2n(n은 3이상)으로 나타난다. 메모리상의 주소는 바이트 단위로 주어져 있고, 하프워드 데이타는 하프워드 경계에 놓여지며, 워드 데이타는 워드 경계에 놓여진다. 따라서, 하프워드 데이타의 메모리 주소의 하위의 1비트는 0이 되며, 워드 데이타의 메모리 주소의 하위의 2비트는 00이 된다. 스택 포인터의 주소는 워드 경계를 가리키고 있기 때문에, 하프워드 데이타의 메모리 주소를 생성하는 경우의 오프셋치의 하위의 1비트는 0이 되며, 워드 데이타의 메모리 주소를 생성하는 경우의 오프셋치의 하위의 2비트는 00이 된다.
또한, 왼쪽 논리 쉬프트란 데이타의 비트열을 왼쪽으로 물려 놓고, 쉬프트에 의하여 데이타의 우측에 나오는 열린 비트(쉬프트 인 비트)에 0이 들어가는 쉬프트를 말한다.
본 발명에 의하면, 데이타 크기를 기초로, 상기 오프셋 즉치정보의 왼쪽 쉬프트를 행하기 위해서, 데이타 크기에 의해서 일의적으로 결정되는 하위의 비트를 생략하여, 즉치 오프셋 정보를 기술할 수 있다. 따라서, 즉치 오프셋 정보를 효율적으로 지정할 수 있으며, 바이트 이외의 데이타 크기인 경우, 그대로 지정하는 경우와 비교하며, 보다 큰 오프셋치에 지정이 가능하게 된다.
또한 상기 명령을 사용함에 따라, 데이타의 메모리측에의 기록, 판독시에 그 데이타 크기에 따른 적절한 경계위치가 선택된다.
본 발명은, 상기 스택 포인터 전용 명령군이 오브젝트 코드로 이동 정보를 가지어 스택 포인터를 이동하기 위한 스택 포인터 이동 명령을 포함하고 있으며, 상기 해독 수단이, 상기 스택 포인터 이동 명령을 해독하고, 상기 실행 수단이, 상기 스택 포인터 이동 명령을 실행할 때, 상기 이동 정보를 기초로, 상기 스택 포인터 전용 레지스터의 내용을 변경하는 것을 특징으로 하고 있다.
상기 스택 포인터 이동 명령은 스택 포인터 전용 레지스터를 조작 대상으로 하기 위한 전용의 연산 코드를 가지고 있으므로, 오브젝트 코드의 피연산자에 스택포인터를 특정하기 위한 정보를 필요로 하지 않는다. 이 때문에, 스택을 이동시키고자 하는 경우, 짧은 명령 길이로 기술할 수 있다. 따라서, 스택에 저장되어 있는 데이타의 처리나 스택 포인터에 관련지어 기억되어 있는 데이타의 처리를 행할 때의 명령의 기술량을 삭감할 수 있다.
본 발명에 의하면 스택의 이동을 용이하게 행할 수 있으므로, 상이한 개별루틴에 있어서 각각 다른 스택영역을 확보하여 처리를 행하는 경우에 유효하다. 즉 루틴마다 스택 포인터를 이동시키는 처리를 행함으로써, 광범위한 영역에 걸치는 주소 지정이 가능하게 된다.
본 발명은 상기 이동 정보가, 즉치로 주어진 즉치 이동 정보를 포함하고 있으며, 상기 명령실행 수단이, 상기 즉치 이동 정보와 상기 스택 포인터 전용 레지스터의 내용을 가산하는 처리와 상기 스택 포인터 전용 레지스터의 내용으로부터상기 즉치 이동 정보를 감산하는 처리 중 적어도 하나의 치리를 행하는 것을 특징으로 하고 있다.
본 발명에 의하면, 스택 포인터의 값을 즉치 이동 정보에서 지정된 양만큼 상방 또는 하방으로 이동시키는 처리를 짧은 명령 길이로 기술할 수 있다.
본 발명은 연속하여 순서가 매겨진 복수의 레지스터를 포함하고 있으며, 상기 스택 포인터 전용 명령군이, 복수 레지스터 특정정보를 오브젝트 코드에 가지고있는 연속 푸시 명령과 연속 팝 명령 중 적어도 하나의 명령을 포함하고 있으며, 상기 해독 수단은 상기 연속 푸시 명령파 연속 팝 명령 중 적어도 하나의 명령을 해독하고, 상기 명령실행 수단은 상기 연속 푸시 명령과 상기 연속 팝 명령 중 적어도 하나의 명령을 실행할 때, 상기 복수의 레지스터로부터 메모리에 설치된 스택 측으로 연속하여 복수회 푸시하는 처리와 상기 스택으로부터 상기 복수의 레지스터에 연속하여 복수회 팝하는 처리중 적어도 하나의 처리를, 상기 스택 포인터 전용 레지스터의 내용에 의해 특정된 메모리 주소 및 상기 복수 레지스터 특정정보를 기초로 행하는 것을 특징으로 하고 있다.
푸시란 메모리에 설치된 스택에 데이타를 겹쳐 쌓아 저장하는 것, 팝이란 상기 스택로부터 데이타를 인출하는 것을 말한다. 여기에 있어 푸시하는 처리 및 팝하는 처리는, 상기 저장 및 인출 처리와, 그것에 따르는 스택 포인터의 갱신 처리를 포함하고 있다. 통상의 정보처리 회로는 1의 레지스터로부터 스택에 데이타나 주소를 저장하기 위한 PUSH 명령, 스택의 내용을 레지스터에 인출하는 POP 명령을 가지고 있다. 상기 PUSH 명령이나 POP 명령은 레지스터와 스택의 데이타의 주고받음이나, 상기 주고받음에 따르는 스택 포인터의 갱신을 행한다.
따라서 복수의 레지스터와 스택에서 데이타 등의 주고받음을 행하는 경우에는, 이들 명령을 복수회 실행하는 것이 필요하게 된다.
하지만 본 발명에 따르면, 상기 연속 푸시 명령이나 상기 연속 팝 명령을 실행하면, PUSH 명령을 연속하여 복수회 실행하는 경우나 POP 명령을 연속하여 복수회 실행하는 경우와 같은 효과가 얻어진다. 즉 복수의 레지스터와 스택의 사이의 데이타의 주고받음 및 상기 주고받음에 따르는 스택 포인터의 갱신을 1 명령으로 실행하는 것이 가능하다. 이 때문에 복수의 레지스터와 스택의 사이의 데이타의 전송을 행하는 경우, PUSH 명령 혹은 POP 명령을 반복하는 것에 의해 오브젝트 코드 크기가 증대하는 것을 방지할 수 있다. 또한 프로그램 실행 스텝이 길게 되는 것을 회피하여, 쓸데없이 사이클을 소비하지 않고, 인터럽트 처리 및 서브루틴호출 ·복귀의 처리속도의 향상을 도모할 수 있다.
본 발명은 0으로부터 n-1까지의 레지스터 번호로 특정된 n 개의 범용 레지스터를 포함하고 있으며, 상기 연속 푸시 명령과 연속 팝 명령 중 적어도 하나의 오브젝트 코드가 상기 복수 레지스터 특정정보로서 상기 레지스터 번호 중 어느 번호에 지정된 최종 레지스터 번호를 포함하고 있으며, 상기 실행 수단은 레지스터 0에서부터 상기 최종 레지스터 번호로 특정된 레지스터까지의 복수의 레지스터로부터 메모리에 설치된 스택측으로 연속하여 복수회 푸시하는 처리와 상기 스택으로부터 상기 복수와 레지스터측으로 연속하여 복수회 팝하는 처리 중 적어도 하나의 처리를 상기 스택 포인터 전용 레지스터의 내용에 의해 특정된 메모리 주소를 기초로행하는 것을 특징으로 하고 있다.
통상 범용 레지스터가 복수 있는 경우, 레지스터를 특정하기 위한 주소를 가지고 있다. 본 발명에서는 0으로부터 n-1까지의 연속된 레지스터 번호로 상기 레지스터를 특정하고 있다.
본 발명에 의하면, 상기 최종 레지스터 번호에 임의의 레지스터 번호를 지정함으로써, 레지스터 0로부터 상기 최종 레지스터 번호까지의 연속한 복수의 레지스터와 메모리의 사이에서 데이타를 푸시하는 처리와 팝하는 처리 중 적어도 하나의 처리가 행해진다. 따라서, 레지스터 번호 0의 레지스터로부터 차례로 레지스터를 사용하는 구조를 가지고 있는 프로그램의 실행에 있어서, 레지스터의 대피나 복구를 효율적으로 행할 수 있다.
본 발명은 상기 실행 수단이, 상기 복수의 레지스터 중 어느 소정의 레지스터의 내용을, 상기 스택 포인터 전용 레지스터로 특정되는 메모리 주소를 기초로 메모리에 설치된 스택에 기록하는 기록수단과, 상기 기록수단에 의한 상기 스택에의 기록 회수를 카운트하는 기록회수 카운트 수단과, 상기 카운트수단에 의해서 카운트된 상기 기록 회수와 상기 복수 레지스터 특정 정보의 값을 비교하는 비교수단을 포함하고 있으며, 상기 기록수단은 제1입력과 제2입력을 가산기로 가산하여 기록할 위치를 특정하기 위한 기록 메모리 주소를 생성하는 기록 메모리 주소 생성수단과, 상기 가산기의 제1입력이, 연속전용 명령의 실행 개시시에는 스택 포인터 전용 레지스터의 내용이 되도록 제어하며, 그 이후는 기록 주소 생성수단에 의해서 생성된 기록 주소가 되도록 제어하는 제1입력 제어수단과, 상기 가산기의 제2입력에 상기 스택으로부터 1워드를 기록할 때의 오프셋치를 출력하는 제2입력 제어수단과, 상기 복수 레지스터 특정 정보로부터 상기 기록회수를 감산한 값으로 특정되는 레지스터의 내용을 상기 기록 메모리 주소를 기초로 상기 스택에 기록하는 수단을 포함하고 있으며, 상기 비교수단의 비교결과를 기초로, 복수의 레지스터로부터의 상기 스택측에의 기록 및 기록 종료를 제어하는 것을 특징으로 하고 있다.
또한 본 발명은 상기 명령 실행 수단이, 상기 스택 포인터 전용 레지스터로 특정되는 메모리 주소를 기초로 메모리에 설치된 스택의 내용을 판독하고, 상기 복수의 레지스터 중 어느 레지스터가 소정의 레지스터에 내장되어 있는 판독수단과, 상기 판독수단에 의한 상기 스택으로부터의 판독 회수를 카운트하는 판독회수카운트 수단과, 상기 카운트 수단에 의해서 카운트된 상기 판독회수와 상기 복수 레지스터 특정정보의 값을 비교하는 비교수단을 포함하고 있으며, 상기 판독수단이, 제1입력과 제2입력을 가산기로 가산하여 기록할 위치를 특정하기 위한 기록 메모리 주소를 생성하는 기록 메모리 주소 생성수단과, 상기 가산기의 제1입력이, 연속전용 명령의 실행 개시시에는 스택 포인터 전용 레지스터의 내용이 되도록 제어하여, 그 이후는 판독 주소 생성수단에 의해서 생성된 판독 주소가 되도록 제어하는 제1입력 제어수단과, 상기 가산기의 제2입력에 상기 스택으로부터 1워드를 기록할 때의 오프셋치를 출력하는 제2입력 제어 수단과, 상기 판독메모리 주소를 기초로 상기 스택의 내용을 판독하고, 상기 기록회수를 기초로 특정되는 레지스터에 저장하는 판독수단을 포함하고 있으며, 상기 비교수단의 비교결과에 근거하여, 상기 스택의 내용의 판독 및 판독 종료를 제어하는 것을 특징으로 하고 있다.
이와 같이 하면 연속된 값으로 순서를 매겨서 특정되는 복수의 레지스터의 스택측으로의 대피 또는 스택으로부터 연속한 값으로 특정되는 복수의 레지스터로의 복구를 카운트수단과 간단한 시퀀스 제어만으로 실현가능하다. 따라서 적은 게이트수의 정보 처리 회로에서 실현할 수 있기 때문에, 원칩의 마이크로 컴퓨터 등에 알맞은 것이다.
본 발명은 프로그램 카운터 전용의 프로그램 카운터 레지스터를 포함하고 있으며, 상기 스택 포인터 전용 명령군이, 서브루틴으로 분기하는 명령 및 상기 서브루틴으로부터의 복귀명령인 분기 명령을 포함하고 있으며, 상기 해독 수단이, 상기 분기 명령을 해독하여, 상기 명령실행 수단이, 상기 분기 명령을 실행할 때, 메모리에 설치된 스택의 소정의 제2영역으로의 상기 프로그램 카운터레지스터의 내용의 대피와 상기 제2영역의 내용의 프로그램 카운터 레지스터로의 복귀 중 적어도 하나를, 상기 스택 포인터 전용 레지스터에 의해 특정되는 메모리 주소를 기초로 행하는 수단과, 상기 대피 및 상기 복귀를 기초로 상기 스택 포인터 전용 레지스터의 내용을 갱신하는 수단을 포함하고 있는 것을 특징으로 하고 있다.
여기에서 서브루틴이란 인터럽트 처리 및 예외처리 및 디버그 처리 루틴 등도 포함하고 있다. 따라서 서브루틴으로 분기하는 명령이란 서브루틴 등을 호출하는 명령, 인터립트 처리 및 예외처리 및 디버그 처리 루틴 등으로 분기하기 위한 소프트웨어 인터립트 명령, 소프트웨어 디버그 인터럽트 명령 등도 포함하고 있다. 또한 서브루틴으로부터의 복귀명령에는, 인터럽트 처리 및 예외 처리 및 디버그처리 루틴 등으로부터의 복귀 명령을 포함하고 있다.
통상 서브루틴으로 분기하는 경우나 상기 서브루틴으로부터 복귀하는 경우 프로그램 카운터의 대피나 복귀가 필요하게 된다.
본 발명에서는, 상기 서브루틴으로 분기하는 명령의 실행 및 서브루틴으로부터 복귀하는 명령을 실행할 때에 상기 프로그램 카운터의 대피 및 복귀도 동시에 행한다. 즉, 본 발명의 정보 처리 회로는 서브루틴으로 분기하는 명령과 상기 서브루틴으로부터의 복귀 명령 중 어느 하나의 명령으로 프로그램 카운터의 대피 및 복귀가 가능한 회로구성을 가지고 있다. 이 때문에 서브루틴으로의 분기나 서브루틴으로부터의 복귀에 따라 필요하게 되는 상기 프로그램 카운터의 대피 및 복귀의 명령이 불필요하게 되며, 명령 수를 삭감할 수 있다. 또한, 쓸데없는 사이클을 소비하지 않고, 서브루틴 호출 ·복귀 등의 다른 루틴으로 분기시의 처리속도의 향상을 도모할 수 있다.
또한, 소프트웨어 인터럽트 명령이 발생한 경우에는, 예컨대 CPU 등의 정보처리 회로의 현재의 상태를 유지하는 프로세서 상태 레지스터의 대피 및 복귀도 필요하게 된다. 따라서, 소프트웨어 인터럽트 명령 등의 경우는 상기 명령의 실행시에 프로세서 상태 레지스터의 대피 및 복귀도 동시에 행하도록 하는 것이 바람직하다.
본 발명은 연속하여 순서가 매겨진 복수의 레지스터와, 어느 범용 레지스터에 할당된 스택 포인터를 포함하고 있는 정보 처리 회로로서, 복수 레지스터 특정정보를 오브젝트 코드에 가지고 있는 연속 푸시 명령과 연속 팝 명령 중 적어도 하나의 명령의 오브젝트 코드를 해독하여, 상기 오브젝트 코드를 기초로 제어신호를출력하는 수단과, 상기 연속 푸시 명령과 상기 연속 팝 명령 중 적어도 하나의 명령을 실행할 때, 상기 복수의 레지스터로부터 메모리에 설치된 스텍측으로 연속하여 복수회 푸시하는 처리와 상기 스택으로부터 상기 복수의 레지스터측으로 연속하여 복수회 팝하는 처리 중 적어도 하나의 처리를, 상기 제어신호 및 상기 어느 범용 레지스터에 할당된 스택 포인터의 내용에 의해 특정되는 메모리 주소 및 상기 복수 레지스터 특정정보에 의거하여 행하는 수단을 포함하고 있는 것을 특징으로 하고 있다.
본 발명은, 범용 레지스터를 스택 포인터로서 사용하는 경우의 상기 연속 푸시 명령 및 상기 연속 팝 명령에 관한 것이다.
본 발명에 의하면, 상기 연속 푸시 명령이나 상기 연속 팝 명령을 실행하면, PUSH 명령을 연속하여 복수회 실행하는 경우나 POP 명령을 연속하여 복수회 실행하는 경우와 같은 효과가 얻어진다. 즉 복수의 레지스터와 스택 사이의 데이타의 주고받음 및 상기 주고받음에 따르는 스택 포인터의 갱신을 1 명령으로 실행하는 것이 가능하다. 이 때문에 복수의 레지스터와 스택의 사이의 데이타의 전송을 행하는 경우, PUSH 명령 혹은 POP 명령을 반복함으로써 오브젝트 코드 크기가 증대하는 것을 방지할 수 있다. 또한 프로그램 실행 스텝이 길게 되는 것을 회피하여, 쓸데없는 사이클을 소비하지 않고, 인터럽트 처리 및 서브루틴 호출 ·복귀의 처리속도의 향상을 도모할 수 있다.
본 발명은 정보 처리 회로는 RISC 방식인 것을 특징으로 하고 있다.
RISC 방식의 정보 처리 회로는, 하드웨어를 소형화하여 고속화를 도모하는것을 목적으로서 설계되어 있다. 이 때문에 범용 레지스터를 많이 가지고 있고, 명령세트를 범용성이 높은 것으로 제한함으로씨 명령수의 삭감을 도모하고 있다.
따라서 RISC 방식의 정보 처리 회로에서는 스택 포인터를 범용 레지스터에 할당하여, 스택 포인터를 취급하는 경우는 범용 레지스터를 취급하는 명령세트를 사용하여 처리를 행하고 있었다. 하지만 이와 같은 방법에서는 명령 길이가 커지고 메모리의 사용 효율이 좋지 않다.
본 발명에 의하면, RISC 방식의 정보 처리 회로에서, 명령 길이를 삭감하는 것이 가능하고, 메모리의 사용 효율을 올릴 수 있다.
본 발명의 정보 처리 회로는 고정길이의 명령을 해독하여, 상기 명령을 기초로 실행처리를 행하는 것을 특징으로 하고 있다.
고정길이 명령을 사용하면 가변길이 명령을 사용하는 경우와 비교하여, 명령의 디코드에 요하는 시간을 단축할 수 있고, 정보 처리 회로의 회로 규모를 작게 할 수 있다. 고정길이 명령을 채용하는 경우, 명령에 장황한 부분이 나오는 것을 방지하고 메모리를 효율적으로 사용하기 위해서는 각 명령에 필요한 비트수는 격차가 적고, 가능한한 짧은 쪽이 바람직하다.
본 발명에 의하면, 일반적으로 명령 길이가 길어지기 쉬운 스택 포인터를 취급하는 명령의 명령 길이를 짧게 할 수 있다. 따라서 고정길이 명령을 채용한 경우라도 명령에 장황한 부분이 나오는 것을 방지하고, 메모리를 효율적으로 사용하는 것이 가능하다.
본 발명의 마이크로 컴퓨터는 상술한 본 발명의 정보 처리 회로와 기억수단과 외부의 입출력을 행하는 수단을 포함하고 있는 것을 특징으로 하고 있다.
본 발명에 따라, 처리속도가 빠르고 메모리의 사용 효율이 양호한 마이크로 컴퓨터를 제공할 수 있다.
본 발명의 마이크로 컴퓨터는 상기 스택 포인터에 관련지어 오토변수의 기억영역이 확보되는 구조를 가지고 있는 언어의 프로그램이 실행되는 것을 특징으로 하고 있다.
스택 포인터에 관련지어 오토변수의 기억영역이 확보되는 구조를 가지고 있는 언어로서, 예컨대 C 언어가 있다. 이와 같은 언어의 프로그램의 처리를 본 발명의 마이크로 컴퓨터가 행하는 경우, 처리속도 및 메모리의 사용 효율을 효과적으로 향상시키는 것이 가능하다.
본 발명의 전자기기는 상술한 본 발명의 마이크로 컴퓨터를 포함하고 있는 것을 특징으로 하고 있다.
본 발명에 의하면, 처리속도가 빠르며 메모리의 사용 효율이 좋은 정보 처리회로를 내장하고 있기 때문에, 염가로 고기능의 전자기기를 제공할 수 있다.
발명의 바라직한 실시예의 설명
이하, 본 실시예를 도면을 기초로 설명한다.
(실시예1)
(1) 본 실시예의 CPU의 구성
본 실시예의 CPU는 파이프라인과 로드 ·스토어형의 구조에 의해서, 거의 모든 명령을 1사이클로서 실행한다. 모든 명령은 16비트의 고정 길이로 기술되어 있고, 본 실시예의 CPU의 처리하는 명령은 극히 작은 오브젝트 코드 길이를 실현하고 있다.
특히 본 실시예의 CPU는 스택 포인터를 취급하는 처리를 효율적으로 기술하여 실행하기 위해서 스택 포인터 전용의 레지스터를 가지고 있으며, 상기 스택 포인터 전용 레지스터론 암묵의 피연산자로 하는 오브젝트 코드를 가지고 있는 스택 포인터 전용명령군의 명령세트를 해독, 실행할 수 있도록 구성되어 있다.
도 1은 본 실시예의 CPU의 회로구성의 개략을 설명하기 위한 도면이다.
본 CPU(10)는 범용 레지스터(11), 프로그램 카운터가 내장되어 있는 PC(12), 프로세서 상태 레지스터(PSR, 13), 스택 포인터 전용의 레지스터인 SP(14)를 포함하고 있는 레지스터 세트와, 명령 디코더(20), 즉치 생성기(22), 주소 가산기(30), ALU(40), PC 인크리멘터(44), 및 각종 내부 버스(72,74,76,78), 각종 내부신호선(82,84,86,88) 등을 포함하고 있다.
상기 명령 디코더(20)는 입력된 오브젝트 코드를 해독하여, 상기 명령을 실행하기 위해 필요한 처리를 행하고, 필요한 제어신호를 출력한다. 또한, 상기 명령 디코더(20)는 상기 스택 포인터 전용 명령의 오브젝트 코드를 해독하여 상기 명령을 기초로 제어신호를 출력하는 상기 해독 수단으로도 기능한다.
즉치 생성기(22)는 오브젝트 코드에 포함된 즉치를 기초로, 실행시에 사용하는 32비트의 즉치 데이타를 생성하거나, 각 명령의 실행에 필요한 0, ±1, ±2, ±4의 상수 데이타를 생성하기도 한다. PC 인크리멘터(44)는 명령의 실행 사이클을 기초로 PC(12)에 저장된 프로그램 카운터의 갱신을 행한다. 주소 가산기(30)는 각종 레지스터에 저장되어 있는 정보나 즉치 생성기(22)로서 생성되는 즉치 데이타의 가산을 행하여 메모리로부터 데이타를 판독할 때 필요한 주소 데이타를 생성한다. ALU(40)는 수치연산이나 논리연산을 행한다.
또한, 상기 CPU는 내부에 각종 버스나 신호선을 포함하고 있고 있다. PA_BUS(72)나 PB_BUS(74)는 ALU(40)의 입력신호를 전송하는 기능 등을 가지고 있다. WW_BUS(76)는 ALU(40)의 연산결과를 인출하여 범용 레지스터에 전송하는 기능 등을 가지고 있다. XA_BUS(78)는 범용 레지스터(11)나 SP(14)로부터 인출한 주소데이타를 전송하는 기능 등을 가지고 있다. IA신호선(82)은 CPU 내부의 각부에서 외부의 I_ADDR_BUS(92)로 주소 데이타를 전송한다. DA 신호선(84)은 CPU 내부의 각부로부터 외부의 D_ADDR_BUS(96)으로 주소 데이타를 전송한다. DIN 신호선(86)은 CPU 외부의 D_DATA_BUS(98)로부터 CPU 내부의 각부로 데이타를 전송한다. DOUT 신호선(88)은 CPU 내부의 각부로부터 외부의 D_DATA_BUS(98)로 데이타를 전송한다. IA 입력 전환(83)은 IA 신호선(82)으로 출력되는 각종 신호(PA_BUS(72), WW_BUS (76), PC(12), PC(+2))의 전환을 행한다. DOUT 입력 전환(89)은 DOUT 신호선(88)으로 출력되는 각종 신호( PA_BUS(72), WW _BUS(76), PC(12), PC(+2) )의 전환을 행한다.
또한, CPU(10)의 상기 각부는 상기 명령 디코더(20)의 출력하는 제어신호를 기초로, 명령의 실행을 햄함으로써, 스택 포인터 전용 명령군을, 상기 제어신호 및 상기 스택 포인터 전용 레지스터의 내용을 기초로 실행하는 상기 실행 수단으로서도 기능한다.
본 CPU(10)는 16비트의 명령 데이타 버스(I_DATA_BUS, 94)와, 명령 데이타 액세스를 위한 명령 주소 버스(I_ADDR_BUS, 92)와, 32비트의 데이타 버스(D_DATA_BUS, 98)와, 데이타 액세스를 위한 데이타 주소 버스(D_ADDR_BUS, 96)와, 제어 신호를 위한 도시하지 않는 제어 버스를 통해 외부와 신호의 주고받음을 행한다.
(2) 본 실시예의 CPU를 가지고 있는 레지스터 세트의 설명
다음에 본 실시예의 CPU가 가지고 있는 레지스터 세트의 개요에 대해, 필요한 부분에 대해 설명한다.
도 9에는 본 실시예의 CPU가 가지고 있는 레지스터 세트가 도시되어 있다. 본 실시예의 CPU는 16개의 범용 레지스터(11)와, PC(12), PSR(13), SP(14), 도시하지 않은 ALR (산술연산 로우 레지스터)(15), 도시하지 않은 AHR(산술연산 하이 레지스터)(16)을 포함하고 있는 레지스터 세트를 가지고 있다.
상기 범용 레지스터(11)는 기능적으로 등가인 32 비트의 레지스터이고, R0에서부터 R15까지 부호가 부여되어 있다. 상기 범용 레지스터(11)는 데이타 연산시에 그리고 주소 계산시에 사용된다.
또한, PC(12)는 32비트 길이의 인크리멘트 카운터이고, 현재 실행중의 명령의 주소인 프로그램 카운터를 유지하고 있다. 본문속에서, 레지스터명을 가리킬 때는 PC이라고 하여, PC에 저장된 값을 가리킬 때는 프로그램 카운터라고 한다.
상기 PC(12)는 로드 명령 등으로 직접 액세스할 수 없다. call 명령, int 명령이나 인터립트, 예외가 발생하면, 프로그램 카운터는 PC(12)로부터 판독되어 스택에 대피된다. 이와 같이 분기 명령이 실행되면 누락된 주소가 PC에 설정된다. 조건 분기 명령로 분기하는 경우도 같다. 그리고, ret 명령이나 reti 명령에 의해, 되돌아오고 명령 주소가 스택으로부터 판독되고, PC(12)에 복귀된다.
PSR (프로세서 상태 레지스터, 13)는 플래그가 할당되어 있는 32비트 레지스터이고, CPU의 현재의 상태를 유지하고 있다. int명령, 인터럽트, 예외 등이 발생하면, 각각의 처리루틴으로 분기할 때에, 그 때의 PSR의 상태가 스택으로 대피된다. 반대로 reti 명령의 실행으로, 대피되어 있던 값이 PSR에 복귀된다.
SP(14)는 32비트의 스택 포인터 전용의 레지스터로, 스택의 선두번지를 나타내는 스택 포인터가 저장되어 있다. 본문 중에서, 레지스터명을 가리킬 때는 SP라고 하며, SP에 저장된 값을 가리킬 때는 스택 포인터라고 한다. 단지, 스택 포인터는 항상 워드의 경계를 가리키므로, 상기 스택 포인터의 하위의 2비트는 항상 0이다. 상기 스택 포인터는 본 실시예에서 준비하고 있는 스택 포인터 전용 명령군에 포함되는 각종 명령의 실행이나 트랩의 발생에 따라 갱신된다. 스택 포인터의 갱신을 행하는 스택 포인터 전용 명령으로는, call 명령이나 ret 명령 등의 다른 루틴으로 분기하는 명령, 스택 포인터 이동 명령, pushn명령, popn 명령 등이 있다. 예컨대 call 명령이 실행되면, 우선 스택 포인터가 워드 크기 4만 디크리멘트(-4)되며, PC(12)는 스택으로 대피된다. 또한, ret 명령이 실행되면, 반대로 스택으로부터 복귀될 주소가 PC에 로드되며, 스택 포인터는 워드 크기만큼 인크리멘트(+4)된다. int 명령이 실행되거나 인터럽트, 예외 등이 발생할 때에는 스택에 PC 나 PSR의 값이 이하의 순서로 대피된다.
1) SP=SP-4
2) 스택 포인터로 지시된 스택의 선두번지에 PC를 대피시킨다.
3) SP=SP-4
4) 스택 포인터로 지시된 스택의 선두번지에 PSR를 대피시킨다.
reti 명령이 실행되면, 상기와는 반대의 처리를 행하여 CPU는 이전의 상태로 복귀된다. 이와 같이 call 명령이나 ret 명령이나 int 명령이 실행되면, 상기 실행을 기초로 스택 포인터가 갱신된다. 각 명령의 상세한 사항에 관해서는 후술한다.
또한, 본 실시예에 있어서 트랩이란 명령의 실행에 비동기로 발생하는 인터럽트와 명령의 실행에 의해 발생하는 예외를 합친 것을 말한다. 트랩이 발생하면, CPU는 프로그램 카운터(PC)와 프로세서 상태 레지스터(PSR)를 스택에 대피한 후 트랩 테이블로부터 백터 테이블을 판독하고, 그 트랩에 대응하는 처리루틴으로 분기한다. 트랩의 발생에 따라, PSR 중의 IE 비트(인터럽트 인에이블)는 클리어되며, 그 이상의 마스크 가능한 인터럽트의 발생이 금지된다. 다시, 마스크 가능한 외부 인터럽트를 인에이블로 하기 위해서는, PSR에 대한 로드 명령을 이용하여 PSR의 IE 비트에 1을 기록하여 설정한다.
트랩 처리로부터 원래의 루틴으로 복귀하기 위해서는 reti 명령을 이용한다. reti 명령을 실행하면, CPU는 스택으로부터 PSR, PC의 순서대로 판독하며, PSR를 원래의 값으로 되돌리는 동시에, 복귀 주소로 분기한다. 또한, 예외로는 디버그 예외, 주소 부정렬 예외, 오버플로 예외, 제로제산 예외 등이 있다.
ALR(산술연산 로우 레지스터, 15) 및 AHR (산술연산 하이 레지스터, 16)에관해서는 설명을 생략한다.
CPU가 가지고 있는 특수 레지스터 PSR(13), SP(14), ALR(15), AHR(16)는 로드 명령을 이용하여 범용 레지스터 사이에서 데이타 전송을 행할 수 있다. 각 레지스터는 특수 레지스터 번호를 가지고 있고, 이 번호를 이용하여 액세스된다.
(3) 스택 및 스택 포인터에 대한 설명
스택은 메모리에 설치된 일시 기억영역에서, 연속한 영역의 하방으로부터 데이타가 선반상으로 겹쳐 쌓여 기억된다. 스택 포인터는 스택 메모리의 가장 위 즉 마지막에 기억된 데이타의 주소를 나타낸다.
스택 포인터의 일반적인 동작에 대해 도 3을 이용하여 설명한다.
도 3의 100은 메모리에 설치된 스택 영역을 나타낸다. 사선부분(102)이 마지막에 저장된 데이타라고 하면, SP(14)에 저장된 스택 포인터는 상기 데이타의 메모리 주소(1000)를 나타낸다. 또한, 사선부분(102)의 하방 영역(104)은 이미 데이타가 저장되어 있는 영역에서, 사선부분(102)의 상방 영역(106)은 지금부터 데이타가 저장되는 영역을 나타낸다.
스택 포인터는 항상 워드의 경계를 나타내고 있기 때문에, 스택에 정보를 기록할 때는 SP(14)의 저장된 스택 포인터를 4만큼 위로 움직이고, 상기 스택 포인터가 나타내는 장소에 정보를 저장한다. 또한 스택에 저장되어 있는 정보를 인출할때는, 현재 SP(14)가 나타내는 주소의 정보를 인출하여, SP(14)에 저장된 스택 포인터를 4만큼 아래로 움직인다. 이와 같이 스택 포인터는 항상 마지막에 스택에 저장된 정보의 저장 주소를 나타낸다.
(4) 스택 포인터 전용 명령군에 대한 설명
통상 RISC 방식의 CPU에서는 범용 레지스터를 스택 포인터로서 사용하지만, 본 실시예에서는 스택 포인터 전용의 레지스터인 SP(14)를 가지고 있고, 상기 스택 포인터 전용 명령군의 조작 대상이 된다.
상기 스택 포인터 전용 명령군은 스택 포인터 전용의 레지스터인 SP(14)를 암묵의 피연산자로 하고, SP(14)를 이용하여 조작을 행하는 복수의 명령의 총칭이다. 상기 스택 포인터 전용 명령군은 SP 상대 로드 명령(ld 등), 스택 포인터 이동 명령(add, sub), 서브루틴으로 분기하는 명령(call 등) 및 복귀명령(ret 등) 등의 다른 루틴으로 분기하는 명령, 연속 루시 명령(pushn), 연속 팝 명령(popn)을 포함하고 있다.
이러한 명령에 공통되는 것은 스택 포인터 전용 명령이기 때문에, 오브젝트코드에 스택 포인터를 특정하기 위한 정보가 필요하지 않다는 것이다. 따라서 스택 포인터를 사용하는 처리를 짧은 명령 길이로 효율적으로 기술할 수 있는 효과도 공통된다.
또한, 이러한 명령을 사용하면 메모리에 설치된 스택에 기억되어 있는 정보의 처리를 효율적으로 행할 수 있다. 또한, 인터럽트 처리 및 서브루틴 호출 ·복귀의 처리를 효율적으로 행할 수 있다.
여기에서, 서브루틴이 호출되는 경우의 상기 스택 포인터 전용 명령의 사용예와 메모리에 설치된 스택의 사용 상태 및 스택 포인터의 상태에 대해 도 4를 이용하여 설명한다. 도 4의 메인 프로그램(500)과 서브루틴(520)은 C 컴파일러가 작성한 오브젝트 코드로 기술된 프로그램이다. 540은 메모리상의 스택의 상태를 나타낸다. 502는 범용 레지스터(R0∼R3)를 사용하는 처리가 행해지고 있는 것을 나타낸다. 506은 서브루틴 call명령을 나타낸다. 메인 프로그램(500)에서 서브루틴 call명령이 실행되는 서브루틴 call 명령전, 즉 504에 나타내는 앞의 명령이 실행된 후 스택 포인터(SP)는 메모리상의 스택(540)상의 ①의 주소를 나타내고 있었다고 한다. 상기 서브루틴 call 명령이 실행되면, 실행의 제어는 서브루틴(520)에 걸친다. 이때, 본 실시예에서는 상기 스택 포인터 전용 명령인 서브루틴으로 분기하는 명령(call 명령)이 실행된다. 상기 명령이 실행되면, 스택 포인터(SP)의 값은 자동적으로 -4만큼 인크리멘트되어(도 4의 ②SP 참조), 상기 스택 포인터②SP가 나타내고 있는 스택상의 영역(544)에 메인 프로그램으로의 복귀 주소가 저장된다.
그리고, 서브루틴(520)측에서는, 실행 초기에 메인 프로그램에서 사용되고 있던 범용 레지스터 R0 ∼ R3에 저장되어 있던 값을 스택으로 전송하는 처리를 행한다. 524는 범용 레지스터 R0 ∼ R3에 저장되어 있던 값을 스택에 대피하는 처리를 행하는 스택 포인티 전용 명령인 연속 푸시 명령(pushn)을 나타낸다. 상기 명령이 실행되면 범용 레지스터 R0 ∼ R3에 저장되어 있던 값이 연속적으로 스택으로전송되며, 도 4의 550에 도시된 바와 같이, 스택(540)에 저장된다. 이 처리의 실행이 끝나면(524③), 스택 포인터(SP)는 546을 나타낸다(③SP).
다음에 서브루틴(520)에서는 서브루틴에서 사용하는 오토변수 영역의 확보를 행한다. 526에 나타낸 add 명령은 스택 포인터 전용 명령인 스택 포인터 이동 명령이고, 스택 포인터를 상방으로 이동시켜서 서브루틴(520)에서 사용하는 스택 영역을 확보한다. 상기 명령이 실행되면 스택 포인터(SP)는 X 바이트만 상방의 위치(548)로 이동하고(④SP), 주2)에 나타내는 서브루틴이 사용하는 오토변수의 영역이 확보된다.
528은 서브루턴(520)에서 오토변수와 범용 레지스터 R0 ∼ R3을 사용한 처리를 행하는 것을 나타낸다. 이때 스택 포인터의 위치는 ⑤SP을 가리키며, 오토변수의 로드는 스택 포인터 전용 명령인 SP 전용로드 명령을 이용하여 행하여진다.
529는 메모리상에 저장된 오토변수 S1을 범용 레지스터 R1으로 전송하는 상기 SP 로드 명령을 나타낸다. 상기 오토변수 S1는 스택 포인터(⑤SP)로부터 Y 바이트만 오프셋치를 가지고 있는 장소에 저장되어 있다. 상술한 바와 같이 서브루틴의 528의 처리가 한창일 때에는 스택 포인터는 이동하지 않기 때문에, 오토변수의 메모리 주소는 스택 포인터 + 오프셋치로 특정되며, 상기 SP 전용로드 명령을 사용하여 효율적으로 범용 레지스터와 주고 받음을 행할 수 있다.
또한, 서브루틴(520)으로부터 메인 프로그램(500)으로 되돌아가기 이전에는 스택에 대피되어 있던 범용 레지스터 R0∼R3의 값을 범용 레지스터 R0 ∼ R3으로 복귀시키며, 스택 포인티가 메인 루틴으로의 복귀 주소가 저장되어 있는 영역(544)를 가리키도록 하지 않으면 안된다. 그 때문에 우선, 526의 스틱 포인터 이동 명령로 이동시킨 스택 포인터를 원래의 위치로 되돌려준다. 530에 나타낸 sub 명령은 스택 포인터 전용 명령인 스택 포인터 이동 명령이고, 스택 포인터를 하방으로 이동시킨다. 상기 명령이 실행되면, 스택 포인터는 546으로 이동한다 (⑥SP 참조). 다음에 스택에 저장되어 있는 정보(550)를 범용 레지스터 R0 ∼ R3에 복구하는 처리를 행한다. 532는 스택의 정보를 범용 레지스터 R0 ∼ R3으로 전송하는 처리를 행하는 스택 포인터 전용 명령인 연속 팝 명령(popn)을 나타낸다. 상기 명령이 실행되면 스택에 저장되어 있던 값(550)이 범용 레지스터 R0 ∼ R3에 연속적으로 전송되며, 도 4의 550에 나타낸 바와 같이, 스택(540)에 저장된다. 이 처리의 실행이 끝나면(532⑦), 스택 포인터는 544를 나타낸다 (⑦SP 참조).
534는 복귀명령을 나타낸다. 상기 복귀명령이 실행되면, 실행의 제어는 메인 프로그램(500)에 걸친다. 이 때 본 실시예에서는 상기 스택 포인터 전용 명령인 복귀명령(ret 명령)이 실행된다. 상기 명령이 실행되면, ⑦SP가 가리키는 스택 에어리어에 저장된 메인 프로그램으로의 복귀 주소가 나타내는 명령으로 분기한다. 즉 메인 프로그램(500)의 다음 명령(507)으로 되돌아간다. 그리고 스택 포인터의 값은 자동적으로 +4만큼 인크리멘트되어 메인 프로그램(500)이 사용하는 스택의 선두 영역으로 이동한다 (도 4의 ⑧SP 참조).
이하 상기 각 스택 포인터 전용 명령에 대해 각각 명령의 설명 및 상기 명령을 실행하기 위한 회로 구성 및 실행시의 움직임 등에 대해 상세히 설명한다.
(5) 스택 포인터 상대 로드 명령
상술한 바와 같이 C 컴파일러는 오토변수의 영역을 스택 포인터에 관련지어 기억하는 오브젝트 코드를 작성한다. 구체적으로는, C 컴파일러는 스택 포인터로부터 오프셋이 X의 부분에 Y 바이트만 오토변수의 영역을 확보하는 규정으로 되어있다.
도 5는 메모리상의 오토변수를 레지스터로 전송하는 처리를 설명하기 위한 도면이다. 오토변수 a는 워드 데이타, 오토변수 b, c는 하프워드 데이타, 오토변수 d ∼ g는 바이트 데이타이다. SP에 저장된 스택 포인터는 스택상의 오토변수가 저장되는 영역(600)의 선두 영역의 주소인 1000을 나타낸다. 오토변수 a를 저장하기 위한 영역으로서 상기 스택 포인터를 메모리 주소로 하는 스택상의 영역이, 오토변수 b, c를 저장하기 위한 영역으로서 각각 스택 포인터 + 2, 스택 포인터 + 4 를 메모리 주소로 하는 스택상의 영역이 오토변수 d ∼ g를 저장하기 위한 영역으로서 각각 스택 포인터 + 5, 스택 포인터 + 6, 스택 포인터 + 7, 스택 포인터 + 8을 메모리 주소로 하는 스택상의 영역이 확보되어 있다. 그리고 소정의 처리를 실행할 때에는, 스택 포인터 + 오프셋치의 메모리 주소로 특정되는 오토변수와 범용 레지스터간에서 데이타의 전송 처리가 필요하게 된다.
본 실시예의 CPU에서는 이러한 전송 처리를 짧은 오브젝트 코드로 기술하여 효율성 좋게 실행하기 위해서, 스택 포인터 전용 명령의 하나인 SP 상대 로드 명령로서, 다음에 나타내는 명령세트를 준비하고 있다.
ld. b %Rd, [% sp + imm 6] … (1)
ld. ub %Rd, [% sp + imm 6] … (2)
ld. h %Rd, [% sp + imm 7] … (3)
ld. uh %Rd, [% sp + imm 7] … (4)
ld. w %Rd, [% sp + imm 8] … (5)
ld. b [%sp + imm 6], %Rs … (6)
ld. h [%sp + imm 7], %Rs … (7)
ld. w [%sp + imm 8], %Rs … (8)
(1) ∼ (8)은 오브젝트 코드를 어셈블러로 기술한 것이다. (1)은 스택으로부터 바이트 데이타를 사인 확장하여 레지스터로 전송하는 명령이고, (2)는 스택으로부터 바이트 데이타를 제로 확장하여 레지스터로 전송하는 명령이고, (3)은 스택으로부터 하프워드 데이타를 사인 확장하여 레지스터로 전송하는 명령이며, (4)는 스택으로부터 하프워드 데이타를 제로 확장하여 레지스터로 전송하는 명령이고, (5)는 스택으로부터 워드 데이타를 레지스터로 전송하는 명령이고, (6)은 레지스터로부터 바이트 데이타를 스택으로 전송하는 명령이고, (7)은 레지스터로부터 하프워드 데이타를 스택으로 전송하는 명령이고, (8)은 레지스터로부터 워드 데이타를 스택으로 전송하는 명령이다.
[%sp+imm6], [%sp+imm7], [%sp+imm8]는 각각 즉치 오프셋 정보를 나타내고 있고, 상기 즉치 오프셋 정보를 기초로 실행시에 생성되는 오프셋치와 SP(14)에 저장된 스택 포인터의 같을 가산하여 메모리 주소가 생성된다. [%sp+imm6]는 메모리상의 데이타의 데이타 크기가 바이트일 때, [%sp+imm7]는 메모리상의 데이타의 데이타 크기가 하프워드일 때, [%sp+imm8]은 메모리상의 데이타의 데이타 크기가 워드일 때의 즉치 오프셋 정보이다. 이들은 어느 것이나, 후술하는 도 6A에 나타내는 용도로 오브젝트 코드상에서는 6비트의 즉치 오프셋 정보(614)로서 기술되어 있다. 하지만 명령 실행시에는, imm7인 경우(즉, 데이타 크기가 하프워드인 경우), 즉치 오프셋 정보(614)는 1비트 왼쪽 쉬프트하여 스택 포인터에 가산하여야 할 오프셋치가 생성된다. 또한, imm8의 경우(즉 데이타 크기가 워드인 경우), 즉치 오프셋 정보(614)는 2비트 왼쪽 쉬프트하여 스택 포인터에 가산하여야 할 오프셋치가 생성된다.
여기에서 스택은 메모리에 설치된 일시기억 영역을 말하며, 상기 메모리 주소로, 예컨대 도 5에 나타내는 스택상의 오토변수 a ∼ g의 위치를 나타낼 수 있다.
도 6A는 상기 (1) ∼ (8)의 SP 상대 로드 명령의 비트 필드(610)이다. 도 6A에 도시된 바와 같이 SP 상대 로드 명령은 조작기능이 메모리와 레지스터간의 데이타의 전송인 것을 나타내는 연산 코드(612, 6비트), 즉치로 지정된 즉치 오프셋 정보(6비트, 614)와, 전송대상이 되는 범용 레지스터의 레지스터번호(616, 4비트)를 포함하고 있으며, 16비트의 오브젝트 코드를 가지고 있다. 상기 연산코드(612)는 SP(14)를 조작대상으로 하는 로드 명령인 것을 나타내는 공통의 코드와 상기 데이타 크기, 사인확장 및 제로확장별에 따라서 주어지는 다른 코드를 포함하고 있고 있다. 따라서 연산 코드에 의해 SP(14)에 저장된 스택 포인터를 조작대상으로 하는 것을 알 수 있으므로, 오브젝트 코드의 피연산자에 스택 포인터에 관한 정보를 필요로 하지 않는다. 즉치 오프셋 정보(614)는 전송대상이 되는 데이타의 스택 포인터로부터의 오프셋치를 생성하기 위한 정보이다. 이것은 상술한 바와 같이 데이타 크기를 막론하고 6비트로 지정된다. 전송대상이 되는 레지스터의 주소(616)에는 상기 (1) ∼ (5) 의 경우는 스택으로부터 판독된 데이타가 저장되는 레지스터의 레지스터 번호가, 상기 (6) ∼ (8)의 경우는 스택에 기록되는 데이타가 저장되어있는 레지스터의 레지스터 번호가 들어가 있다.
도 6B는 스택 포인터로서 범용 레지스터를 사용한 경우에 사용하는 범용 레지스터를 조작대상으로 하는 로드 명령(이하 범용로드 명령이라고 한다)의 오브젝트 코드의 비트 필드(620)의 예를 나타낸다.
도 6B에 도시하는 바와 같이 범용로드 명령은 조작기능이 메모리와 범용 레지스터간의 데이타의 전송인 것을 나타내는 연산 코드(622, 6비트), 즉치로 지정된 즉치 오프셋 정보(624, 6비트)와 스택 포인터로서 사용하는 범용 레지스터를 특정하는 제1레지스터번호(626, 4비트)와, 전송대상이 되는 범용 레지스터를 특정하는 제2레지스터 번호(628, 4비트)를 포함하고 있으며, 20비트의 오브젝트 코드를 가지고 있다. 범용 마이크로 컴퓨터로서는 명령 길이는 8비트 단위이므로 24비트 혹은 32비트 명령이 된다.
도 6A, 도 6B는, 모두 스택 포인터에 오프셋치를 가산하여 특정되는 메모리 주소와 레지스터간에서의 데이타의 전송 처리를 행하는 경우에 사용하는 명령의 오브젝트 코드를 나타내고 있지만, 상기 도면에 도시된 바와 같이, SP 상대 로드 명령은 범용로드 명령과 비교하여 짧은 오브젝트 코드로 기술할 수 있다.
이하, 스택으로부터 레지스터로 데이타를 전송하는 명령으로서 (5)의 명령(스택으로부터 레지스터에 워드 데이타를 판독하는 명령이기 때문에, 이하 워드 데이타 판독의 SP 상대 로드 명령이라고 한다). 레지스터로부터 스택에 데이타를 전송하는 명령으로서 (8)의 명령(레지스터로부터 스택에 워드 데이타를 각각 넣는 명령이므로, 이하 워드 데이타 기록의 SP 상대 로드 명령이라고 한다)을 예로 들어 이 명령을 실행하기 위한 구성 및 실행시의 동작에 대해 설명한다.
우선, 도 1을 이용하여 이 명령을 실행하기 위해서 필요한 하드웨어 구성에 대해 설명한다. 이리한 명령은 외부의 메모리(ROM, 52)로부터 I_DATA_BUS(94)를 통해 전송되어 이 CPU(10)의 명령 디코더(20)에 입력된다. 상기 명령 디코더(20)로, 명령이 해독되고 명령의 실행에 필요한 도시하지 않는 각종신호가 출력된다. 또한 상기 즉치 생성기(22)는 데이타 크기에 따라서 상기 즉치 오프셋 정보(614)의 왼쪽 쉬프트를 행하며, 필요에 따라서 사인 확장 및 제로 화장 및 실행에 사용하는 오프셋치를 생성하며, PB_BUS(74)에 출력한다. SP(14)는 스택 포인터를 저장하고 있고, 이 값은 주소 가산기(30)의 입력에 접속된 XA_BUS(78)에 출력할 수 있다. 주소 가산기(30)의 다른 한쪽의 입력은 즉치 생성기(22)의 출력인 PB_BUS(74)에 접속되어 있다. 주소 가산기(30)의 출력(ADDR)은 DA 신호선(84)을 통과하여 외부의 D_ADDR_BUS(96)에 접속되어 있다.
버스 제어 유닛(BCU, 60)은 CPU로부터 출력되는 각종 요구 신호(외부버스에 출력된 신호 등)를 기초로, 스택영역을 포함하고 있는 메모리(RAM, ROM, 50,52)와의 데이타의 입출력을 제어하고, READ, WRITE 제어신호를 출력한다.
우선 워드 데이타 판독의 SP 상대 로드 명령의 실행시의 동작에 대해 설명한다.
워드 데이타 판독의 SP 상대 로드 명령이 실행되면, SP(14)에 저장된 스택 포인터의 값과, 상기 즉치 오프셋 정보(614)를 기초로 즉치 생성기(22)가 생성한 오프셋치가 가산되며, 메모리 판독용의 메모리 주소가 생성된다. 그리고 상기 메모리 주소를 기초로 메모리상의 정보가 판독되며, 오브젝트 코드의 상기 레지스터 번호(616)로 특정되는 범용 레지스터로 전송된다.
도 7은 워드 데이타 판독의 SP상대 로드 명령의 동작을 설명하기 위한 흐름도이다.
상기 명령의 실행의 최초에 SP(14)에 저장되어 있는 스택 포인터가 XA_BUS(78)에 출력된다 (스텝, 210). 또한, 즉치 생성기(22)가 즉치 오프셋 정보로부터 생성한 오프셋치(imm)가 PB_BUS(74)에 출력된다(스템212). 주소 가산기(30)는 상기 XA_BUS(78)상의 값과 상기 PB_BUS(74)상의 값을 가산하여, 결과(ADDR)인 메모리의 판독 주소를 DA 신호선(84)을 통과하여 D_ADDR_BUS(96)에 출력한다(스텝214, 스텝216). 그리고 CPU에서 BCU(60)로의 데이타 판독 요구신호가 액티브하게 되며, 외부 메모리의 리드 사이클을 실행한다 (스텝(218)), 즉 상기 BCU(60)는 상기 요구 신호를 기초로, 상기 판독 주소를 메모리 주소로서 메모리로부터 데이타가 판독되고, D_DATA_BUS(98)에 출력되도록 제어한다. D_DATA_BUS(98)상의 데이타는 DIN 신호선(86)을 통해 WW_BUS(76)에 출력된다 (스텝(220)). 그리고 WW_BUS(76) 상의 값은 오브젝트 코드의 전송 대상이 되는 레지스터(Rs/Rd)의 주소(4비트)(616)에서 지정된 레지스터 번호를 가지고 있는 레지스터(%Rd)애 저장된다(스텝222).
다음에 워드 데이타 기록의 SP 상대 로드 명령의 실행시의 동작에 대해 설명한다.
워드 데이타 기록의 SP 상대 로드 명령이 실행되면, SP(14)에 저장된 스택 포인터의 값과, 상기 즉치 오프셋 정보(614)를 기초로 즉치 생성기(22)가 생성한 오프셋치가 가산되어, 메모리 기록용의 메모리 주소가 생성된다. 그리고 오브젝트코드의 상기 레지스터 번호(616)로 특정되는 범용 레지스터에 저장되어 있는 정보가, 상기 메모리 주소를 기초로 특정되는 메모리상의 영역으로 전송된다.
도 8은 워드 데이타 기록의 SP상대 로드 명령의 동작을 설명하기 위한 흐름도이다.
상기 명령의 실행의 최초에 SP(14)에 저장되어 있는 스택 포인터가 XA_BUS(78)에 출력된다 (스텝 230). 또한, 즉치 생성기(22)가 즉치 오프셋 정보로부터 생성한 오프셋치(imm)가 PB_BUS(74)에 출력된다(스텝(232)). 주소 가산기(30)는 상기 XA_BUS(78)상의 값과 상기 PB_BUS(74)상의 값을 가산하여, 결과(ADDR)의 메모리로의 기록 주소를 DA 신호선(84)을 통해 D_ADDR_BUS(96)에 출력한다(스텝(234), 스텝(236)). 또한, 오브젝트 코드의 전송 대상이 되는 레지스터(Rs/Rd)의 주소(4비트, 616)에서 지정된 레지스터 번호를 가지고 있는 레지스터(%Rd)에 저장되어 있는 데이타가 PA_BUS(72)에 출력된다 (스텝(238)). PA_BUS(72)상의 데이타는 DOUT 신호선(88)을 통해, D_DATA_BUS(98)에 출력된다(스텝(240)). 그리고 CPU에서 BCU(60)으로의 데이타 기록 요구 신호가 액티브하게 되며, 외부 메모리의 라이트 사이클을 실행한다 (스텝(242)). 즉 상기 BCU(60)는 상기 요구 신호를 기초로, 상기 기록 주소를 메모리 주소로서, D_ DATA_BUS(98)로 전송되어 온 데이타를 메모리(50)에 기록하는 동작을 제어한다.
(6) 스택 포인터 이동 명령
도 9A 내지 도 9F는 복수의 루틴에 걸쳐서 프로그램이 실행되는 경우의 각 루틴에 의한 메모리상의 스택의 사용 상태 및 스택 포인터의 상태를 설명하기 위한 도면이다.
도 9A에 도시하는 MAIN 루틴(210)의 소정의 처리(a)의 실행시에 메모리상의 스택 영역의 상태 및 스택 포인터(SP(14)에 저장되어 있는 값)의 상태를 도 9D에 도시된다. 222는 MAIN 루틴(210)에서 사용하기 위한 스택 영역을 나타내고 있고, 스택 포인터는 222의 선두 주소(232)를 나타낸다.
도 9B의 SUB_1루틴(212)은 상기 MAIN 루틴(210)으로부터 불리는 실행되는 서브루틴이다. 상기 SUB 1루틴(212)의 소정의 처리(b, 213)의 실행시에 있어서의 메모리상의 스택 영역의 상태 및 스택 포인터(SP에 저장되어 있는 값)의 상태를 도 9E에 도시된다. 224는 SUB 1루틴(212)으로 사용하기 위한 스택 영역을 나타내고 있고, 스택 포인터는 224의 선두 주소(234)를 나타낸다.
도 9C의 SUB 2루틴(214)은 상기 SUB 1루틴(210)으로부터 불리고 실행되는 서브루틴이다, 상기 SUB 2루틴(214)의 소정의 처리(c, 215)의 실행시에 있어서의 메모리상의 스택 영역의 상태 및 스택 포인터(SP에 저장되어 있는 값)의 상태를 도 9F에 도시된다. 226은 SUB 2루틴(214)애서 사용하기 위한 스택 영역을 나타내고, 스택 포인터는 226의 선두 주소(236)를 나타낸다.
이와 같이 복수의 서브루틴에 걸쳐서 실행이 행해지는 경우, 각 루틴에서 사용하는 스택 영역이 이동하기 때문에, 그것에 따른 스택 포인터의 값을, 각 루틴에서 사용하는 스택 영역의 선두로 이동하는 것이 행해진다.
본 실시예의 CPU에서는 이러한 스택 포인터의 이동 처리를 짧은 오브젝트 코드로 기술하여 효율성 있게 실행하기 위해서, 스택 포인터 전용 명령의 하나인 스택 포인터 이동 명령로서, 다음에 나타내는 명령 세트를 준비하고 있다.
add %sp, imm12 … (9)
sub %sp, imm12 … (10)
(9) (10)은 오브젝트 코드를 어셈블러에서 기술한 것이다. (9)는 SP(14)에 저장된 스택 포인터에 대한 즉치 가산 명령이고, (10)은 SP(14)에 저장된 스택 포인터에 대한 즉치 감산 명령이다, imm(12)은 명령의 오브젝트 코드에 포함된 10비트의 즉치를 2비트 좌측 방향으로 쉬프트한 후, 제로 확장되어 32비트 데이타가 되며, SP(14)에 저장된 스택 포인터와의 연산에 사용된다.
도 10A는 상기 (9) (10)의 스택 포인터 이동 명령의 비트 필드(630)이다. 도 10A에 도시된 바와 같이 스택 포인터 이동 명령은 조작 기능이 SP(14)에 저장된 스택 포인터로의 이동 정보의 가산 및 감산인 것을 나타내는 연산 코드(632, 6비트), 즉치로 지정된 즉치 이동 정보(634, 10비트)를 포함하고 있으며, 16비트의 오브젝트 코드를 가지고 있다. 상기 연산 코드(632)는 SP(14)을 조작 대상으로 하는 스택 포인터 이동 명령인 것을 나타내는 공통의 코드와 가산 및 감산별에 따라서 주어지는 다른 코드를 포함하고 있다. 따라서 연산 코드에 의해 SP(14)에 저장된 스택 포인터를 조작 대상으로 하는 것을 알 수 있으므로, 오브젝트 코드의 피연산자에 스택 포인터에 관한 정보를 필요로 하지 않는다. 즉치 이동 정보(634)는 스택 포인터에 가산 또는 감산을 행하는 오프셋치를 생성하기 위한 정보이다.
도 10B는 스택 포인터로서 범용 레지스터를 사용한 경우에 사용하는 가산 및 감산 명령(이하 범용 연산 명령이라고 한다)의 오브젝트 코드의 비트 필드(640)이 예를 나타낸다.
도 10B에 도시된 바와 같이 범용 연산 명령은 조작기능이 범용 레지스터의 값으로의 즉치 연산 정보의 가산 및 감산인 것을 나타내는 연산 코드(642, 6비트), 즉치로 지정된 즉치 연산 정보(644, 10비트)와 조작 대상이 되는 범용 레지스터를 특정하는 레지스터 번호(646, 4비트)를 포함하고 있으며, 20비트의 오브젝트 코드를 가지고 있다. 범용 마이크로 컴퓨터에서는 명령 길이는 8비트 단위이기 때문에 24비트 혹은 32비트 명령이 된다.
도 10A, 도 10B는 모두 스택 포인터에 즉치를 가산 및 감산하는 처리를 행하는 경우에 사용하는 명령의 오브젝트 코드이지만, 상기 도면에 도시된 바와 같이, 스택 포인터 이동 명령은 범용연산 명령과 비교하여 짧은 오브젝트 코드로 기술할 수 있다.
이하, (9)의 SP에 대한 즉치 가산 명령(이하 가산 스택 포인터 이동 명령이라고 함)과, (10)의 SP에 대한 즉치 감산 명령(이하 감산 스택 포인터 이동 명령이라고 함)을 실행하기 위한 구성 및 실행시의 동작에 대해 설명한다.
틴(300)을 사용하여 이 명령을 실행하기 위해서 필요한 하드웨어 구성에 대해 설명한다. 이러한 명령은 외부의 메모리(ROM, 52)로부터 I_DATA_BUS(94)를 통해 전송되며, CPU(10)의 명령 디코더(20)에 입력된다. 상기 명령 디코더(20)로, 명령이 해독되고 명령의 실행에 필요한 도시하지 않는 각종신호가 출력된다. 또한 상기 즉치 생성기(22)은 상기 즉치 이동 정보(634)의 10비트를 2비트 왼쪽 쉬프트하여, 제로 확장하여 PA_BUS(72)에 출력한다. SP(14)는 스택 포인터를 저장하고 있고, 이 값은 XA_BUS(78)에 출력된다.
XA_BUS(78)는 ALU(40)의 입력이 되는 PB_BUS(74)에 접속되어 있다. ALU(40)의 어느 한쪽의 입력은 즉치 생성기(22)의 출력인 PA_BUS(72)에 접속되어 있다. ALU(40)의 출력은 WW_BUS(76)에 접속되어 있다. WW_BUS(76)는 SP의 입력에 접속되어 있다.
우선 가산 스택 포인터 이동 명령의 실행시의 동작에 대해 설명한다.
가산 스택 포인터 이동 명령이 실행되면, SP(14)에 저장된 스택 포인터의 값과, 상기 즉치 이동 정보(634)를 기초로 즉치 생성기(22)가 생성한 이동 즉치가 가산되어 새로운 스택 포인터가 생성되며, 그 값이 SP(14)에 저장된다.
도 11은 가산 스택 포인터 이동 명령의 동작을 설명하기 위한 흐름도이다. 상기 명령의 실행의 최초에 SP(14)에 저장되어 있는 스택 포인터가 XABUS(78)에 출력된다 (스텝(250)) 그리고 상기 XA_BUS(78)상의 데이타는 PB_BUS(74)에 출력된다 (스텝(252)). 또한, 즉치 생성기(22)가 즉치 이동 정보를 기초로 생성한 이동즉치(imm)가 PA_BUS(72)에 출력된다(스텝254). ALU(40)는 상기 PB_BUS(74)상의 값과 상기 PA_BUS(72)상의 값을 가산하여, 결과를 WW_BUS(76)에 출력한다(스텝(256)). 그리고, WW_BUS(76)상의 값이 SP(14)에 입력된다(스텝(258)).
다음에 감산 스택 포인터 이동 명령의 실행시의 동작에 대해 설명한다.
감산 스택 포인터 이동 명령이 실행되면, SP(14)에 저장된 스택 포인터의 값으로부터, 상기 즉치 이동 정보(634)를 기초로 즉치 생성기(22)가 생성한 이동즉치(move immediate data)가 감산되어 새로운 스택 포인터가 생성되며, 그 값이 SP(14)에 저장된다.
도 12는 감산 스택 포인터 이동 명령의 동작을 설명하기 위한 흐름도이다.
상기 명령의 실행의 최초에 SP(14)에 저장되어 있는 스택 포인터가 XA_BUS(78)에 출력된다 (스텝(260)). 그리고 상기 XA_BUS(78)상의 데이타는 PB_BUS(74)에 출력된다 (스텝(262)). 또한, 즉치 생성기(22)가 즉치 이동 정보를 기초로 생성한 이동 즉치(imm)가 PA_BUS(72)에 출력된다(스텝(264)). ALU(40)은 상기 PB_BUS(74)상의 값으로부터 상기 PA_ BUS(72)상의 값을 감산하여, 결과를 WW_BUS(76)에 출력한다 (스텝(266)). 그리고, WW_BUS(76)상의 값이 SP(14)에 입력된다 (스텝(268)).
(7) 분기 명령
도 13은 call 명령과 ret 명령에 의한 프로그램 실행의 제어를 설명하기 위한 도면이다. 도 13에 도시된 바와 같이, MAIN 루틴(300)에 있어서, 서브루틴 SUB(310)으로 분기하기 위한 call 명령이 실행되면 (302), 제어가 서브루틴 SUB(310)에 점프한다. 서브루틴의 마지막에는, ret 명령(312)이 기록되고 있고, 이 명령이 실행되면, MAIN 루틴(300)의 상기 call 명령(302)의 다음 명령(304)로 되돌아간다. 따라서, 도 13에 도시하는 경우①②③의 순으로 프로그램이 실행된다. 이와 같이 서브루틴 SUB(310)에서의 실행이 끝나면 MAIN 루틴(300)으로 되돌아가며, 상기 호출 명령(302)의 다음 명령(304)으로부터 실행하기 때문에, 서브루틴 SUB(310)로 분기할 때, 어딘가에 되돌아가 앞의 주소를 기억해두는 것이 필요하게 된다. 이 때문에, 호출 명령 등의 서브루틴으로 분기하는 분기 명령 실행시에는, 도 4에서 설명한 바와 같이 복귀하는 주소를 스택에 대피하는 처리가 행해지며, ret 명령 등의 서브루틴으로부터 복귀하는 분기 명령의 실행시에는 상기 스택로부터 되돌아오는 주소를 프로그램카운터로 되돌리는 처리(이하 프로그램 카운터의 대피 및 복구의 처리라고 한다)가 행해진다.
종래의 RISC 방식의 CPU에서는 상기 프로그램 카운터의 대피 및 복구의 처리를 소프트웨어적으로 실현하고 있었기 때문에, call 명령 등의 분기 명령을 실행할 때에는, 이들 처리를 실행하기 위해서 오브젝트 코드(어셈블러 명령)도 필요하였다. 예컨대 call 명령을 실행할 때에는, 스택 포인터를 워드 크기(4)만큼 디크리 멘트(-4)하여, 프로그램 카운터의 값을 기초로 call 명령의 다음 명령의 주소를 스택에 저장하기 위한 오브젝트 코드(어셈블러 명령)가 필요하였다.
하지만 본 실시예의 CPU는 상기 call 명령이나 ret 명령이 실행되면, 상기 프로그램 카운터의 대피 및 복구의 처리도 함께 행하는 하드웨어 구성을 가지고 있다. 따라서, 상기 call 명령이나 ret 명령과 달리, 상기 프로그램 카운터의 대피 및 복구의 처리를 기술하는 오브젝트 코드(어셈블러 명령)를 필요로 하지 않는다.
본 실시예의 CPU에서는 이러한 상기 프로그램 카운터의 대피 및 복구의 처리를 하나의 명령으로 실행하기 위해서, 스택 포인터 전용 명령의 하나인 분기 명령으로서 다음에 나타내는 명령세트를 준비하고 있다.
call slgn9 … (11)
call %Rb … (12)
ret … (13)
reti … (14)
retd … (15)
int imm2 … (16)
brk … (17)
(11) ∼ (17)은 오브젝트 코드를 어셈블러로서 기술한 것이다. (11)은 PC 상대 서브루틴 호출 명령으로, 프로그램 카운터 PC를 베이스 주소로서, 피연산자 지정된 변위 정보 sign9를 기초로 분기장소 주소를 상대적으로 지정하여 분기하는 호출명령이다. (12)는 레지스터 간접 서브루틴 호출명령이고, 피연산자로 지정된 레지스터에 저장되어 있는 분기장소 주소로 분기하는 호출명령이다. (13)는 서브루틴으로부터의 복귀명령이다. (14)는 인터럽트 또는 예외 처리루틴으로부터의 복귀명령이다. (15)는 디버그처리 루틴으로부터의 복귀명령이다. (16)은 소프트웨어 인터럽트 명령이다. (17)은 소프트웨어 ·디버그 인터럽트 명령이다.
도 14는 상기 (11)의 PC 상대 서브루틴 호출명령의 비트 필드(650)이다. 도 14에 도시된 바와 같이 PC 상대 서브루틴 호출명령은 조작기능이 프로그램 카운터를 베이스 주소로서, 분기장소 주소를 상대적으로 지정하여 서브루틴으로 분기하는호출 명령인 것을 나타내는 연산코드652(8비트), 즉치로 지정된 변위 정보 sign9(8비트) 654를 포함하고 있으며, 16비트의 오브젝트 코드를 가지고 있다. 상기 8비트의 즉치는 실행시에 1비트 왼쪽으로 논리 쉬프트된 후, 사인 확장(sign expansion)된다.
본 실시예의 CPU에서는 call 명령 실행에는 도 14에 도시하는 오브젝트 코드만으로, 프로그램 카운터의 스택으로의 대피도 실행할 수 있다.
이하, 서브루틴으로 분기하는 명령으로서 (11)의 PC 상대 서브루틴 호출명령, 서브루틴으로부터 복귀하는 명령으로서 (13)의 복귀명령을 예로 들어 이들 명령을 실행하기 위한 구성 및 실행시의 동작에 대해 설명한다.
우선 도 1을 이용하여 이들 명령을 실행하기 위해서 필요한 하드웨어 구성에 대해 설명한다. 이들 명령은 외부의 메모리(ROM, 52)로부터 I_DATA_BUS(94)를 통해 전송되며, CPU(10)의 명령 디코더(20)에 입력된다. 상기 명령 디코더(20)로서, 명령이 해독되고 명령의 실행에 필요한 도시하지 않는 각종 신호가 출력된다. 또한 상기 즉치 생성기(22)는 상기 변위 정보(654)를 1비트 왼쪽으로 논리 쉬프트한 후 사인 확장하여 32비트의 즉치 변위 imm을 생성하고, PB_BUS(74)에 출력한다. SP(14)는 스택 포인터를 저장하고 있고, 이 값은 주소 가산기(30)의 입력에 접속된 XA_BUS(78)에 출력할 수 있다. 주소 가산기(30)의 다른 한쪽의 입력은 즉치 생성기(22)의 출력인 PB_BUS(74)에 접속되어 있다. 주소 가산기(30)의 출력(ADDR)은 IA 신호선(82)을 통해 외부의 I_ADDR_BUS(92)에 접속되어 있다.
또한, I_ADDR_BUS(92) 및 I_DATA__BUS(94)는 명령의 오브젝트 코드가 저장된ROM(52)에 접속되고, 버스 제어 유닛(BCU, 60)은 CPU로부터 출력되는 각종 요구 신호(외부 버스에 출력된 신호 등)를 기초로, 메모리(ROM, 52)로부터 상기 명령의 오브젝트 코드를 판독하는 READ제어신호를 출력한다.
우선, PC상대 서브루틴 호출명령의 실행시의 동작에 대해 설명한다.
PC 상대 서브루틴 호출명령이 실행되면, 도 4에서 설명한 바와 같이, PC(12)에 저장된 프로그램 카운터의 값이 스택에 대피되며, SP(14)에 저장된 스택 포인터의 값이 워드크기(4)만큼 디크리멘트된다. 그리고 PC(12)에 프로그램 카운터와 상기 32비트의 즉치 변위를 가산하여 얻어진 분기장소 주소가 세트된다.
도 15는 PC 상대 서브루틴 호출명령의 동작을 설명하기 위한 흐름도이다.
상기 명령의 실행의 최초에 SP(14)에 저장되어 있는 스택 포인터가 XA_BUS(78)에 출력된다 (스텝,270). 이것은 주소 가산기의 한쪽의 입력이 되며, 즉치 생성기(22)가 생성한 constant 데이타(14)가 주소 가산기(30)의 다른 쪽의 입력이 된다. 그리고 주소 가산기(30)로 상기 XA_BUS(78)상의 스택 포인터의 값과 -4를 가산하여 되돌아가 주소를 저장하는 스택에의 기록 주소 생성되며, WW_BUS(76)에 출력된다. 또한, 상기 기록 주소는 DA 신호선(84)을 통해 D_ADDR_BUS(96)에 출력된다. (스텝, 272). 또한, PC 인크리멘터(44)에서는 PC(12)에 저장된 프로그램 카운터의 값이 +2되어 복귀 주소가 생성되며, DOUT 신호선(88)을 통해 D_DATA_BUS(98)측으로 출력된다(스텝,274). 그리고 CPU에서 BCU (60)로의 데이타 기록 요구 신호가 액티브하게 되며, 외부 메모리의 라이트 사이클을 실행한다 (스텝,276). 즉 상기 BCU(60)는 상기 요구 신호를 기초로, 상기 기록 주소를 메모리 주소로서 메모리에 설치된 스택에 상기 복귀 주소가 저장된다.
그리고, WW_PUS(76)상의 값이 SP(14)에 출력된다 (스텝, 278). 즉 스택 포인터의 값이 -4한 값에 갱신된다.
다음에 PC(12)에 저장되어 있는 프로그램 카운터가 XA _BUS(78)에 출력된다 (스텝280). 또한, 상기 즉치 생성기(22)는 명령의 오브젝트 코드에 포함되어 있는 상기 변위 정보(654)를 1비트 왼쪽으로 논리 쉬프트한 후 사인 확장하여 32비트의 즉치 변위 imm을 생성하여, PB_ BUS(74)에 출력한다. 상기 주소 가산기(30)는 XA_BUS(78)상의 프로그램 카운터와 PB_BUS(74)상의 즉치 변위(imm)를 가산하여 분기 주소(ADDR)를 생성하여, IA 신호선(82)을 통해, I_ADDR_BUS(92)에 출력한다 (스텝, 282). 그리고 CPU에서 BCU(60)로의 명령판독 요구 신호가 액티브하게 되며, 외부 메모리(ROM, 52) 리드 사이클을 실행하여, 분기장소의 명령의 오브젝트 코드를 판독한다(스텝284).
다음에 ret 명령의 실행시의 동작에 대해 설명한다.
ret 명령이 실행되면, 도 4에서 설명한 바와 같이, 스택에 대피되어 있던 프로그램 카운터의 값이 PC(12)에 복귀되며, SP(14)에 저장된 스택 포인터의 값이 워드 크기(4)만큼 증가된다.1
도 16은 ret 명령의 동작을 설명하기 위한 흐름도이다.
상기 명령의 실행 이전에는 SP(14)에 저장된 스택 포인터는 불려진 루틴으로의 복귀 장소 주소가 저장된 스택의 주소를 가리키고 있다.
상기 명령의 실행의 최초에 SP(14)에 저장되어 있는 스택 포인터가XA_BUS(78)에 출력된다 (스텝290). 그리고 XA _BUS(78)상의 스택 포인터는 D_ADDR_BUS(96)에 출력된다 (스텝292). 그리고 CPU로부터 BCU(60)로 데이타 판독하여 요구 신호가 액티브하게 되며, 외부 메모리의 리드 사이클을 실행한다. 즉 상기 BCU(60)는 상기 요구 신호를 기초로, 상기 스택 포인터를 메모리 주소로서 메모리에 설치된 스택으로부터 상기 복귀 주소를 판독한다. 메모리(RAM, 50)로부터 판독된 상기 복귀 장소 주소는 D_DATA _BUS(94)로부터 DIN 신호선(86)을 통해 CPU 내부에 둘러싸이고, 또한 DIN 신호선으로부터 IA 신호선(82)을 통해 I_ADDR _BUS(92)에 출력된다(스텝294). 그리고 CPU에서 BCU(60)으로의 명령판독 요구 신호가 액티브하게 되며, 외부 메모리(ROM, 52)의 리드 사이클을 실행하여, 복귀 장소주소의 명령의 오브젝트 코드를 판독한다(스텝296).
그리고, XA_BUS(78)상의 스택 포인터의 값은 상기 주소 가산기(30)의 한쪽의 입력이 된다. 또한 즉치 생성기(22)가 생성한 constant 데이타(+4)가 주소 가산기(30)의 다른 쪽의 입력이 된다. 그리고 주소 가산기(30)에서 상기 XA _BUS(78)상의 스택 포인터의 값과 +4를 가산하여, 복귀 장소의 루틴이 확보한 스택 영역의 선두 영역의 주소가 생성되며, WW_BUS(76)에 출력된다 (스텝298). 그리고, WW _BUS(76)상의 상기 주소(복귀 장소의 루틴이 확보한 스택 영역의 선두 영역의 주소)가 SP(14)에 출력된다 (스텝300).
(8) 연속 푸시 명령(pushn), 연속 팝 명령(popn)의 설명
앞서 언급한 바와 같이, 최근의 특히 RISC 방식의 CPU는 성능을 높이기 위해서 내부에 많은 범용 레지스터를 가지고 있으며, 메모리에 액세스하지 않게 CPU 내부에서 고속으로 많은 처리를 행하도록 구성되어 있다. 본 실시예에서도 내부에 16개의 범용 레지스터를 가지고 있으며, 처리의 고속화를 도모하고 있다. 하지만, 이와 같이 내부 레지스터를 많이 가지면, 인터럽트 처리나 서브루틴 호출시의 레지스터 대피와 복구의 처리시, 대피하여야 할 레지스터수가 많아진다.
이러한 레지스터의 대피나 복구를 행하는 경우, 종래는, 번지부에서 지정한 내용을 스택에 저장하는 push 명령이나, 스택의 내용을 레지스터에 인출하는 pop 명령을 사용하고 있다. 여기에서 일반적인 push 명령 및 pop 명령시의 움직임을 설명한다.
도 17A, 도 17B는 push 명령 실행시의 움직임을 모식적으로 나타낸 도면이고, 도 18A, 도 18B는 pop 명령 실행시의 움직임을 모식적으로 나타낸 도면이다. 도 17A, 도 17B 및 도 18A, 도 18B를 사용하여, 복수의 범용 레지스터와 스택간에서 데이타의 전송을 행하는 경우의 움직임을 설명한다.
도 17A는 범용 레지스터 R1의 내용을 스택에 기록하는 명령인 ' push R1'이 실행된 경우의 움직임을 나타낸다. 상기 명령의 실행시에는, SP(14)의 내용은 현재의 값으로부터 4를 뺀 값에 갱신된다 (도 17A에 도시된 바와 같이 1000이 996에 갱신된다). 그리고, 갱신된 SP(14)의 스택 포인터가 나타내는 메모리 주소인 996에 범용 레지스터 R1의 내용 a가 기록된다.
도 17B는, 또한 범용 레지스터 R2의 내용을 스택에 기록하는 명령인 ' push R2' 이 실행된 경우의 움직임을 나타낸다. 상기 명령의 실행시에는, SP(14)의 내용은 현재의 값으로부터 4를 삔 값에 갱신된다 (도 17B에 도시된 바와 같이 996이992에 갱신된다). 그리고, 갱신된 SP(14)의 스택 포인터가 나타내는 메모리 주소인 992에 범용 레지스터 R2의 내용 b가 기록된다.
도 18A는, 스택의 내용을 범용 레지스터 R2에 인출하는 명령인 ' pop R2' 이 실행된 경우의 움직임을 나타낸다. 상기 명령의 실행시에는, SP(14)의 스택 포인터가 나타내고 있는 메모리 주소(992)에 저장되어 있는 내용 b가 나오고 범용 레지스터 R2에 저장된다. 그리고 SP(14)의 내용은 현재의 값에 4를 뺀 값은 갱신된다(도 18A에 도시된 바와 같이 실행전 992이었던 것이 실행후 996에 갱신된다).
도 18B는 또한 스택의 내용을 범용 레지스터 R1에 인출하는 명령인 ' pop R1' 이 실행된 경우의 움직임을 나타낸다. 상기 명령의 실행시에는 SP(14)의 스택 포인터가 나타내고 있는 메모리 주소(996)에 저장되어 있는 내용 a가 나오고 범용 레지스터 R1에 저장된다. 그리고 SP(14)의 내용은 현재의 값에 4를 뺀 값에 갱신된다 (도 18B에 도시된 바와 같이 실행전 996이었던 것이 실행후 1000에 갱신된다).
이와 같이 종래는, 복수의 범용 레지스터와 스택으로 데이타의 전송을 행하는 경우, push 명령이나 pop 명령을 복수회 반복하여 실행하는 것이 필요하였다. push 명령이나 pop 명령은 1회의 명령으로 1개의 레지스터밖에 조작할 수 없었기 때문이다.
따라서 다수의 레지스터에 대해 스택으로의 대피나 스택으로부터의 복구처리를 행하는 경우, 명령수의 증가에 따라 오브젝트 코드의 크기의 증대를 초래하고 있었다. 또한, 프로그램의 실행 스텝도 많아지며, 프로그램의 실행시간이나 처리동작의 지연을 초래하고 있었다.
따라서 본 실시예의 CPU에서는 다음에 나타내는 명령세트를 준비하고 있다.
pushn %Rs … (18)
popn %Rd … (19)
(18)은 연속 푸시 명령의 어셈블러의 기술을 나타내고 있고, %Rs에서 R0까지의 n개(n은 1에서 16의 자연수)의 범용 레지스터의 내용을 연속적으로 스택 푸시는 명령이다. (19)는 연속 팝 명령의 어셈블러의 기술을 나타내고 있고, 스택으로부터 n 개(n은 1에서 16의 자연수)의 워드 데이타를 연속적으로 %Rd에서 R0까지의 범용 레지스터 팝하는 명령이다. pushn, popn 명령은 모두 연산코드와 피연산자로 이루어진다. %Rs는 pushn 명령의 피연산자로 레지스터%Rs에서 R0까지를 스택에 기록하는 경우의 Rs의 레지스터 번호를 나타낸다. %Rd는 popn 명령의 피연산자로 R0으로부터 %Rd 까지의 레지스터에 스택으로부터 데이타를 가지고 오는 경우의 Rd의 레지스터 번호를 나타낸다.
도 19에 pushn, popn 명령의 비트맵을 나타낸다. 하위의 4비트의 필드에 %Rs 또는 %Rd를 나타내는 코드가 들어가고, 16개 있는 범용 레지스터의 임의의 레지스터를 지정할 수 있다. 특수 레지스터와 스택의 사이에서 데이타의 전송을 할때는 범용 레지스터를 통해 행한다.
도 20은 연속 푸시 명령(pushn), 연속 팝 명령(popn)을 실행하기 위한 하드웨어 구성을 설명하기 위한 블록도이다. 도 1로부터 연속 푸시 명령(pushn) 및 연속 팝 명령(popn)의 설명에 필요한 부분을 인출하여, 설명에 필요한 부분을 추가한 구성으로 되어 있다. 도 1과 동일 부분을 가리키는 것에 대해 동일한 번호를 붙인다. 도면 중 11은 R0으로부터 R15의 16개의 범용 레지스터인 범용 레지스터(11)는 데이타 버스(D_DATA_BUS, 98)와 데이타의 입출력을 행한다. 또한 레지스터를 선택하는 레지스터 선택 주소 신호(54)는 제어 회로블록(45)으로부터 온다. 14는 SP에서 스택 포인터가 저장되어 있다. SP(14)의 값은 주소 버스(D_ADDR_BUS, 96)와 32비트의 주소 가산기(30)의 입력에 접속하는 내부 주소 버스(XA_BUS, 78)에 출력할 수 있다. 주소 가산기(30)의 다른 한쪽의 입력은 제어 회로 블록(45)으로부터의 출력되는 오프셋 신호(24)에 접속되어 있다. 주소 가산기(30)의 출력은 래치(Add_LT, 32)로 래치되며, 또한 XA_BUS(78) 또는 WW_BUS(76)에 출력된다. WW_BUS(76)는 SP(14)의 입력에 접속되어 있다. 제어 회로 블록(45)의 중에는 4비트의 카운터(couutx, 46)가 있으며, 전송하는 레지스터 수를 카운트한다. 또한, 제어 회로 블록(45)중에는 도 20에서는 도시하지 않는 명령 레지스터가 있으며, pushn, popn 명령의 피연산자 %Rs, %Rd를 유지하는 동시에, 명령 디코더에 의해서 각 명령에 따른 제어신호를 출력한다. 도면 중 60은 버스 제어 유닛(BCU)로서 외부의 스택 영역을 포함하고 있는 메모리(RAM, 50)와의 데이타의 입출력을 제어하며, READ, WRITE 제어신호를 출력한다.
우선 연속 푸시 명령(pushn)의 실행시의 동작에 대해 설명한다.
연속 주시 명령(pushn)이 실행되면, 도 4에서 설명한 바와 같이, %Rs의 레지스터 번호의 범용 레지스터로부터 범용 레지스터 R0까지의 범용 레지스터에 저장된 내용이 연속적으로 스택에 푸시된다.
도 21은 pushn 명령의 동작을 설명하기 위한 흐름도이다.
pushn 명령의 실행의 최초에 오프셋 신호(24)의 offset는 -4가 된다. 카운터(countx, 46)는 제로에 클리어되며, SP(14)에 저장된 스택 포인터치가 XA_BUS(78)에 출력된다 (스텝100).
다음에 주소 가산기(30)는 XA_BUS(78)상의 값과 -4를 가산하여 결과를 래치(Add_LT, 32)로 들어갈 수 있다 (스텝101).
래치(Add_LT, 32)의 값은 주소 버스D_ADDR_BUS(96)에 출력된다. 제어 회로 블록(45)에서는 명령 레지스터의 하위 4비트에 유지된 %Rs와 카운터(countx, 46)의 차를 계산하여 결과를 레지스터 선택 주소 신호(54)에 출력한다. 54에 의해서 선택된 레지스터를 데이타 버스(D_DATA _BUS, 98)에 기록하고, 외부 메모리(RAM, 50)의 기록 동작을 행한다 (스텝102).
스텝(103)에서는 카운터(countx, 46)와 %Rs를 비교한다. 같을 때는 레지스터의 외부 메모리로의 기록은 완료하고 있고, 래치(Add_LT, 32)의 값을 WW_BUS(76)를 통하여 SP(14)에 기록하여 pushn의 실행을 끝낸다(스텝104).
같지 않을 때는 카운터(countx)를 +1하고, 래치(Add_ LT, 32)의 값을 XA_BUS(78)에 출력하여, 스텝(101) 이후의 처리를 반복한다(스텝105).
다음에 연속 팝 명령(popn)의 실행시의 동작에 대해 설명한다.
연속 팝 명령(popn)이 실행되면, 도 4에서 설명한 바와 같이, 스택의 내용이 범용 레지스터 R0로부터 %Rd의 레지스터 번호의 범용 레지스터애 연속적으로 푸시된다.
도 22는 popn 명령의 동작을 설명하기 위한 흐름도이다.
popn 명령의 최초에 오프셋 신호(24)는 +4가 된다. 카운터(countx, 46)는 제로 클리어되며, SP(14)의 스택 포인터의 값이 XA_BUS(78)와 주소 버스(D_ADDR_BUS, 96)에 출력된다 (스텝110).
다음에 주소 가산기(30)는 XA_BUS(78)상의 값과 +4를 가산하여 결과를 래치(Add_LT, 32)로 들어갈 수 있다 (스텝111).
다음에 외부 메모리의 리드 사이클을 실행한다. 리드된 데이타는 데이타 버스(D_DATA_BUS, 98)를 통하여 범용 레지스터(11)에 기록된다. 이 때 제어 회로블록(45)에서는 카운터(countx, 46)를 레지스터 선택 주소 신호(54)에 출력한다 (스텝112).
스텝(113)에서는 카운터(countx, 46)와 %Rs를 비교한다. 같을 때는 레지스터의 외부 메모리로의 기록은 완료하고 있고, 래치(Add_LT, 32)의 값을 WW_BUS(76)를 통하여 SP(14)에 기록하여 popn의 실행을 끝낸다(스텝114).
같지 않을 때는 카운터(countx)를 플러스 1하여, 래치(Add_LT, 32)의 값을 XA_BUS(78)와 주소 버스(D_ADDR_BUS, 96)에 출력하여, 스텝(111) 이후의 처리를 반복한다(스텝115).
이와 같이 ' pushn %Rs' 로 %Rs에서 R0까지의 레지스터를 스택에 기록할 수 있으며, 또한 ' popn%Rd' 로 스택으로부터 필요한 개수의 데이타를 R0에서 %Rd까지의 레지스터에 되돌릴 수 있다. 예컨대, 'pushn%R3' 의 실행에 의해 레지스터(R3)로부터 R0까지를 하나의 명령로 푸시할 수 있다.
여기에서 레지스터의 사용 방법에 하나의 제약을 첨가함으로써 더욱 유효한효과가 발생한다. 즉, 레지스터의 대피나 복구는 인터럽트 처리나 서브루틴 호출시 등의 프로그램이 다른 루틴으로 분기할 때에 특히 필요하게 되며, 이 때 다른 인터럽트 루틴 또는 서브루틴 등이 호출되는 루틴으로서는 레지스터를 R0에서 순서대로 이용하는 것이 바람직하다. 이렇게 하면, R0에서 Rd 또는 Rs에 대피의 필요가 없는 레지스터가 포함되지 않고, pushn 명령 및 popn 명령을 사용하여, 효율적으로 레지스터의 대피 또는 복귀를 행할 수 있다. 본 실시예에서는 레지스터는 모두 같은 기능을 가지고, 레지스터의 사용 방법과 명령에는 어떠한 제약도 없기 때문에, 이러한 제약은 어떠한 문제도 없이 만족할 있다.
따라서 본 실시예의 pushn 명령 및 popn 명령을 사용하는 것에 의해, 레지스터로부터 메모리중의 스택으로의 대피, 또는 스택으로부터 레지스터로의 데이타의 복구가 pushn, popn의 각각 하나의 명령으로 실행할 수 있다. 이 때문에 오브젝트코드 크기나 프로그램 실행 스텝을 최소로 하고, 또한 실행사이클을 일회의 명령 페치와 필요한 회수의 데이타의 전송만으로 가능하며, 최소의 사이클로 행할 수 있다. 이것에 의해 인터럽트 처리 루틴이나 서브루틴의 처리도 고속화를 도모할 수 있다.
한편, 이것을 실현하는 구성 요소는 카운트 수단과 간단한 시퀀스 제어뿐이며, 적은 게이트수로 실현할 수 있으며, 원칩의 마이크로 컴퓨터에 알맞은 것이다.
또한, 본 실시예에서는 스택 포인터 전용의 레지스터 SP(14)를 사용한 경우의 연속 루시 명령(pushn), 연속 팝 명령(popn)을 실행시키기 위한 구성에 대해 설명하였지만, 스택 포인터로서 범용 레지스터를 사용하는 경우에도 적용 가능하다.
(실시예2)
도 23은 본 실시예의 마이크로 컴퓨터의 하드웨어 블록도이다. 상기 마이크로 컴퓨터(2)는 32비트 마이크로 제어기이며, CPU(10)와 ROM(52)과 RAM(50), 고주파 발진회로(910), 저주파 발진회로(920), 리셋 회로(930), 프리스케일러(prescaler)(940), 16비트 프로그래머블 타이머(950), 8비트 프로그래머블 타이머(960), 클럭 타이머(970), 인텔리전트 DMA(980), 고속 DMA(990), 인터럽트 제어기(800), 시리얼 인터페이스(810), 버스 제어 유닛(BCU, 60), A/D 변환기(830), D/A 변환기(840), 입력포트(850), 출력포트(860), I/O 포트(870) 및 이들을 접속하는 각종 버스(92, 94, 96, 98), 각종 핀(890) 등을 포함하고 있다.
상기 CPU(10)는 스택 포인터 전용 레지스터인 SP를 가지고 있으며, 상술한 각종의 스택 포인터 전용 명령의 해독, 실행을 행한다. 상기 CPU(10)는 상술한 실시예1의 구성을 가지고 있으며, 상기 해독 수단, 상기 실행 수단으로서 기능한다.
따라서, 본 실시예의 마이크로 컴퓨터는 스택 포인터를 취급하는 처리를 짧은 명령 길이로 효율적으로 기억하여 실행할 수 있다.
또한, 레지스터 대피나 레지스터 복구의 처리를 효율적으로 기억하여, 인터럽트 처리 및 서브루틴 호출 ·복귀의 처리를 고속으로 행할 수 있다.
본 발명의 마이크로 컴퓨터는 예컨대 프린터 등의 퍼스널 컴퓨터 주변기기나, 휴대기기 등의 각종의 전자기기에 적용 가능하다. 이렇게 하면, 간단한 구성으로 메모리의 사용 효율이 좋으며 고속으로 처리할 수 있는 정보 처리 회로를 내장할 수 있으므로, 저렴한 비용으로 고기능의 전자기기를 제공할 수 있다.
또한, 본 발명은 상기 실시예에서 설명한 것에 한정되지 않고 여러 가지의 변형 실시예가 가능하다.
Claims (5)
- RISC 방식의 정보 처리 회로에 있어서,스택 포인터 전용으로 사용되는 스택 포인터 전용 레지스터와;상기 스택 포인터 전용 레지스터를 암묵의 피연산자로 하는 오브젝트 코드를 가지고, 상기 스택 포인터 전용 레지스터에 기초하여 처리가 기술되는 스택 포인터전용 명령군의 오브젝트 코드를 해독하며, 상기 오브젝트 코드에 기초하여 제어 신호를 출력하는 해독 수단과;상기 스택 포인터 전용 명령군을, 상기 제어 신호 및 상기 스택 포인터 전용레지스터의 내용에 기초하여 실행하는 실행 수단을 포함하고,상기 스택 포인터 전용 명령군이, 오브젝트 코드에 이동 정보를 가진 스택포인터를 이동시키기 위한 스택 포인터 이동 명령을 포함하고,상기 해독 수단이,상기 스택 포인터 이동 명령을 해독하고,상기 실행 수단이,상기 스택 포인터 이동 명령을 실행할 때, 상기 이동 정보에 기초하여, 상기 스택 포인터 전용 레지스터의 내용을 변경하고,상기 이동 정보가,즉치로 주어진 즉치 이동 정보를 포함하고,상기 실행 수단이,상기 즉치 이동 정보와 상기 스택 포인터 전용 레지스터의 내용을 가산하는 처리 및 상기 스택 포인터 전용 레지스터의 내용으로부터 상기 즉치 이동 정보를 감산하는 처리 중 적어도 하나의 처리를 행하는 것을 특징으로 하는 정보 처리 회로.
- RISC 방식의 정보 처리 회로에 있어서,스택 포인터 전용으로 사용되는 스택 포인터 전용 레지스터와;상기 스택 포인터 전용 레지스터를 암묵의 피연산자로 하는 오브젝트 코드를 가지고, 상기 스택 포인터 전용 레지스터에 기초하여 처리가 기술되는 스택 포인터 전용 명령군의 오브젝트 코드를 해독하며, 상기 오브젝트 코드에 기초하여 제어 신호를 출력하는 해독 수단과;상기 스택 포인터 전용 명령군을, 상기 제어 신호 및 상기 스택 포인터 전용레지스터의 내용에 기초하여 실행하는 실행 수단을 포함하고,연속하여 순서가 매겨진 복수의 레지스터를 포함하고,상기 스택 포인터 전용 명령군이,복수 레지스터 특정 정보를 오브젝트 코드에 가진 연속 푸시 명령 및 연속 팝 명령 중 적어도 하나를 포함하며,상기 해독 수단이,상기 연속 푸시 명령과 연속 팝 명령 중 적어도 하나의 명령을 해독하고,상기 실행 수단이,상기 연속 푸시 명령 및 상기 연속 팝 명령 중 적어도 하나를 실행할 때, 상기 복수의 레지스터로부터 메모리에 설치된 스택으로 연속하여 복수회 푸시하는 처리 및 상기 스택으로부터 상기 복수의 레지스터에 연속하여 복수회 팝하는 처리중 적어도 하나를, 상기 스택 포인터 전용 레지스터의 내용에 의해 특정되는 메모리 어드레스 및 상기 복수 레지스터 특정 정보에 기초하여 행하고,0에서 n-1까지치 레지스터 번호로 특정되는 n 개의 범용 레지스터를 포함하고,상기 연속 푸시 명령 및 연속 팝 명령 중 적어도 하나의 오프셋 코드가, 상기 복수 레지스터 특정 정보로서, 상기 레지스터 번호 중 어느 하나가 지정되는 최종 레지스티 번호를 포함하며,상기 실행 수단이,레지스터 0으로부터 상기 최종 레지스터 번호로 특정되는 레지스터까지의 복수의 레지스터로부터 메모리에 설치된 스택으로 연속하여 복수회 푸시하는 처리 및 상기 스택으로부터 상기 복수의 레지스터에 연속하여 복수회 팝하는 처리 중 적어도 하나를, 상기 스택 포인터 전용 레지스터의 내용에 의해 특정되는 메모리 어드레스에 기초하여 행하는 것을 특징으로 하는 정보 처리 회로.
- RISC 방식의 정보 처리 회로에 있어서,스택 포인터 전용으로 사용되는 스택 포인터 전용 레지스터와;상기 스택 포인터 전용 레지스터를 암묵의 피연산자로 하는 오브젝트 코드를가지고, 상기 스택 포인터 전용 레지스터에 기초하여 처리가 기술되는 스택 포인터 전용 명령군의 오브젝트 코드를 해독하며, 상기 오브젝트 코드에 기초하여 제어 신호를 출력하는 해독 수단과;상기 스택 포인터 전용 명령군을, 상기 제어 신호 및 상기 스택 포인터 전용레지스터의 내용에 기초하여 실행하는 실행 수단을 포함하고,연속하여 순서가 매겨진 복수의 레지스터를 포함하고,상기 스택 포인터 전용 명령군이, 복수 레지스터 특정 정보를 오브젝트 코드에 가진 연속 푸시 명령 및 연속 팝 명령 중 적어도 하나를 포함하며,상기 해독 수단이,상기 연속 푸시 명령과 연속 팝 명령중 적어도 하나의 명령을 해독하고,상기 실행 수단이,상기 연속 푸시 명령 및 상기 연속 팝 명령 중 적어도 하나를 실행할 때, 상기 복수의 레지스터로부터 메모리에 설치된 스택으로 연속하여 복수회 푸시하는 처리 및 상기 스택으로부터 상기 복수의 레지스터에 연속하여 복수회 팝하는 처리중 적어도 하나를, 상기 스택 포인터 전용 레지스터의 내용에 의해 특정되는 메모리 어드레스 및 상기 복수 레지스터 특정 정보에 기초하여 행하고,상기 실행 수단이,상기 복수의 레지스터 중 어느 소정의 레지스터의 내용을, 상기 스택 포인터 전용 레지스터로 특정되는 메모리 어드레스에 기초하여 메모리에 설치된 스택에 기록하는 기록 수단과;상기 기록 수단에 의해 상기 스택으로의 기록 회수를 카운트하는 기록회수카운트 수단과;상기 카운트 수단에 의해 카운트된 상기 기록 회수와 상기 복수 레지스터 특정 정보의 값을 비교하는 비교 수단을 포함하고,상기 기록 수단이,제 1 입력과 제 2 입력을 가산기로 가산하여 기록 장소를 특정하기 위한 기록 메모리 어드레스를 생성하는 기록 메모리 어드레스 생성 수단과;상기 가산기의 제 1 입력이, 연속 전용 명령의 실행 개시시에는 스택 포인터 전용 레지스터의 내용으로 되도록 제어하고, 그 이후에는 기록 어드레스 생성 수단에 의해 생성되는 기록 어드레스로 되도록 제어하는 제 1 입력 제어 수단과,상기 가산기의 제 2 입력에 상기 스택으로부터 1 워드를 기록할 때의 오프셋 값을 출력하는 제 2 입력 제어 수단과;상기 복수 레지스터 특정 정보로부터 상기 기록 회수를 감산한 값으로 특정되는 레지스터의 내용을, 상기 기록 메모리 어드레스에 기초하여 상기 스택에 기록하는 수단을 포함하고,상기 비교 수단의 비교 결과에 기초하여, 복수의 레지스터로부터의 상기 스택으로의 기록 및 기록 종료를 제어하는 것을 특징으로 하는 정보 처리 회로.
- RISC 방식의 정보 처리 회로에 있어서,스택 포인터 전용으로 사용되는 스택 포인터 전용 레지스터와;상기 스택 포인터 전용 레지스터를 암묵의 피연산자로 하는 오브젝트 코드를 가지고, 상기 스택 포인터 전용 레지스터에 기초하여 처리가 기술되는 스택 포인터전용 명령군의 오브젝트 코드를 해독하며, 상기 오브젝트 코드에 기초하여 제어 신호를 출력하는 해독 수단과;상기 스택 포인터 전용 명령군을, 상기 제어 신호 및 상기 스택 포인터 전용레지스터의 내용에 기초하여 실행하는 실행 수단을 포함하고,연속하여 순서가 매겨진 복수의 레지스터를 포함하고,상기 스택 포인터 전용 명령군이, 복수 레지스터 특정 정보를 오브젝트 코드에 가진 연속 푸시 명령 및 연속 팝 명령 중 적어도 하나를 포함하며,상기 해독 수단이,상기 연속 푸시 명령과 연속 팝 명령중 적어도 하나의 명령을 해독하고,상기 실행 수단이,상기 연속 푸시 명령 및 상기 연속 팝 명령 중 적어도 하나를 실행할 때, 상기 복수의 레지스터로부터 메모리에 설치된 스택으로 연속하여 복수회 푸시하는 처리 및 상기 스택으로부터 상기 복수의 레지스터에 연속하여 복수회 팝하는 처리중 적어도 하나를, 상기 스택 포인터 전용 레지스터의 내용에 의해 특정되는 메모리 어드레스 및 상기 복수 레지스터 특정 정보에 기초하여 행하고,상기 실행 수단이,상기 스택 포인터 전용 레지스터로 특정되는 메모리 어드레스에 기초하여 메모리에 설치된 스택의 내용을 판독하고, 상기 복수의 레지스터 중 어느 소정의 레지스터에 격납하는 판독 수단과,상기 판독 수단에 의해 상기 스택으로부터의 판독 회수를 카운트하는 판독회수 카운트 수단과,상기 카운트 수단에 의해서 카운트되는 상기 판독 회수와 상기 복수 레지스터 특정 정보의 값을 비교하는 비교수단을 포함하고,상기 판독 수단이,제 1 입력과 제 2 입력을 가산기로 가산하여 기록 장소를 특정하기 위한 메모리 어드레스를 생성하는 기록 메모리 어드레스 생성 수단과,상기 가산기의 제 1 입력이 연속 전용 명령의 실행 개시시에는 스틱 포인터전용 레지스터의 내용이 되도록 제어하고, 그 이후는 판독 어드레스 생성 수단에의해 생성되는 판독 어드레스로 되도록 제어하는 제 1 입력 제어 수단과,상기 가산기의 제 2 입력에 상기 스택으로부터 1 워드를 기록할 때의 오프셋 값을 출력하는 제 2 입력 제어 수단과,상기 판독 메모리 어드레스에 기초하여 상기 스택의 내용을 판독하고, 상기 기록 회수에 기초하여 특정되는 레지스터에 격납하는 판독 수단을 포함하며,상기 비교 수단의 비교 결과에 기초하여, 상기 스택의 내용의 판독 및 판독종료를 제어하는 것을 특징으로 하는 정보 처리 회로.
- RISC 방식의 정보 처리 회로에 있어서,스택 포인터 전용으로 사용되는 스택 포인터 전용 레지스터와;상기 스택 포인터 전용 레지스터를 암묵의 피연산자로 하는 오브젝트 코드를 가지고, 상기 스택 포인터 전용 레지스터에 기초하여 처리가 기술되는 스택 포인터.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP96-127541 | 1996-05-22 | ||
JP12754196 | 1996-05-22 | ||
JP97-135923 | 1997-05-08 | ||
JP9135923A JPH1091443A (ja) | 1996-05-22 | 1997-05-08 | 情報処理回路、マイクロコンピュータ及び電子機器 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR100328162B1 true KR100328162B1 (ko) | 2002-06-29 |
Family
ID=26463482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019970020002A KR100328162B1 (ko) | 1996-05-22 | 1997-05-22 | 정보처리회로와마이크로컴퓨터와전자기기 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6560692B1 (ko) |
EP (1) | EP0809180B1 (ko) |
JP (1) | JPH1091443A (ko) |
KR (1) | KR100328162B1 (ko) |
DE (1) | DE69729974T2 (ko) |
TW (1) | TW424197B (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100602374B1 (ko) * | 2000-08-31 | 2006-07-14 | 어보브반도체 주식회사 | 스택 구조를 사용하여 코드 집적도를 높인 리스크 프로세서 |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
MY125897A (en) | 1998-11-02 | 2006-08-30 | Seiko Epson Corp | Ink cartridge and printer using the same |
JP2000218818A (ja) | 1998-11-26 | 2000-08-08 | Seiko Epson Corp | インク容器およびそれを用いる印刷装置 |
JP3975593B2 (ja) * | 1999-01-21 | 2007-09-12 | 株式会社ソニー・コンピュータエンタテインメント | 再生音を発生する方法、再生音を発生する電子機器及びエンターテインメント・システム |
JP2001202243A (ja) * | 1999-04-30 | 2001-07-27 | Hitachi Ltd | データ処理装置 |
US6983350B1 (en) | 1999-08-31 | 2006-01-03 | Intel Corporation | SDRAM controller for parallel processor architecture |
US7546444B1 (en) | 1999-09-01 | 2009-06-09 | Intel Corporation | Register set 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 |
US6661794B1 (en) | 1999-12-29 | 2003-12-09 | Intel Corporation | Method and apparatus for gigabit packet assignment for multithreaded packet processing |
US6631462B1 (en) * | 2000-01-05 | 2003-10-07 | Intel Corporation | Memory shared between processing threads |
AU2001236976A1 (en) * | 2000-02-14 | 2001-08-27 | Chicory Systems, Inc. | Delayed update of a stack pointer and program counter |
JP2002014809A (ja) * | 2000-06-28 | 2002-01-18 | Mitsubishi Electric Corp | マイクロプロセッサ並びにアセンブラ、その方法およびそのプログラムを記録した記録媒体 |
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 |
US7050197B1 (en) * | 2000-09-14 | 2006-05-23 | Eastman Kodak Company | Image processor for high-speed printing applications |
US7472259B2 (en) * | 2000-12-06 | 2008-12-30 | Analog Devices, Inc. | Multi-cycle instructions |
US7895239B2 (en) | 2002-01-04 | 2011-02-22 | Intel Corporation | Queue arrays in network devices |
US7111149B2 (en) * | 2003-07-07 | 2006-09-19 | Intel Corporation | Method and apparatus for generating a device ID for stacked devices |
JP2005050208A (ja) * | 2003-07-30 | 2005-02-24 | Matsushita Electric Ind Co Ltd | マルチタスクシステムにおけるメモリ管理方式およびタスク制御装置 |
US20060200650A1 (en) * | 2005-03-04 | 2006-09-07 | Froemming Benjamin F | Single-cycle low-power CPU architecture |
US7870542B1 (en) * | 2006-04-05 | 2011-01-11 | Mcafee, Inc. | Calling system, method and computer program product |
GB2486738B (en) * | 2010-12-24 | 2018-09-19 | Qualcomm Technologies Int Ltd | Instruction execution |
GB2488980B (en) * | 2011-03-07 | 2020-02-19 | Advanced Risc Mach Ltd | Address generation in a data processing apparatus |
JP5708714B2 (ja) * | 2013-06-14 | 2015-04-30 | 株式会社三洋物産 | 遊技機 |
GB2525314B (en) * | 2014-01-17 | 2016-02-24 | Imagination Tech Ltd | Stack pointer value prediction |
US9767004B2 (en) * | 2014-06-16 | 2017-09-19 | Symantec Corporation | Dynamic call tracking method based on CPU interrupt instructions to improve disassembly quality of indirect calls |
JP5895992B2 (ja) * | 2014-09-01 | 2016-03-30 | 株式会社三洋物産 | 遊技機 |
GB2540948B (en) * | 2015-07-31 | 2021-09-15 | Advanced Risc Mach Ltd | Apparatus with reduced hardware register set |
JP2016064211A (ja) * | 2015-12-18 | 2016-04-28 | 株式会社三洋物産 | 遊技機 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3701976A (en) * | 1970-07-13 | 1972-10-31 | Bell Telephone Labor Inc | Floating point arithmetic unit for a parallel processing computer |
US4016545A (en) * | 1975-07-31 | 1977-04-05 | Harris Corporation | Plural memory controller apparatus |
US4236206A (en) | 1978-10-25 | 1980-11-25 | Digital Equipment Corporation | Central processor unit for executing instructions of variable length |
US4831517A (en) * | 1986-10-10 | 1989-05-16 | International Business Machines Corporation | Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system |
JPH0748179B2 (ja) | 1988-10-12 | 1995-05-24 | 日本電気株式会社 | データ処理装置 |
EP0368144B1 (en) * | 1988-11-10 | 1996-02-07 | Motorola, Inc. | Digital computing system with low power mode |
US5142635A (en) * | 1989-04-07 | 1992-08-25 | Intel Corporation | Method and circuitry for performing multiple stack operations in succession in a pipelined digital computer |
US5440749A (en) * | 1989-08-03 | 1995-08-08 | Nanotronics Corporation | High performance, low cost microprocessor architecture |
US5274792A (en) * | 1989-08-19 | 1993-12-28 | Fujitsu Limited | Information processing apparatus with parallel instruction decoding |
JP2669158B2 (ja) | 1991-01-22 | 1997-10-27 | 三菱電機株式会社 | データ処理装置 |
US5386560A (en) * | 1991-05-23 | 1995-01-31 | International Business Machines Corporation | Execution of page data transfer by PT processors and issuing of split start and test instructions by CPUs coordinated by queued tokens |
JPH0536259A (ja) * | 1991-07-27 | 1993-02-12 | Sony Corp | 電子機器 |
US5283874A (en) * | 1991-10-21 | 1994-02-01 | Intel Corporation | Cross coupling mechanisms for simultaneously completing consecutive pipeline instructions even if they begin to process at the same microprocessor of the issue fee |
JPH05204656A (ja) * | 1991-11-30 | 1993-08-13 | Toshiba Corp | スレッド固有データ保持方法 |
US5377337A (en) * | 1993-06-08 | 1994-12-27 | International Business Machines Corporation | Method and means for enabling virtual addressing control by software users over a hardware page transfer control entity |
JPH07114469A (ja) * | 1993-10-18 | 1995-05-02 | Mitsubishi Electric Corp | データ処理装置 |
JPH086854A (ja) * | 1993-12-23 | 1996-01-12 | Unisys Corp | アウトボードファイルキャッシュ外部処理コンプレックス |
WO1996008767A2 (en) | 1994-09-16 | 1996-03-21 | Philips Electronics N.V. | Microcontroller system with a multiple-register stacking instruction |
US5687336A (en) * | 1996-01-11 | 1997-11-11 | Exponential Technology, Inc. | Stack push/pop tracking and pairing in a pipelined processor |
US6026485A (en) * | 1996-01-24 | 2000-02-15 | Sun Microsystems, Inc. | Instruction folding for a stack-based machine |
US5802373A (en) * | 1996-01-29 | 1998-09-01 | Digital Equipment Corporation | Method for providing a pipeline interpreter for a variable length instruction set |
US6151662A (en) * | 1997-12-02 | 2000-11-21 | Advanced Micro Devices, Inc. | Data transaction typing for improved caching and prefetching characteristics |
US6094716A (en) * | 1998-07-14 | 2000-07-25 | Advanced Micro Devices, Inc. | Register renaming in which moves are accomplished by swapping rename tags |
-
1997
- 1997-05-08 JP JP9135923A patent/JPH1091443A/ja not_active Withdrawn
- 1997-05-20 US US08/859,490 patent/US6560692B1/en not_active Expired - Fee Related
- 1997-05-22 KR KR1019970020002A patent/KR100328162B1/ko not_active IP Right Cessation
- 1997-05-22 DE DE69729974T patent/DE69729974T2/de not_active Expired - Lifetime
- 1997-05-22 TW TW086106909A patent/TW424197B/zh not_active IP Right Cessation
- 1997-05-22 EP EP97108346A patent/EP0809180B1/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100602374B1 (ko) * | 2000-08-31 | 2006-07-14 | 어보브반도체 주식회사 | 스택 구조를 사용하여 코드 집적도를 높인 리스크 프로세서 |
Also Published As
Publication number | Publication date |
---|---|
EP0809180A2 (en) | 1997-11-26 |
US6560692B1 (en) | 2003-05-06 |
EP0809180B1 (en) | 2004-07-28 |
DE69729974T2 (de) | 2005-07-21 |
TW424197B (en) | 2001-03-01 |
DE69729974D1 (de) | 2004-09-02 |
EP0809180A3 (en) | 1999-01-07 |
JPH1091443A (ja) | 1998-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100328162B1 (ko) | 정보처리회로와마이크로컴퓨터와전자기기 | |
JP3592230B2 (ja) | データ処理装置 | |
KR100266337B1 (ko) | 정보처리회로,반도체집적회로장치,마이크로컴퓨터,및전자기기 | |
US7487338B2 (en) | Data processor for modifying and executing operation of instruction code according to the indication of other instruction code | |
EP0813144A2 (en) | Data processing system and method utilising multiple instruction sets | |
KR0167005B1 (ko) | 중앙처리장치 | |
US4539635A (en) | Pipelined digital processor arranged for conditional operation | |
JPH03218523A (ja) | データプロセッサ | |
EP4152146A1 (en) | Data processing method and device, and storage medium | |
US4945511A (en) | Improved pipelined processor with two stage decoder for exchanging register values for similar operand instructions | |
KR100385495B1 (ko) | 워드정렬브랜치타겟을가지는처리시스템 | |
KR100249631B1 (ko) | 데이터 처리장치 | |
EP0764900A2 (en) | Information processing apparatus for realizing data transfer to/from a plurality of registers using instructions of short word length | |
KR100322277B1 (ko) | 확장 명령어를 가진 중앙처리장치 | |
US4598358A (en) | Pipelined digital signal processor using a common data and control bus | |
US6223275B1 (en) | Microprocessor with reduced instruction set limiting the address space to upper 2 Mbytes and executing a long type register branch instruction in three intermediate instructions | |
JP3504355B2 (ja) | プロセッサ | |
US5649229A (en) | Pipeline data processor with arithmetic/logic unit capable of performing different kinds of calculations in a pipeline stage | |
US5093784A (en) | Data processor with efficient transfer between subroutines and main program | |
EP0650614B1 (en) | Digital signal processor architecture | |
JP3147884B2 (ja) | 記憶装置及び情報処理装置 | |
KR19990046284A (ko) | 확장명령어를갖는중앙처리장치 | |
KR19990046283A (ko) | 확장명령어를갖는중앙처리장치 | |
JPH07191845A (ja) | 即値データ転送装置 | |
JP2004094973A (ja) | プロセッサ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
AMND | Amendment | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
J201 | Request for trial against refusal decision | ||
AMND | Amendment | ||
B701 | Decision to grant | ||
GRNT | Written decision to grant | ||
G170 | Publication of correction | ||
FPAY | Annual fee payment |
Payment date: 20130201 Year of fee payment: 12 |
|
FPAY | Annual fee payment |
Payment date: 20140204 Year of fee payment: 13 |
|
LAPS | Lapse due to unpaid annual fee |