KR100268635B1 - 마이크로 컴퓨터 및 제산 회로 - Google Patents

마이크로 컴퓨터 및 제산 회로 Download PDF

Info

Publication number
KR100268635B1
KR100268635B1 KR1019970026158A KR19970026158A KR100268635B1 KR 100268635 B1 KR100268635 B1 KR 100268635B1 KR 1019970026158 A KR1019970026158 A KR 1019970026158A KR 19970026158 A KR19970026158 A KR 19970026158A KR 100268635 B1 KR100268635 B1 KR 100268635B1
Authority
KR
South Korea
Prior art keywords
dividend
sign
bit
register
instruction
Prior art date
Application number
KR1019970026158A
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=26482784&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=KR100268635(B1) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by 요네야마 사다오, 히다치 마이컴시스템가부시키가이샤, 스즈키 진이치로, 히다치초엘에스아이 엔지니어링가부시키가이샤, 가나이 쓰도무, 가부시끼가이샤 히다치 세이사꾸쇼 filed Critical 요네야마 사다오
Priority to KR1019970026158A priority Critical patent/KR100268635B1/ko
Application granted granted Critical
Publication of KR100268635B1 publication Critical patent/KR100268635B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/535Dividing only
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3557Indexed addressing using program counter as base address
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/535Indexing scheme relating to groups G06F7/535 - G06F7/5375
    • G06F2207/5352Non-restoring division not covered by G06F7/5375

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Microcomputers (AREA)
  • Advance Control (AREA)
  • Communication Control (AREA)
  • Digital Transmission Methods That Use Modulated Carrier Waves (AREA)
  • Complex Calculations (AREA)

Abstract

마이크로 컴퓨터, 특히 RISC계 마이크로 컴퓨터의 아키텍쳐에 관한 것으로서, 데이타어 길이보다 적은 비트수의 고정 길이 명령 포맷을 채용하는데 수반되는 여러가지의 문제점을 해결하기 위해, 피제수 또는 부분잉여 부호와 제수의 부호에 따라서 피제수 또는 부분잉여에 제수를 감산 또는 가산해서 새로운 부분잉여를 취득함과 동시에 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리의 반복에 의해서 부호화 제산을 실행하는 제산회로로서, 제산처리에 앞서 피제수의 부호와 제수의 부호에서 몫의 부호를 취득함과 동시에 피제수가 부일 때에는 이 피제수에서 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고 보정된 피제수를 제산처리의 대상으로 하는 전처리수단 및 제산처리의 반복에 의해서 취득된 몫을 몫의 부호에 따라서 보정하는 후처리수단을 마련해서 이루어지는 것인 것을 특징으로 한다.
이러한 것에 의해, 명령디코드 처리의 단순화 등의 이익을 얻으면서 프로그램 용량이 작고 또는 프로그램 메모리의 이용효율이 높고, 또한 시스템 코스트가 작은 마이크로 프로세서를 얻을 수 있다는 효과가 있다.

Description

마이크로 컴퓨터 및 제산 회로
본 발명은 마이크로 컴퓨터, 특히 RISC(Reduced Instruction Set Computer : 축소 명령 세트형 컴퓨터)계 마이크로 컴퓨터의 아키텍쳐에 관한 것으로서, 예를 들면 기기에 조립되어 이것을 제어하는 마이크로 컴퓨터에 적용해서 유효한 기술에 관한 것이다.
또, 본 발명은 부호화 제산을 위한 회로, 예를 들면 임의의 길이의 멀티정밀도와 부호화 2진수의 제산 회로에 관한 것으로, 특히 RISC계 마이크로 컴퓨터의 스텝 제산에 적합하고 유효한 기술에 관한 것이다.
1명령을 실행하는데 필요한 머신 사이클수를 저감할 때의 가장 애로사항은 명령의 디코드 처리라는 것이 알려져 있다. 디코드 처리를 고속화하기 위해서는 명령의 경계가 어디에 존재하는가를 전의 명령의 해석이 끝나기전에 알 수 있도록 고정 길이의 명령 포맷을 채용하는 것이 효과적이라는 것이 알려져 있다. 소위 RISC계 컴퓨터에서는 고정 길이의 명령 포맷과 다단의 파이프라인을 채용하는 것에 의해 대부분의 명령을 1사이클로 실행하고 있다. 지금까지의 RISC계 컴퓨터에서는 예외 없이 32비트 명령 포맷을 사용해 왔다. 32비트 고정 길이 명령 포맷의 장점은 소오스 레지스터와 디스티네이션 레지스터의 명령 포맷중의 필드를 고정해 버리는 것에 의해, 연산코드(오퍼레이션코드) 부분의 디코드를 하지 않아도 어떤 레지스터를 리드하면 좋은지를 결정할 수 있는 점과 이미디어트값을 디코드할 때에 얼라인먼트의 조정이 불필요한 점이다. 그 반면에 32비트 고정 길이 명령 포맷에서는 아무리 처리 내용이 단순한 명령을 기술하는 경우에도 32비트를 필요로 하므로, 일련의 처리를 기계어로 쓴 경우에 명령 코드의 점유 바이트수가 크게 되어 버려 메모리 영역에 있어서 프로그램의 차지하는 비율이 증가한다는 점이 문제이다. 프로그램의 메모리 점유 영역이 증가하면, 보다 용량이 큰 메모리를 실장해야 하므로 마이크로 컴퓨터 시스템의 코스트가 상승하여 코스트 성능비가 양호한 시스템을 구성하는 것이 곤란하게 된다. 특히, RISC 프로세서는 명령수를 적게 하는 것에 의해 명령의 실행을 고속화하고자 하는 아키텍쳐이므로, 명령 세트에 대해서 미정의 연산코드가 비교적 많아진다는 경향을 갖는다. 미정의 연산 코드가 많다는 것은 목적 프로그램의 코드 효율을 악화시켜 즉 메모리의 이용 효율을 한층 저하시킨다.
이러한 메모리의 이용 효율 또는 코드 효율 향상이라는 점에 대한 선출원으로서는 일본국 특허출원 평성2-222203호(미국출원No : 07/748,779(1991. 8. 22)출원))가 있다. 이 출원 내용은 명령 포맷을 데이타어 길이보다도 짧은 비트수로 하는 것이다. 그러나, 그 경우에는 데이타어 길이 보다는 짧은 비트수의 고정 길이 명령 포맷을 채용하는 것에 수반되어 여러가지 문제점을 해결해야 하는 것을 본 발명자는 발견하였다. 예를 들면, 데이타어 길이에 필적하는 비트수의 이미디어트 데이타를 필요로 하는 경우의 방책, 더 나아가서는 비대화하는 프로그램이나 시스템 구성에 대해서 분기지 어드레스와 같은 절대 어드레스의 지정 방식등의 데이타 처리상에 있어서 새로운 방책의 검토가 필요하다. 또, 상기 선출원은 데이타어 길이와 명령어 길이에 2의 누승의 관계를 갖게 하는 것에 대해서는 일체 고려되어 있지 않다. 이것에 의해, 메모리의 1워드 경계를 넘어서 1명령이 존재하는 미스얼라이먼트를 적극적으로 방지할 수는 없고, 메모리의 이용효율, 더 나아가서는 소프트웨어 프로그램의 간소화 및 처리 속도라는 점에 있어서도 새롭게 검토해야 할 사항이 남아 있다.
또, 마이크로 컴퓨터 등에서 실행되는 제산의 기술로서, 피제수의 부호와 제수의 부호에서 몫과 잉여의 부호를 결정하고, 피제수의 절대값과의 제산을 회복법이나 피회복법 등으로 실행하고, 마지막에 몫과 잉여의 부호 보정을 실행하는 제산 방식이 공지이다. 근래, 부호화 제산에 있어서, 피제수 및 제수의 절대값을 취하지 않고 부호화의 상태에서 제산을 실행하는 회로 및 방식이 몇가지 공개되어 있다. 피제수와 제수를 부호화의 상태에서 제산을 실행하는 경우, 어떤 방식이라도 기본적으로는 다음의 수순을 채용하고 있다. 즉, 피제수 또는 부분잉여의 부호와 제수의 부호가 동일한 경우에는 피제수 또는 부분잉여에서 제수를 감산한 결과를 새로운 부분잉여로 하고, 피제수 또는 부분잉여의 부호와 제수의 부호가 다른 경우에는 피제수 또는 부분잉여에 제수를 가산한 결과를 새로운 부분잉여로 하도록 해서 그 감산 또는 가산을 순차 반복해서 몫을 구해 간다. 이 때, 피제수가 정의 경우 또는 피제수가 제수로 나누어서 딱 떨어지지 않는 경우에는 이 수순에 따라서 약간의 몫 또는 잉여 보정을 실행하는 것에 의해 정확한 답을 얻을 수 있다. 그러나, 피제수가 부이고 또한 피제수가 제수로 나누어 떨어지는 경우, 이것에 의해서 구해지는 몫은 정확한 몫보다 절대값이 작은 쪽에 LSB의 비중을 갖는 "1"만큼 작아진다. 이 에러는 부의 피제수 또는 부분잉여에 대해서 상기 가산 또는 감산을 실행해서 부분잉여가 0으로 된 경우에 이 부분잉여의 부호를 정확하다고 간주해 버리는 것에 의해서 발생한다.
이 에러를 해결하기 위해서 부분잉여가 0으로 된 것을 검출하고, 몫을 보정하는 수단을 구비한 제산 회로가 몇가지 고안되어 있다. 예를들면, 일본국 특허 공개 공보 평성2-165326호에는 비회복형의 제산 수단에 각 행에서의 연산 결과(부분잉여의 것)이 0일때 세트되고, 피제수의 각 행에서의 최하위 비트에 1이 들어왔을때 리세트되는 레지스터를 갖고, 이 레지스터의 결과를 이용해서 몫 및 나머지의 보정을 실행하는 기술이 기재되어 있다. 이것에 의하면, 상기의 세트 및 리세트되는 레지스터를 사용해서 부분잉여가 0으로 된 경우를 검출하여 보정하는 것에 의해 정확한 부호화 제산을 실현하고 있다. 또, 일본국 특허 공개 공보 평성2-171828호에서는 부분잉여가 0인지 아닌지를 몫비트를 결정하는 스텝마다 검출하는 것에 의해, 피제수가 부인 경우에 잘못된 몫비트가 출력되는 것을 방지하는 기술이 기재되어 있다. 또, 일본국 특허공개 공보 소화59-160235호에는 피제수가 부이고 제산 도중에 부분잉여가 0으로 되었다면, 그 최상위 비트를 1로 고려하도록 하기 위해 부분잉여가 0으로 된 경우를 검출하는 하드웨어를 마련한 기술이 기재되어 있다.
이와 같이, 피제수와 제수를 부호화의 상태에서 제산하는 종래의 기술은 부분잉여가 0으로 된 것을 검출해서 몫비트의 보정을 실행하고 있다. 이러한 기술에서는 부분잉여를 구할때 마다 그것이 0인지를 판정하지 않으면 안되고, 제수가 n비트라면 그와 같은 판정 동작을 n회 실행하는 것이 필요하게 되어 제산 처리 전체의 동작 스텝수를 증대시킨다. 또, 부분잉여가 0인지 아닌지는 그의 전체 비트를 보지 않으면 안되고, 1회의 판정 처리를 고속화하고자 하면 전용 하드웨어도 필요하게 되는 것이 예상된다.
본 발명의 목적은 데이타어 길이보다 적은 비트수의 고정 길이 명령 포맷을 채용하는데 수반되는 여러가지의 문제점을 해결하기 위해 이루어진 것으로, 고정 길이 명령 포맷의 비트수가 데이타어 길이 보다 적더라도 이미디어트 데이타의 이용이나 절대 어드레스 지정에 제한을 미치지 않는 것, 한정된 비트수의 고정 길이 명령 포맷중에서 필요한 디스플레이스먼트 등의 기술이 가능한 것, 메모리상에 있어서의 프로그램 배치의 미스얼라이먼트의 방지에 기여하는 것 및 서포트하는 명령의 내용이라는 점에서 코드 효율 또는 메모리 이용 효율을 한층 향상시키는 것 등에서 선택된 단수 또는 복수의 사항을 달성할 수 있는 마이크로 컴퓨터를 제공하는 것이다.
본 발명의 다른 목적은 피제수가 부인 경우에도 몫비트를 구하는 제산의 스텝마다 부분잉여가 0인지 아닌지의 검출을 실행하는 일 없이 간단하게 정확한 몫을 구할 수 있는 제산 회로를 제공하는 것이다.
본 발명의 또 다른 목적은 피제수가 정인지 부인지를 고려하는 일없이 제산 프로그램의 개발을 가능하게 하는 제산 회로를 제공하는 것이다.
본 발명의 또 다른 목적은 회로 구성이 간단하고, 또, 제산 효율을 향상시킬 수 있는 제산 회로를 제공하는 것이다.
본 발명의 상기 및 그 밖의 목적과 새로운 특징은 본 명세서의 기술 및 첨부 도면에서 명확하게 될 것이다.
제1도는 본 발명의 1실시예에 관한 마이크로 컴퓨터 MCU를 이용한 시스템의 1예의 블럭도.
제2도는 본 발명의 1실시예에 관한 마이크로 컴퓨터의 블럭도.
제3도는 본 실시예에 관한 마이크로 컴퓨터의 패키지에 대한 핀배치의 개념적인 설명도.
제4도는 본 실시예에 관한 마이크로 컴퓨터에 있어서의 버스폭에 대한 데이타어 길이와 명령어 길이의 1예의 관계 설명도.
제5도는 본 실시예의 마이크로 컴퓨터에 포함되는 중앙처리장치의 내부 블럭, 특히 그 명령 제어계의 1예를 도시한 블럭도.
제6도는 중앙처리장치의 실행유닛의 절반부의 구성을 도시한 블럭도.
제7도는 중앙처리장치의 실행유닛의 나머지 절반부의 구성을 도시한 블럭도.
제8도는 중앙처리장치에 의한 파이프라인 처리의 스테이지의 1예의 설명도.
제9도는 레지스터 경합 상태에 있어서의 파이프라인 시퀀스의 1예의 설명도.
제10도는 레지스터 경합 상태에 있어서의 파이프라인 시퀀스의 다른 예를 도시한 설명도.
제11도는 데이타 페치와 명령 페치가 경합한 경우의 파이프 제어 시퀀스의 1예의 설명도.
제12도는 여러개의 사이클 명령을 실행할 때의 1예의 동작 타이밍도.
제13도는 본 실시예의 마이크로 컴퓨터에서 실행되는 데이타 전송명령의 절반을 도시한 일람 설명도.
제14도는 본 실시예의 마이크로 컴퓨터에서 실행되는 데이타 전송명령의 나머지 절반부를 도시한 일람 설명도.
제15도는 본 실시예의 마이크로 컴퓨터가 실행하는 논리 연산 명령의 일람 설명도.
제16도는 본 실시예의 마이크로 컴퓨터가 실행하는 산술 연산 명령의 절반의 일람 설명도.
제17도는 본 실시예의 마이크로 컴퓨터가 실행하는 산술 연산 명령의 나머지 절반의 일람 설명도.
제18도는 본 실시예의 마이크로 컴퓨터가 실행하는 명령의 일람 설명도.
제19도는 본 실시예의 마이크로 컴퓨터가 실행하는 분기 명령의 일람 설명도.
제20도는 본 실시예의 마이크로 컴퓨터가 실행하는 시스템 제어 명령의 절반의 일람 설명도.
제21도는 본 실시예의 마이크로 컴퓨터가 실행하는 시스템 제어명령의 나머지 절반의 일람 설명도.
제22도는 제13도∼제21도의 기재 형식의 설명도.
제23도는 제13도∼제21도에 기재된 니모닉 표시중에 있어서의 어드레싱 모드의 일람 설명도.
제24도는 분기 명령의 디스플레이스먼트 길이와 그 디스플레이스먼트 길이를 갖는 명령의 출현 빈도의 관계를 도시한 1예의 설명도.
제25도는 분기 올웨이즈 명령의 디스플레이스먼트 길이와 그 디스플레이스먼트 길이를 갖는 명령의 출현 빈도의 관계를 도시한 1예의 설명도.
제26도는 서브루틴 호출 명령의 디스플레이스먼트 길이와 그 디스플레이스먼트 길이를 갖는 명령의 출현 빈도의 관계를 도시한 1예의 설명도.
제27도는 점프 명령 또는 점프 서브루틴 명령의 디스플레이스먼트 길이와 그 디스플레이스먼트 길이를 갖는 명령의 출현 빈도의 관계를 도시한 1예의 설명도.
제28도는 프로그래머의 모델로서의 1예의 레지스터 구성의 설명도.
제29도는 본 발명에 관한 부호화 제산에 있어서의 피제수에 대한 전처리의 원리를 도시한 개념도.
제30도는 부÷부의 경우에 있어서의 부호화 제산 처리의 원리적인 1예의 설명도.
제31도는 부÷정의 경우에 있어서의 부호화 제산 처리의 원리적인 1예의 설명도.
제32도는 정÷정의 경우에 있어서의 부호화 제산 처리의 원리적인 1예의 설명도.
제33도는 본 발명에 관한 부호화 제산의 기본적인 약속마다 또는 기본적인 처리 순서의 전체를 일반적 형식으로 도시한 설명도.
제34a도는 피제수의 전보정 방식에 대한 설명도.
제34b도는 몫의 부호 예측에 대한 설명도.
제35도는 부의 피제수에 대한 전보정의 1예의 설명도.
제36도는 부의 피제수에 대한 1을 감산하는 전보정후의 부분잉여의 표현예를 도시한 설명도.
제37a도는 부호화 제산 과정에 있어서의 가감산 명령의 추출방법에 대한 1예의 설명도.
제37b도는 몫비트의 추출방법에 대한 1예의 설명도.
제38도는 몫과 잉여에 대한 보정방식에 대한 1예의 설명도.
제39도는 -8÷-3의 부호화 제산에 있어서의 전보정과 제산 처리의 구체적인 처리수순의 설명도.
제40도는 제39도의 처리에 계속되는 후처리의 구체적인 처리수순의 설명도.
제41도는 -8÷3의 부호화 제산에 있어서의 전보정과 제산처리의 구체적인 처리수순의 설명도.
제42도는 제41도의 처리에 계속되는 후처리의 구체적인 추리수순의 설명도.
제43도는 -9÷-3의 부호화 제산에 있어서의 전보정과 제산 처리의 구체적인 처리 수순의 설명도.
제44도는 제43도의 처리에 계속되는 후처리의 구체적인 처리 수순의 설명도.
제45도는 -9÷3의 부호화 제산에 있어서의 전보정과 제산 처리의 구체적인 처리 수순의 설명도.
제46도는 제45도의 처리에 계속되는 후처리의 구체적인 처리 수순의 설명도.
제47도는 8÷3의 부호화 제산에 있어서의 전보정과 제산 처리의 구체적인 처리 수순의 설명도.
제48도는 제47도의 처리에 계속되는 후처리의 구체적인 처리 수순의 설명도.
제49도는 8÷-3의 부호화 제산에 있어서의 전보정과 제산 처리의 구체적인 처리 수순의 설명도.
제50도는 제49도의 처리에 계속되는 후처리의 구체적인 처리 수순의 설명도.
제51도는 부호화 제산을 실행하기 위한 연산 유닛의 1실시예의 블럭도.
제52도는 제51도에 도시된 산술 논리 연산 회로, 연산 회로 및 연산 제어 회로의 1예의 논리 회로도.
제53도는 부호화 제산을 위한 명령 기술의 상세한 1예의 설명도.
제54도는 제53도의 명령 EOR R0, R0을 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제55도는 제53도의 명령 SL16 R1을 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제56도는 제53도의 명령 DIV0S R0, R2를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제57도는 제53도의 명령 MOVT R3을 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제58도는 제53도의 명령 SUBC R0, R2를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제59도는 제53도의 명령 DIV0S R1, R2를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제60도는 제53도의 명령 DIV1 R1, R2를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제61도는 제53도의 명령 MOV R2, R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제62도는 제53도의 명령 EXTS, W R2, R2를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제63도는 제53도의 명령 ROTCL R2를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제64도는 제53도의 명령 ADDC R0, R2를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제65도는 제53도의 명령 DIV0S R0, R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제66도는 제53도의 명령 MOVT R0을 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제67도는 제53도의 명령 EOR R3, R0을 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제68도는 제53도의 명령 ROTCR R0을 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제69도는 제53도의 명령 DIV0S R1, R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제70도는 제53도의 명령 ROTCR R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제71도는 제53도의 명령 DIV1 R1, R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제72도는 제53도의 명령 SL16 R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제73도는 제53도의 명령 ADD R3, R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제74도는 제53도의 명령 EXTS, W R4, R4를 실행할 때에 있어서의 제51도의 회로의 동작 설명도.
제75도 (A)는 제54도의 동작에 대응하는 레지스터의 상태 설명도.
제75도 (B)는 제55도의 동작에 대응하는 레지스터의 상태 설명도.
제75도 (C)는 제56도의 동작에 대응하는 레지스터의 상태 설명도.
제76도 (D)는 제57도의 동작에 대응하는 레지스터의 상태 설명도.
제76도 (E)는 제58도의 동작에 대응하는 레지스터의 상태 설명도.
제76도 (F)는 제59도의 동작에 대응하는 레지스터의 상태 설명도.
제77도 (G)는 제60도의 동작에 대응하는 레지스터의 상태 설명도.
제77도 (H)는 제62도의 동작에 대응하는 레지스터의 상태 설명도.
제78도 (I)는 제63도의 동작에 대응하는 레지스터의 상태 설명도.
제78도 (J)는 제64도의 동작에 대응하는 레지스터의 상태 설명도.
제78도 (K)는 제65도의 동작에 대응하는 레지스터의 상태 설명도.
제75도 (L)는 제66도의 동작에 대응하는 레지스터의 상태 설명도.
제79도 (M)는 제67도의 동작에 대응하는 레지스터의 상태 설명도.
제75도 (N)는 제68도의 동작에 대응하는 레지스터의 상태 설명도.
제80도 (O)는 제69도의 동작에 대응하는 레지스터의 상태 설명도.
제80도 (P)는 제70도의 동작에 대응하는 레지스터의 상태 설명도.
제80도 (Q)는 제71도의 동작에 대응하는 레지스터의 상태 설명도.
제81도 (R)는 제72도의 동작에 대응하는 레지스터의 상태 설명도.
제81도 (S)는 제73도의 동작에 대응하는 레지스터의 상태 설명도.
제81도 (T)는 제74도의 동작에 대응하는 레지스터의 상태 설명도.
제82도는 제54도∼제74도에 걸쳐서 설명한 부호화 제산 처리를 정리한 흐름도로서, 제82a도는 그 전체를 도시한 도면, 제82b도는 전처리의 처리를 도시한 도면.
제83도는 제82도의 제산1을 상세하게 도시한 흐름도로서, 제83a도는 제산1의 처리를 도시한 도면, 제83b도는 제산 스텝의 처리를 도시한 도면.
제84도는 제82도의 후처리를 상세하게 도시한 흐름도로서, 제84a도는 후처리의 처리를 정리한 흐름도, 제84b도는 몫보정의 처리를 도시한 도면.
제85도는 제84도의 후처리를 상세하게 도시한 흐름도로서, 제85a도는 제1의 잉여 보정 수단의 처리를 도시한 도면, 제85b도는 제2의 잉여 보정 수단의 처리를 도시한 도면.
제86도는 8비트÷8비트의 부호화 제산을 위한 명령 기술의 1예의 설명도.
제87도는 64비트÷32비트의 부호화 제산을 위한 명령 기술의 1예의 설명도.
제88도는 32비트÷32비트의 부호화 제산을 위한 명령 기술의 1예의 설명도.
제89도는 16비트÷16비트의 부호화 제산을 위한 명령 기술의 1예의 설명도.
제90도는 16비트÷8비트의 부호화 제산을 위한 명령 기술의 1예의 설명도.
제91도는 32비트÷16비트의 부호화 제산을 위한 명령 기술의 1예의 설명도.
본원에 있어서 개시되는 발명중 대표적인 것의 개요를 간단하게 설명하면 다음과 같다.
[1] 범용 레지스터 방식을 채용하는 마이크로 컴퓨터에 있어서, 명령 실행 수단에 공급되는 최대의 데이타어 길이보다 비트수가 적은 고정 길이 명령 포맷을 채용하는 것이다.
[2] 상기 고정 길이 명령 포맷에 설정되는 비트수가 메모리상에 있어서의 프로그램의 미스얼라이먼트의 방지에 도움이 되도록 하기 위해서는 상기 고정 길이 명령 포맷 및 상기 최대 데이타어 길이는 각각 2의 누승의 비트수를 설정하면 좋다. 예를 들면 최대 데이타어 길이가 32비트일때 명령 포맷은 16비트로 고정한다.
[3] 데이타의 최대어 길이와 명령 포맷의 비트수 사이에 상기 관계가 있는 경우, 상기 최대 데이타어 길이와 동일한 비트수의 내부 버스를 이용해서 능률적으로 명령을 페치하기 위해서 또는 명령 페치를 위한 버스 액세스 회수를 줄이기 위해서는 버스폭 전체를 사용해서 여러개의 명령을 동일 사이클에서 프리페치하도록 하면 좋다.
[4] 내부 버스가 데이타 전송과 명령 페치에 공용되는 경우에 데이타 페치와 명령 페치가 경합했을 때의 처리 또는 그것에 기인하는 후처리를 간단화하기 위해서는 데이타 페치를 우선하고, 이 데이타 페치에 경합하는 명령 페치를 포함하는 명령 실행 스케쥴을 전체적으로 지연시키는 파이프 제어를 실행하도록 하면 좋다.
[5] 범용 레지스터 방식을 채용하는 성질상, 파이프라인적으로 실행되는 전후의 명령에 의한 상기 범용 레지스터의 이용이 경합하는 상태에 간단하게 대처하기 위해서는 파이프라인적으로 실행되는 여러개의 명령에 의한 상기 범용 레지스터의 이용이 경합하는 상태를 명령 포맷중에 포함되는 레지스터 지정 영역의 정보에 따라서 검출하고, 검출된 레지스터 경합 상태와 레지스터 경합 상태에 있는 상대적으로 먼저 실행되는 명령의 실행 사이클수에 따라서 레지스터 경합 상태의 상대적으로 후의 명령의 실행을 지연시키도록 파이프 제어를 실행하면 좋다.
[6] 고정 길이 명령 포맷의 비트수의 제한이 이미디어트 데이타의 이용에 제한을 부여하지 않도록 하기 위해서는 특정의 레지스터의 값에 대해서 디스플레이스먼트의 값을 오프세트로 하는 레지스터 상대로 이미디어트 데이타를 지정시키는 기술을 포함하는 명령을 서포트하면 좋다.
[7] 비트수가 제한된 고정 길이 명령 포맷이라도 데이타 처리상 필요한 디스플레이스먼트 또는 이미디어트 데이타의 비트수를 극력 많게 하는 방책으로 하고, 명령중에 레지스터 지정 필드가 없음에도 불구하고 오퍼런드로서 고정된 특정의 범용 레지스터를 묵시적으로 지정시키는 명령을 서프트하면 좋다.
[8] 마찬가지로 비트수가 제한된 고정 길이 명령 포맷이라도 처리상 필요한 디스플레이스먼트 또는 이미디어트 데이타의 비트수를 극력 많게 하는 방책으로 하고, 지정 조건에 대한 연산 결과의 진위를 소정의 상태 플래그에 반영시키는 기술을 포함하는 명령을 서포트하면 좋다.
[9] 분기 명령의 종류에 따라서 적절한 분기지 지정용 디스플레이스먼트 길이를 고정적으로 할당한다. 16비트 고정 길이 명령 포맷일때, 조건 분기 명령의 디스플레이스먼트를 8비트로 고정하고, 서브루틴 분기 명령 및 무조건 분기 명령의 디스플레이스먼트를 12비트로 고정한다.
[10] 부호화 제산에 있어서, 피제수가 부인 경우에 그 피제수에서 상기 피제수 LSB의 비중을 갖는 "1"을 빼는 조작을 제산의 전처리로서 실행한다. 피제수의 LSB의 비중이 1이면 그 피제수는 정수이다. 피제수가 고정 소수점수인 경우에는 이것을 정수로 간주해서 제산의 처리를 실행해도 실질적인 영향은 없다. 이후부터 소수점 위치의 자리수 맞춤을 실행하면 좋기 때문이다. 따라서, 피제수의 LSB의 비중을 1로 간주하는 것에 의해 피제수를 정수로 간주해서 도중의 연산을 실행해도 실제 손해는 없고, 이하의 설명에 있어서 특별히 언급하지 않는 한 피제수를 정수로 간주하는 것으로 한다.
[11] 피제수가 부일때의 부호 비트는 1이고, 정 또는 0일때의 부호 비트가 0인 것에 착안하면, 피제수에서 그 부호 비트(피제수의 MSB)를 빼면, 부의 피제수에서 1을 뺀 것으로 된다. 이것은 2의 보수 표현의 부의 정수에서 1의 보수 표현으로의 변환으로 간주할 수 있다. 이와 같이 하면, 피제수가 정인지 부인지를 고려하지 않아도 피제수에 대한 전처리를 실행할 수 있다. 도 35에는 예를들면, 4비트의 부의 정수에서 1을 뺀 변환 상태가 도시되어 있다. 유한 비트수의 2의 보수의 최소값을 1의 보수로 변환하기 위해서는 1비트 여분이 필요하므로, 필요한 경우에는 1비트 확장한다. 또, 부분잉여는 정으로 되는 것도 있으므로, 부의 정수에 대해서 실행한 상기의 변환을 정수 전체로 확장하고, 새로운 정수의 표현을 도입한다. 예를 들면, 4비트 부호화 정수의 범위에서는 도 36에 도시되는 바와 같은 표현이 채용된다. 또한, 임의의 정수를 그 수에서 1을 뺀수로 표현한 것을 ZZ로 하면, 2의 정수를 사용한 정수에 대해 1을 빼는 변환을 실행한 ZZ의 표현은 0이하의 정수에서는 1의 보수와 동일시 할수 있고, 0이상의 정수에서는 본래의 값보다 1만큼 작은 수로 표현된다. 이때, 0의 부호 비트는 부의 수와 동일한 1로 된다.
[12] 부호화 제산의 과정에 있어서, 몫과 부분잉여(또는 나머지)의 유지라는 점에 있어서 연산되고 또는 연산에 제공되어야 할 몫비트나 부분잉여를 레지스터 등으로 전송하기 위한 처리 스텝수를 적게 하기 위해서는 몫(몫비트)와 나머지(부분잉여)를 1개의 레지스터와 같은 단일의 기억 수단에 유지시키도록 하면 좋다.
[1] 상기한 수단에 의하면, 예를 들면 32비트의 데이타어 길이에 대해서 16비트 고정 길이 명령 포맷을 채용하는 것은 명령 포맷이 고정 길이라는 점에 있어서 종래의 32비트 고정 길이 명령 포맷을 갖는 RISC 머신과 마찬가지로 명령 경계가 어디에 존재하는지의 판정을 이전의 명령이 완료하기 전에 파악할 수가 있어 명령 디코드 처리의 단순화등의 이점을 보증하도록 작용한다.
[2] 32비트 고정 길이 명령 포맷을 채용하는 경우에 비해 프로그램 용량이 작아진다. 즉, 명령의 종류를 적게 하는 것에 의해 명령의 실행을 고속화하고자 하는 RIS C아키텍쳐에 있어서는 명령 세트중에 미정의 연산코드가 많게 되는 경향이 있고, 이 때 명령 길이가 종래의 1/2로 반감되면 프로그램 메모리의 이용 효율이 향상된다.
[3] 고정 길이 명령 포맷의 비트수가 데이타어 길이 보다 적더라도 이미디어트 데이타의 이용이나 절대 어드레스 지정에 제한을 미치지 않는 것, 한정된 비트수의 고정 길이 명령 포맷중에서 필요한 디스플레이스먼트 등의 기술이 가능한 것, 메모리상에 있어서의 프로그램 배치의 미스얼라이먼트의 방지에 기여하는 것 및 서포트하는 명령의 내용이라는 점에서 코드 효율 또는 메모리 이용 효율을 한층 향상시키는 것 등은 데이타어 길이보다 적은 비트수의 고정 길이 명령 포맷을 채용하는 것에 수반되는 고유의 각종 문제점을 해결한다.
[4] 상기한 부호화 제산을 위한 수단에 의하면, 피제수가 부인 경우에 피제수에서 피제수의 LSB의 비중을 갖는 1을 빼는 전보정이 실행되고, 계속해서 몫의 부호가 예측되고, 또 피제수 또는 부분잉여의 부호와 제수의 부호의 배타적 논리합이 0인지 1인지에 따라서 피제수 또는 부분잉여에 제수가 가감산되고, 부분잉여의 부호와 제수의 부호의 배타적 논리합을 몫비트로 하고, 또한 몫이 부인 경우에 1의 보수의 몫을 2의 보수로 보정하고, 이와 같이 해서 몫이 구해진다.
[5] 상기 피제수가 부인 경우, 피제수의 LSB의 비중을 갖는 1을 상기 피제수에서 빼는 것은 0의 표현을 모든 비트에 1이 서고 부호 비트도 1인 표현으로 하는 전처리와 등가로 된다. 이와 같은 전처리는 피제수가 부인 경우에 부분잉여가 0으로 된 것을 검출하지 않아도 되도록 한다. 그 결과, 최초의 피제수의 부호비트, 부분잉여의 부호비트, 제수의 부호비트, 몫의 부호비트의 정보에 따라서 오버플로우 체크나 잉여의 보정을 포함한 제산의 제어가 가능하게 된다. 이것이 제산의 하드웨어 및 소프트웨어를 단순화하고, 또, 임의 길이 임의 정밀도의 부호화 제산으로서의 적용도 가능하게 하고, 또 부분 잉여를 저장하는 레지스터를 1비트상위로 시프트함과 동시에 몫비트를 시프트인하는 수단을 적용한 처리의 고속화에도 대용 가능하게 한다.
이하, 본 발명의 실시예를 최대의 데이타어 길이보다 비트수가 적은 고정 길이 명령 포맷을 채용한 마이크로 컴퓨터와 그와 같은 마이크로 컴퓨터에 의해서 실현되는 부호화 제산으로 크게 구별해서 이하 항목순으로 설명한다. 전자의 내용은 항목[1]∼[17]에 기재되고, 후자의 내용은 항목[18]∼[24]에 기재된다.
[1] 마이크로 컴퓨터의 응용 시스템
도 1에는 본 발명의 1실시예에 관한 마이크로 컴퓨터MCU를 이용한 시스템의 1예가 도시되어 있다. 마이크로 컴퓨터MCU는 외부 제어버스ECB, 외부데이타 버스EDB 및 외부 어드레스 버스EAB를 거쳐서 외부 메모리EMRY와 사용자가 정의하는 외부 입출력 장치EI/O에 결합되고, 또, 포트 입출력 버스PIOB를 거쳐서 외부 장치EEQ에 접속된다. 외부장치EEQ는 마이크로 컴퓨터 시스템이 조립되는 소정의 기기이다.
[2] 마이크로 컴퓨터의 블럭 구성
도 2에는 본 발명의 1실시예에 관한 마이크로 컴퓨터MCU가 도시되어 있다. 동일 도면에 도시되는 마이크로 컴퓨터MCU는 공지의 반도체집적회로 제조기술에 의해서 실리콘 기판과 같은 1개의 반도체 기판에 형성된다. 도면에 있어서, CPU는 마이크로 컴퓨터MCU 전체의 제어를 관리하는 중앙처리장치이다. Port/I/O는 입출력 포트로서, 외부에 대해서 중앙처리장치CPU가 신호를 입출력하거나, 외부의 표시 기기를 구동하거나, 외부의 스위치의 상태를 조사하는데 사용된다. 중앙처리장치CPU는 임의의 어드레스에 할당된 레지스터를 리드 라이트하는 것에 의해 입출력을 실행한다. Port/Cont는 버스제어선의 출입구로 되는 포트이다. Port/Data는 데이타 버스의 출입구로 되는 포트이다. Add는 어드레스 버스의 출입구로 되는 포트이다. I/O는 마이크로 컴퓨터MCU의 온칩상의 주변기기이며, 예를 들면 직렬 통신용 인터페이스나 타이머 등을 포함한다. DMAC는 DMA(Direct Memory Access)컨트롤러이다. ROM(Read Only Memory)은 온칩으로 실장된 명령 메모리로서, 중앙처리장치CPU의 명령(동작 프로그램)이나 정수 테이블 등을 보유한다. RAM(Random Access Memory)은 온칩으로 실장된 데이타 메모리이며, 중앙처리장치CPU의 작업영역이나 데이타의 일차 기억 영역 등으로서 이용된다. BSC는 버스 상태 컨트롤러로서, 마이크로 컴퓨터MCU의 내부 및 외부에 대한 버스 액세스 제어를 실행한다. CACHE는 캐시 메모리로서, 중앙처리장치CPU에 의한 명령의 액세스 패턴을 인식해서 가장 빈번하게 사용되는 것이 예상되는 명령을 유지하여 액세스 속도가 느린 외부 메모리에서 응용프로그램을 리드해 가는 액세스 회수를 줄여서 처리의 고속화를 도모하기 위한 기억 장치이다. BURST/REFRESH는 연속 데이타 전송 등에 대한 버스트 제어나 DRAM(Dynamic Random Access Memory)등에 대한 리플레시 제어를 실행하는 버스트/리플레시 장치이며, DRAM을 외부 메모리로서 사용할 때의 고속 페이지 모드 액세스와 DRAM의 리플레시 등에 적용된다. edb는 포트 Port/Data를 거쳐서 외부 데이타 버스EDB와 결합되는 내부 데이타 버스, eab는 포트 Port/add를 거쳐서 외부 어드레스버스EAB와 결합되는 내부 어드레스 버스이며 모두 중앙처리장치CPU와 결합되지 않는 버스이다. 또, IDB31-0은 32비트의 내부 데이타 버스, IAB23-0은 24비트의 내부 어드레스 버스이며 모두 중앙처리장치CPU와 결합되는 버스이다.
중앙처리장치CPU는 명령 메모리ROM 또는 캐시 메모리CACHE에서 명령이 공급되고, 데이타 메모리RAM 또는 외부 메모리EMRY에서 공급된 데이타는 상기 공급된 명령에 따라서 소정 처리가 실행된다.
[3] 마이크로 컴퓨터의 패키지의 핀 배치
도 3에는 상기 마이크로 컴퓨터MCU의 패키지의 핀배치가 개념적으로 도시되어 있다. 동일 도면에 있어서, 프리런닝 타이머FRT0, FRT1, 아날로그/디지탈 변환기A/D, 디지탈/아날로그 변환기D/A 및 직렬 통신용 인터페이스SCI0, SCI1은 도 2의 주변 기기I/O의 1예로 되고, 이것에 대응해서 도 3에 도시되는 포트 PORT1∼PORT4는 각각의 주변 기기에 대응하는 입출력 포트로서 도 2의 포트Port/I/O에 대응된다. 마이크로 컴퓨터MCU는 특히 제한되지 않지만, 112핀의 QFP형 패키지에 봉입되어 있다. 24비트의 어드레스 버스(A0-23)은 상기 어드레스 버스EAB에 접속하고, 32비트의 데이타 버스(D0-31)은 상기 데이타 버스EDB에 접속된다. 이들 버스A0-23, D0-31은 중앙처리장치CPU, DMA(Direct Memory Access Controller) 또는 버스트/리플레시 제어 장치BURST/REFRESH가 외부 메모리EMRY를 액세스 할 때에 사용된다. 클럭 신호는 마이크로 컴퓨터MCU내부와 그 외부의 시스템이 동기해서 동작할 때의 시간의 기본 타이밍을 규정하는 신호이다. 예를 들면, 단자EXTAL과 XTAL에 도시하지 않은 수정 진동자가 결합되면 마이크로 컴퓨터MCU의 칩내부의 전기 회로와 공명해서 발진한다. 해당 칩은 이 발진 전압을 취하는 것에 의해 다음에 설명하는 내부 동기용 클럭 ψ1, ψ2를 생성한다. 이들의 클럭 ψ1, ψ2는 특히 제한되지 않지만, 하이 기간이 서로 겹치는 일이 없는 논오버랩 클럭 신호로 된다. 동시에 마이크로 컴퓨터MCU 외부의 시스템과 LSI내부의 동기를 취하기 위해 마이크로 컴퓨터MCU는 ψ1과 대략 동일한 파형과 위상을 가진 클럭 신호를 단자CLK에서 출력한다. 제어 신호는 리세트 신호(RES), 스탠바이 신호(STBY) 등의 동작 모드 설정용의 신호, 인터럽트 입력용의 신호, 리드 스트로브(RD)나 라이트 스트로브(WRHH)등의 데이타 버스의 제어 신호, DRAM 리플레시 제어, 버스 중재용의 신호등을 포함한다. Vss, Vcc는 접지 단자, 전원 단자이다. 포트PORT1은 DMAC에 관한 DMAC 제어 신호를 2채널분 입출력한다. 포트PORT2는 프리런닝 타이머FRT0, FRT1에 대한 마이크로 컴퓨터MCU 외부로부터의 제어와 리드를 실행하기 위한 FRT신호의 입출력을 실행한다. 포트PORT3은 아날로그/디지탈 변환기A/D 및 디지탈/아날로그 변환기D/A에 공급되어 아날로그 신호의 입출력을 실행한다. 아날로그/디지탈 변환기A/D 및 디지탈/아날로그 변환기D/A의 기준 전위는 단자 AVcc, AVss에서 인가된다. 포트PORT4는 직렬 통신용 신호를 입출력하고, 그들 신호는 클럭용, 데이타 송신용, 데이타 수신용의 3계통으로 되고, 2채널분이다.
[4] 명령어 길이와 데이타어 길이
도 4에는 본 실시예의 마이크로 컴퓨터MCU에 있어서의 버스폭(버스를 구성하는 신호선수)에 대한 데이타어 길이와 명령어 길이의 1예의 관계가 도시되어 있다. 본 실시예의 마이크로 컴퓨터MCU는 RISC형 아키텍쳐를 갖고, 고정 길이의 명령 포맷을 갖는다. 데이타나 명령이 전송되는 버스 예를 들면 내부 데이타 버스IDB31-0은 32비트(신호선이 32)로 된다. 이 때, 후술하는 각종 레지스터의 비트수는 32비트이다. 메모리상의 데이타도 바이트(8비트), 워드(16비트), 롱워드(32비트)를 단위로 해서 32비트의 폭을 갖는 메모리 영역에 배치되어 있다. 메모리에는, 바이트 단위로 번지가 할당된다. 따라서, 바이트 데이타는 n번지(n은 정수), 워드 데이타는 2n번지, 롱워드 데이타는 4n번지 단위로 액세스된다. 이 이외의 메모리 액세스는 어드레스 에러로 된다. 한편, 명령은 16비트(신호선이 16개) 고정 길이 명령 포맷으로 된다. 즉, 버스폭을 구성하는 신호선 개수를 2의 m승으로 하면, 고정 길이 명령은 2의 n승 비트로 구성되어 m≥n의 관계가 성립한다.
상기 16비트 고정 길이 명령 포맷의 수의 예를 도시한 도 4에 있어서, rrrr의 4비트는 소오스 레지스터 지정 필드, RRRR의 4비트는 디스티네이션 레지스터의 지정 필드, d…dd는 디스플레이스먼트, ii…i는 이미디어트 데이타를 의미한다. 16비트의 명령 포맷에 있어서, 디스티네이션 레지스터 지정 필드RRRR는 상기 포맷 좌측을 기준으로 제4비트째부터 제8비트째로 되고, 소오스 레지스터 지정 필드rrrr은 제9비트째부터 제12비트째로 된다. 명령 포맷의 좌측 4비트는 적어도 연산 코드 지정 필드로 된다. 마이크로 컴퓨터MCU의 명령 체계에 있어서는 디스티네이션 레지스터 지정 필드RRRR을 연산 코드 지정 필드의 일부로서 이용하고, 또, 소오스 레지스터 지정 필드rrrr을 디스플레이스먼트 또는 이미디어트 데이타의 일부로서 이용하는 것을 허용한다.
32비트의 데이타어 길이에 대해서 16비트 고정 길이 명령 포맷을 채용하는 것에 의해, 명령 포맷이 고정 길이라는 점에 있어서 종래의 32비트 고정 길이 명령 포맷을 갖는 RISC 머신과 마찬가지로 명령 경계가 어디에 존재하는지의 판정을 전의 명령이 완료하기 전에 파악할 수 있어 명령 디코드 처리의 단순화 등의 이점을 보증할 수 있다. 또한, 32비트 고정 길이 명령 포맷을 채용하는 경우에 비해 프로그램 용량을 작게 할 수 있다. 즉, 명령의 종류를 적게 하는 것에 의해 명령의 실행을 고속화하고자 하는 RISC 아키텍쳐에 있어서는 명령 세트중에 미정의 연산 코드가 많아지는 경향이 있으며, 이 때 명령 길이가 종래의 1/2로 반감되면 프로그램 메모리의 이용 효율이 향상한다. 또, 데이타어 길이에 비해 명령어 길이를 짧게 하는 것은 쌍방의 워드 길이가 동일하게 되는 경우에 비해 고정 길이 명령 포맷의 비트열에 있어서 실질적으로 불필요한 비트 배열을 감소시키고 이것이 프로그램 메모리의 이용 효율을 높게 한다. 따라서, 프로그램을 저장하기 위한 메모리의 이용 효율이 향상되고, 보드상의 한정된 기억 용량의 메모리나 프로세서에 온칩된 프로그램 메모리를 사용하는 응용분야 등에서는 시스템 구성시에 프로그램 메모리의 기억 용량이 부족하거나 메모리의 회로규모를 크게 하지 않을 수 없다는 문제점의 발생을 회피하여 시스템 코스트를 저감할 수 있다.
또, 16비트 고정 길이 명령 포맷은 32비트의 데이타어 길이 및 버스폭의 정확히 절반이므로, 명령어 길이를 버스폭이나 데이타어 길이에 대해 약간 부족한 비트수(예를 들면 2의 누승 이외의 비트수)로 설정해서 명령어 길이를 짧게 하는 경우에 비해 메모리의 바운더리 경계(워드 경계)를 넘어서 단일 포맷의 명령이 배치된다는 프로그램 메모리에 대한 명령의 미스얼라이먼트를 거의 발생시키지 않는다.
[5] CPU의 명령 제어계
도 5에는 상기 중앙처리장치CPU의 내부 블럭, 특히 그 명령 제어계의 1예가 도시되어 있다. IRH와 IRL은 각각 16비트의 명령 버퍼(명령큐)이며, 16비트 고정 길이 명령을 1개씩 저장한다. 이들의 레지스터 IRH, IRL에는 1회의 명령 페치 사이클에서 각각에 명령이 로드된다. 명령은 내부 데이타 버스IDB31-0을 거쳐서 32비트 단위로 전송되어 오기 때문이다. 이들은 멀티 플렉서MPX를 거쳐서 명령 레지스터IR1에 로드된다. 명령 레지스터IR1은 16비트이다. 이 명령 레지스터IR1은 명령 디코드단에 존재하는 명령을 유지한다. 명령 레지스터IR1중에서는 16비트 고정 길이 명령 포맷에 따라서 RRRR으로서 표시되는 왼쪽끝을 기준으로 제5비트째 ∼ 제8비트째가 디스티네이션 레지스터 필드, rrrr으로서 표시되어 있는 제9비트째 ∼ 제12비트째가 소오스 레지스터 필드로 된다. 이들 필드는 명령 필드내에서 고정되어 있다. 이 때, 상술한 바와 같이, 소오스 레지스터 필드는 반드시 소오스 오퍼런드를 지정하는 데 사용되고, 디스티네이션 레지스터 필드는 2개째의 소오스 오퍼런드 또는 디스티네이션 오퍼런드를 지정하는데 사용된다. 각 레지스터 필드의 의미는 연산코드의 일부로 되는 경우와 레지스터의 번호로 되는 경우가 있다. 레지스터 지정 필드RRRR 및 rrrr의 내용이 레지스터를 지정하는 정보인지 아닌지는 상기 고정 길이 명령 포맷의 왼쪽끝에서 제1비트째 ∼ 제4비트째의 연산 코드의 내용에 의해서 결정된다. 이것에 관계없이 레지스터 필드RRRR, rrrr의 값은 명령 레지스터IR2를 거쳐서 소오스 레지스터 디코더SRD와 디스티네이션 레지스터 디코더DRD에 입력되어 디코드된다.
상기 소오스 레지스터 디코더 SRD와 디스티네이션 레지스터 디코더DRD에 의한 디코드 결과는 연산 실행을 위한 실행부EXEC에 포함되는 범용 레지스터R0H, R0L, …, R15H, R15L중에서 어느 것을 선택할지의 지정에 이용된다. 또, 상기 명령 레지스터IR2에서 출력되는 레지스터 필드RRRR, rrrr의 값은 일시 래치WBR0 및 WBR1을 거쳐서 라이트백 레지스터 디코더WBRD에 공급되고, 명령 실행에 의해서 얻어진 연산 결과는 그 디코드의 결과에 따라서 범용 레지스터의 지정을 위해 라이트된다. 또, 상기 일시 래치WBR1에 저장된 현재 사용하고 있는 레지스터 번호 즉, 레지스터 필드RRRR, rrrr의 값은 레지스터 내용 체크(Register Content Check)블럭RCCB로 공급되고, 명령 레지스터IR1, IR2의 출력과 비교되어 차례로 페치된 명령이 파이프라인적으로 실행될 때에 각각의 명령, 예를 들면 다음의 명령이 동일 레지스터를 액세스하는 사상(레지스터의 경합)을 발견한다. 레지스터 경합 상태는 신호S1에 의해서 플래그 조작 및 파이프 제어 디코더FO & PCD에 공급된다. 어서트 상태의 신호 S1이 플래그 조작 및 파이프 제어 디코더FO & PCD에 공급되면, 현재 실행중인 명령 실행 사이클수에 따라서 스킵(Skip)제어가 실행되고, 결합 상태의 레지스터를 이용하는 명령의 실행 사이클을 캔슬 또는 지연시킨다. 즉, 플래그 조작 및 파이프 제어 디코더FO & PCD가 제어 신호 Skip을 출력하는 것에 의해, 소오스 레지스터 디코더SRD 및 디스티네이션 레지스터 디코더DRD에 있어서 다음에 실행되어야 할 명령의 디코드는 지연된다. 이것에 의해, 먼저 명령의 실행에 의해서 경합 레지스터의 라이트가 완료된 후의 타이밍에 의해 후속하는 명령의 실행 사이클이 개시된다.
상기 명령 레지스터IR1이 유지하는 명령은 맵핑 제어(Mapping Control)블럭MCB에 공급되고, 이것에 의해 고속 제어 리드 온리 메모리(Hardware Sequence ROM)HSC-ROM의 어드레스가 발견된다. 맵핑 제어 블럭MCB의 역할은 명령을 디코드해서 그 내용에 따라 적절한 고속 제어 리드 온리 메모리MHSC-ROM의 엔트리 어드레스를 산출하는 것이다. 고속 제어 리드 온리 메모리 HSC-ROM의 출력은 마이크로 명령 필드(Micro Code Field)MCF와 파이프 제어 필드(Pipe Control)PCF의 2개의 부분이 이루어지며, 마이크로 명령 레지스터와 같은 하드웨어 시퀀스 제어 명령 레지스터HIR에 래치된다. 마이크로 명령 필드에 있어서의 전자는 얕은 디코드 논리 즉 명령 디코더ID를 거쳐서 실행 유닛EXEC에 제어 신호를 공급한다. 후자는 플래그 조작 및 파이프 제어 디코더FO & PCD를 거쳐서 2사이클 이상의 시퀀스를 갖는 명령의 시퀀스를 생성하거나 파이프라인의 제어를 실행한다. 플래그 조작 및 파이프 제어 디코더FO & PCD는 8개의 플래그C, W, B, L, M, I, S, S를 갖고 있으며, 이것에 의해 파이프라인의 제어를 실행한다. 또, 이 플래그 조작 및 파이프 제어 디코더FO & PCD는 상태 레지스터SR을 갖고, 동일 레지스터SR은 조건 분기 등에 이용되는 참(true)의 비트 T(이하, T비트라고도 한다)를 갖는다. 이 T비트는 다음에 설명하는 바와 같이, 명령에 기술되어 있는 지정 조건에 대한 연산결과의 진위가 설정된다.
상기 명령 레지스터IR1의 내용은 연산 실행 페이즈(EX) 전에 명령레지스터IR2로 이행되고, 후의 메모리 액세스 페이즈(MA)와 라이트백 페이즈(WB)의 파이프라인 상태에 있는 명령사이에서 충돌을 일으키지 않는지가 상기 레지스터 내용 체크 블럭RCCB를 거쳐서 체크되고, 그 결과가 신호S1로서 출력된다. 이때, 명령 레지스터IR2에 저장되는 것은 레지스터 필드의 값뿐이다. 상술한 바와 같이 명령레지스터IR1, IR2가 유지하는 레지스터 필드RRRR, rrrr의 값은 상기 소오스 레지스터 디코더 SRD, 디스티네이션 레지스터 디코더DRD, 라이트백 레지스터 디코더WBRD에 공급된다. 소오스 레지스터 디코더SRD, 디스티네이션 레지스터 디코더DRD, 라이트백 레지스터 디코더WBRD는 16개의 범용 레지스터R0H, R0L, …, R15H, R15L중의 1개의 레지스터쌍을 선택하는 선택 신호를 생성해서 실행 유닛EXEC에 공급한다.
메모리 인터페이스MIF는 중앙처리장치CPU가 메모리를 액세스할 필요가 있는지, 없는지, 그것이 리드인지 라이트인지 등을 검출해서 메모리의 액세스에 필요한 신호를 출력한다. 또, 명령 페치/명령 레지스터 제어(Instruction Fetth & IR Control)블럭IF & IRC는 메모리에서의 명령페치가 필요한지 아닌지, 명령 레지스터IRH와 IRL의 내용을 언제 갱신할 지 등을 결정해서 필요한 신호를 검출하는 기능을 갖는다. 이 명령 페치/명령 레지스터 제어 블럭 IF & IRC의 기능은 파이프라인의 상태, 메모리의 대기상태, 명령큐(IRH, IRL)의 상태 등을 참고로 소정 제어 신호를 출력하고, 명령큐나 명령 페치의 제어를 실행한다. 본 실시예에서 특징적인 것은 명령 페치가 32비트 단위로 실행되므로 그중에는 16비트의 명령길이의 명령이 2개 채워져 있는 것이다. 이 때문에 전회의 명령을 페치할때 동시에 페치한 명령은 다른 페이즈에서 재차 페치할 필요가 없다. 이와 같은 사상을 총합해서 명령 페치를 언제 실행할지가 제어된다. 명령 페치/명령 레지스터 제어 블럭IF & IRC는 유한 상태 머신으로서 구성되고, 그 구성에 대해서는 공지이므로 상세한 설명을 생략한다.
또한, 도 5에 있어서, IMB는 명령에 포함되는 이미디어트 데이타등을 실행 유닛EXEC로 보내기 위한 버퍼이다. 또, 명령큐IRH, IRL, 명령 레지스터IR1의 래치타이밍은 상기 클럭 신호 ψ1과 동기된다. 명령 레지스터 IR2, 마이크로 명령 레지스터MIR 및 레지스터WBR0, WBR1의 래치 타이밍과 상기 레지스터 내용 체크 블럭RCCB에 의한 신호S1 출력 타이밍은 상기 클럭 신호 ψ2와 동기된다.
데이타 버스폭이 32비트인데 대해 고정 길이 명령을 16비트로 했으므로, 명령 버퍼로서는 IRH와 IRL의 2개가 마련되어 있지만 고정 길이 명령이 8비트인 경우는 명령 버퍼가 4개, 고정 길이 명령이 4비트인 경우는 명령 버퍼가 8개와 같이 고정 길이 명령을 데이타 버스폭 중에서 몇개 전송할 수 있는지 따라서 명령 버퍼의 수는 결정된다.
[6] CPU의 실행 유닛
도 6 및 도 7에는 중앙처리장치CPU의 실행 유닛EXEC의 1예가 도시되어 있다. 쌍바의 도면에 있어서 각각 A, B, C, D로 표시되는 버스는 공통 접속되어 있다. 실행 유닛EXEC는 특히 제한되지 않지만, 명령의 페치나 프로그램 카운터의 갱신을 하는 명령 페치부IFB, 범용 레지스터부GRB, 가감산 시프트 연산 등을 실행하는 연산부OPB, 메모리의 액세스 및 데이타의 얼라이먼트 처리를 하는 메모리 액세스부MAB 및 승산부MULT를 포함한다. 상기 각각의 블럭은 4개의 32비트폭의 데이타 버스A, B, C, D에 의해 결합되어 있다.
상기 명령 페치부IFB의 일부인 상기 명령 버퍼(명령큐)IRH, IRL, 멀티 플렉서MPX 및 명령 레지스터IR1은 도 5의 블럭 구성에서는 실행유닛EXEC와는 별도로 기재되어 있지만, 도 6과 같이, 실행 유닛EXEC에 포함되어도 좋다. 이미디어트 버퍼(Immediate Buffer)IMB는 이미디어트 데이타를 절단해서 필요하다면 비트 시프트를 실행하기 위한 논리이다. PCH, PCL은 명령 페치를 실행하기 위한 어드레스를 저장해 두는 프로그램 카운터이다. AUH(Arithmetic Unit High), AUL(Arithmetic Unit Low)는 프로그램 카운터의 갱신을 하기 위한 가산기이며 32비트의 가산을 할 수 있다. PRH(Procedure Address Register High), PRL(Procedure Address Register Low)는 함수 콜을 할때 리턴 어드레스를 저장하기 위한 처리(procedure) 어드레스 레지스터이다. VBRH(Vector Base Register High), VBRL(Vector Base Register Low)는 인터럽트 벡터 영역의 베이스 어드레스의 저장 영역으로서 사용된다. GBRH(Global Base Register Low)는 I/O의 베이스 어드레스의 저장 레지스터로서 이용된다. BRH(Break Resister High), BRL(Break Register Low)은 브레이크 루틴으로부터의 리턴지 어드레스의 저장 레지스터로서 이용된다.
상기 범용 레지스터부GRB에는 R0H, R0L ∼ R15H, R15L로 표시되는 32비트 길이의 범용 레지스트가 16개 포함된다. 상기 연산부OPB에 있어서 SFTH(Shifter High), SFTL(Shifter Low)는 비프 시프트나 회전 등을 실행하기 위한 하드웨어이다. ALUH(Arithmetic Logic Unit High), ALUL(Arithmetic Logic Unit Low)는 산술 논리 연산을 실행하는 연산기이다. SWP & EXT는 교체 명령을 실행하거나 부호 확장(사인 확장)이나 제로 확장을 실행하기 위한 하드웨이어다. ALN(Aligner)은 바이트나 워드에서 I/O에서 액세스된 데이타를 얼라이먼트하기 위한 하드웨어이다. MRBH(Memory read buffer High), MRBL(Memory Read Buffer Low)는 메모리에서 리드된 데이타를 넣기 위한 일시 레지스터이다. MWBH(Memory Write Buffer High)과 MWBL(Memory Write Buffer Low)은 메모리에 라이트 데이타를 넣기 위한 일시 레지스터이다. MABH(Memory Address Buffer High), MABL(Memory Address Buffer Low)는 메모리 억세스할때 어드레스를 넣어 두는 일시 레지스터이다. MLTB(MULT Buffer)은 승산부MULT로 승수와 피승수를 전송하기 위한 일시 레지스터이다.
중앙처리장치CPU 내외의 버스와의 접속 관계는 다음과 같이 된다. 즉, MTBL, MTBH는 승산부MULT와 접속하기 위한 쌍방향 전용 버스이다. 도 6 및 도 7에 있어서 IDBH, IDBL은 도 2의 데이타 버스IDB31-0에 대응하고, 또, IABH, IABL은 도 2의 어드레스 버스 IAB23-0에 대응된다. 상기 프로그램 카운터PCH, PCL의 값은 어드레스 버스IABH, IABL로 출력되고, 명령 버퍼IRH, IRL은 데이타 버스IDBH, IDBL에서 데이타를 받고, 일시 레지스터MWBH, MWBL의 출력은 데이타 버스IDBH, IDBL에 인가된다. 일시 레지스터MRBH, MRBL은 데이타 버스IDBH, IDBL 및 전용 버스MTBH, MTBL에서 데이타가 입력된다. 일시 레지스터MABH, MABL이 유지하는 어드레스 정보는 어드레스 버스IABH, IABL로 출력된다. 승산용의 일시 레지스터MLTB는 전용 버스MTBH, MTBL로 출력된다.
[7] CPU에 의한 파이프라인 스테이지
도 8에는 중앙처리장치CPU에 의한 파이프라인 처리의 스테이지의 1예가 도시되어 있다. 이 중앙처리장치CPU의 기본적인 파이프라인 구성은 5단의 스테이지로 되고, 기본적인 스테이지의 페이즈는
IF : (Instruction Fetch) 명령 페치,
ID : (Instruction Decode) 명령 디코드,
EX : (Execute) 실행,
MA : (Memory Access) 메모리 액세스,
WB : (Write-Back) 라이트 백
로 된다. 각 파이프 스테이지의 실행 내용의 1예를 도시한 도 8에 있어서, AddressBus는 도 2의 어드레스 버스IAB23-0에 대응되고, DataBus는 마찬가지로 IDB31-0에 대응된다. 도 8의 IR은 도 6 및 도 5의 명령 버퍼IRH, IRL에 대응된다. 도 8에 있어서, A-Bus, B-Bus, C-Bus, D-Bus는 각각 도 7에 있어서의 A버스, B버스, C버스, D버스이다. 마찬가지로 도 8에 있어서의 MAB, MRB는 도 7에 있어서의 MABH, MABL, MRBH, MRBL이다.
[8] 레지스터 경합 상태에 있어서의 파이프라인 시퀀스
도 9를 참조하면서 상기 레지스터 경합 상태에 있어서의 파이프라인 시퀀스를 설명한다. 먼저 최초에 동일 도면에 도시되는 신호의 의미를 설명한다. 동작 기준 클럭 신호로서의 상기 논오버랩 2상 클럭 신호 ψ1과 ψ2의 파형이 도 9의 가장 위에 표시된다. 클럭 신호 ψ1의 상승에서부터 다음의 ψ1의 상승까지의 기간을 1머신 사이클로 한다. 계속해서, 어드레스 버스와 데이타 버스의 상태를 나타낸다. 다음의 IR Latch는 명령 버퍼(IR(32bit) 또는 IRH와 IRL)의 래치 신호를 나타내고 있다. IR Latch는 IR1레지스터의 입력 래치 신호 파형을 나타내고 있다. IR1(16bit)는 명령 디코드단에 존재하는 명령을 유지한다. 상기 하드웨어 시퀀스 제어 명령 레지스터(Hardware Sequence Control Instruction Register)HIR은 부분 디코드된 마이크로 코드와 시퀀스 정보나 파이프라인의 제어 정보를 유지하는 레지스터이다. 도 9에 있어서 Reg.Content Flag는 LOAD명령과 실행 유닛EXEC를 사용하는 명령사이에서의 레지스터의 경합을 체크할 필요가 있는 것을 나타내는 플래그이다. 사이클(4)에서 이것이 검출되어 Content Flag(C플래그)가 세트된다. 동시에 오퍼런드를 로드할 필요가 있는 것을 나타내는 LOAD Flag(L플래그)가 세트된다. 또, 마찬가지로 해서 버스 연산이 필요로 되는 것을 나타내는 Bus Cycle Flag(B플래그)도 4사이클째에서 세트된다. 이 플래그는 버스 사이클이 현재 실행되고 있는지를 나타내는 플래그이다. 명령 페치 금지 플래그(IF Inhibit Flag : I플래그)는 명령 페치를 중지하고, 그 대신에 데이타 액세스를 실행하는 것을 나타내는 플래그이다. 스팁 신호(Skip Sig.)는 그 사이클에 실행 유닛EXEC에서 실행되는 처리를 캔슬하는 의미의 플래그이다. Execution은 실행 유닛 EXEC에서 실행되는 처리를 나타내고 있다. Reg. write는 레지스터로의 라이트 신호이다. 통상 연산시의 Reg. write에 의해, C-Bus를 거쳐서 명령에 의해 지정된 디스티네이션 레지스터로의 라이트가 실행된다. LOAD명령 및 MULT명령 실행시에는 D-Bus를 거쳐서 명령에 의해 지정된 디스티네이션 레지스터로 라이트가 실행된다. 그 의미에서 타이밍도에는 신호Reg. write를 C-Bus용과 D-Bus용으로 나누어서 표시하고 있으며, C-Bus용 및 D-Bus용의 양신호Reg. write가 동일한 레지스터에 겹친 경우에는 C-Bus 우선으로 라이트가 실행된다. 즉, C-Bus에서의 라이트만이 실행된다. 5사이클째에 표시되어 있는 점선의 신호는 Skip Sig.에 의해 금지된 레지스터로의 라이트를 나타내고 있다. MAB는 메모리 어드레스 버스의 의미이며 데이타 액세스가 실행되었을 때의 어드레스를 출력한다. MRB Latch는 메모리 리드 버퍼의 의미이며 데이타를 래치하는 신호이다. PC는 프로그램 카운터의 값을 나타내고 있다.
도 9는 LOAD명령(LOAD @R1, R2)와 ADD명령(ADD R2, R3)의 시퀀스를 1예로서 도시한 타이밍도이다. LOAD명령이 데이타를 저장하는 레지스터R2와 ADD명령이 사용하는 레지스터R2는 공통이며, 통상의 파이프라인 흐름에 의해 명령 실행이 실행되면 레지스터R2의 값이 결정되기 전에 해당 레지스터R2의 값이 연산에 사용된다는 사태를 발생시킨다. 이 예에서는 이러한 레지스터R2의 사용이 경합했을때의 파이프라인의 제어가 어떠한 타이밍에서 실행되는지를 7사이클에 걸쳐서 나타내고 있다. 최하단에 파이프라인의 실행 상황을 나타낸다. LOAD명령의 디스티네이션으로 된 레지스터R2와 ADD명령의 소오스 레지스터R2가 충돌하므로, 빗금으로 표시한 5사이클째에 스톨(지연)이 발생하고 있다. 이 지연을 발생시키는 것은 먼저, 레지스터 경합 상태가 발생하는지 아닌지의 검출과 레지스터 경합 상태를 회피하기 위해서는 실행 사이클(EX)를 몇 사이클을 지연시키면 좋을지의 인식이 필요하게 된다. 전자에 관해서는 상기 레지스터WBR1이 출력하는 전의 명령에 포함되는 레지스터 지정 정보(이 예에 따르면 LOAD명령에 포함되는 레지스터R2를 지정하는 정보)와 후의 명령에 포함되는 레지스터 지정 정보(이 예에 따르면 ADD)명령에 포함되는 레지스터R2를 지정하는 정보)를 비교하는 상기 레지스터 내용 체크 블럭RCCB가 출력하는 신호S1이 어서트되는 것에 의해서 검출된다. 후자에 관해서는 연산 코드의 디코드 결과에서 인식할 수 있다. 도면의 예에서는 LOAD명령의 실행 사이클(EX)수는 1이므로, 제5사이클째에만 지연이 발생하고 있다.
도 10에는 레지스터 경합 상태에 있어서의 파이프라인 시퀀스의 다른 예가 도시된다. 도 10은 승산 명령으로서의 MULT명령(MUL R1, R2)와 ADD명령(ADD R4, R3)과 SUB명령(SUB R3, R2)의 시퀀스를 예로서 도시한 타이밍도이다. MUL명령이 데이타를 저장하는 레지스터R2와 SUB명령이 사용하는 레지스터R2가 공통이다. 레지스터 경합 상태를 파이프라인 시퀀스에 반영하지 않으면, 명령 실행이 실행되면 레지스터R2의 값이 결정되기 전에 다른 연산에 사용된다는 사태를 발생한다. 본 예에서는 이와 같이 레지스터의 사용이 경합했을때에 파이프라인의 제어가 어떠한 타이밍에서 실행되는지를 7사이클에 걸쳐서 나타내고 있다. 본 도면의 표기 형식은 상기 도 9의 경우와 마찬가지이며, 상세한 설명은 생략하지만, 승산을 4사이클에서 실행할 수 있는 상태를 나타낸다. MULT명령에서는 EX, ML, ML, ML의 4스테이지에서 명령 실행을 실행한다. 승산기는 16b*16b의 결과를 32b에 저장하는 승산을 4사이클에서 실행할 수 있다. 이것은 16b*4b의 부분곱과 누적합을 구하는 것을 각 사이클에 대해 실행하는 것에 의해 실행할 수 있다. 이 예의 경우에는 MULT명령에 대해서 SUB명령은 2사이클 지연되어 레지스터R1에 페치되고, MULT명령은 EX, ML, ML, ML의 4사이클에서 승산 연산을 실행하므로, SUB명령의 실행 사이클(EX)가 2사이클분 지연되고 있다.
[9] 메모리 액세스 경합시의 파이프라인 시퀀스
도 11에는 메모리로부터의 데이타 페치와 명령 페치가 경합한 경우의 1예 파이프 제어 시퀀스가 도시되어 있다. 이 경우에는 데이타 페치가 우선되고, 이것에 경합하는 명령 페치를 포함하는 명령 실행 스케쥴은 전체적으로 겹치지 않는다. 이 제어를 실행하기 위해, 로드 플래그(LOAD Flag)와 버스 사이클 플래그(BUS Cycle Flag)가 경합하는 상태에 있어서 명령 페치 대기 플래그(IF Wait Flag)가 세트되어 명령 페치 사이클의 개시가 지연된다.
[10] 여러개의 사이클 명령 실행의 시퀀스
도 12에는 여러개의 사이클 명령을 실행할때의 1예의 타이밍도가 도시되어 있다. 여기에서는 AND(논리곱)명령의 일종인 명령"AND. B#imm,@R1"를 1예로서 설명한다. 이 명령은 레지스터R1 상대로 지정되는 메모리의 8비트 데이타와 8비트 이미디어트 데이타의 논리곱을 연산하는 명령이다. 이 AND. B명령은 매크로 명령1, 마이크로 명령1, 마이크로 명령2에 의해서 실행되는 여러개의 사이클 명령으로 된다. 상기 매크로 명령1은 레지스터R1의 내용에 의해 지정되는 메모리의 영역에서 바이트 오퍼런드를 페치하는 명령이다. 상기 마이크로 명령1은 상기 바이트 오퍼런드에 이미디어트 데이타를 AND하는 명령이다. 상기 마이크로 명령2는 레지스터R1의 내용에 의해 지정되는 메모리의 영역에 바이트 오퍼런드를 라이트하는 명령이다.
상기 AND.B명령의 실행 내용을 C언어로 기술하면,
Figure kpo00001
로 된다. 이 기재를 참조하면, 마이크로 명령1의 ID(명령 디코드)단과 EX(연산 실행)단 사이 및 마이크로 명령2의 μ-IF(마이크로 명령 페치)단과 ID단 사이에 빈 사이클이 있다. 이것은 매크로 명령1의 MA(메모리 액세스)단에서 페치한 오퍼런드를 마이크로 명령1의 EX(연산 실행단)단에서 사용하지 않으면 안되기 때문이다.
[11] CPU의 명령 할당
중앙처리장치CPU에 할당 가능하게 되는 명령은 도 13 및 도 14에 도시되는 데이타 전송 명령, 도 15에 도시되는 논리 연산 명령, 도 16 및 도 17에 도시되는 산술 연산 명령, 도 18에 도시되는 시프트 명령, 도 19에 도시되는 분기 명령, 도 20 및 도 21에 도시되는 시스템 제어 명령으로 된다. 도 22는 도 13∼도21의 기재 형식을 설명하는 것이다. 이것에 따르면, 도 13∼도 21의 기재에 있어서, 명령의 항목은 니모닉으로 표시된다. 이 니모닉 표시중에 있어서의 어드레싱 모드의 일람은 도 23에 도시된다. 각종 명령 코드에서 명확한 바와 같이, 16비트 고정 길이 명령 포맷으로 표현할 수 있는 65536가지의 조합만으로 범용 레지스터 방식의 정수연산, 분기방식, 제어 명령 등이 모두 할당된다. 디코드도 비트의 할당을 연구해서 유사한 기능의 명령을 그룹화한 것에 의해서 비교적 적은 논리 표현으로 실현할 수 있다. 연산 코드가 "1111"로 시작되는 명령열은 모두 지정되어 있으며, 이것을 사용하는 것에 의해 IEEE부동 소수점 규격에 준거한 단일 정밀도, 2배 정밀도 연산을 할당할 수도 있다.
[12] 분기 명령의 디스플레이스먼트 길이
도 24, 도 25, 도 26 및 도 27에는 샘플로서 추출한 각종 프로그램에 있어서의 분기 명령 및 점프 명령의 디스플레이스먼트 길이와 그 디스플레이스먼트 길이를 갖는 명령의 출현 빈도의 관계가 도시된다. 도 24 및 도 25는 조건 분기 명령(분기 명령) 및 무조건 분기 명령(분기 올웨이즈(aiways)명령)에 관한 것이고, 도 26은 서브 루틴 호출 명령에 관한 것이고, 도 27은 점프 명령 또는 점프 서브 루틴 명령에 관한 것이다. 여기에서 분기라는 것은 계산기 프로그램의 실행에 있어서 다수의 선택할 수 있는 명령 집합중의 하나를 선택하는 것이다. 점프라는 것은 계산기 프로그램의 실행에 있어서의 현재 실행되고 있는 명령의 암시적 또는 지정되어 있는 실행 수순으로부터의 탈출을 의미한다. 디스플레이스먼트는 점프지 번지의 지정에 이용된다. 따라서, 디스플레이스먼트 길이의 비트수가 많을수록 먼 어드레스로 점프할 수 있다.
도 24∼도 26에 도시된 분기명령에 대한 디스플레이스먼트의 빈도분포는 히다치세사쿠쇼(주)의 마이크로 컴퓨터H8/500의 각종 프로그램을 해석해서 얻어진 데이타이다. 사용하고 있는 분기명령의 각 종류에 대한 디스플레이스먼트값의 분포를 나타내고 있다. 가로축은 사용된 디스플레이스먼트값의 log2를 취한 값이며, 0을 중심으로 해서 우측방향에는 디스플레이스먼트의 값이 정의 경우를 정의 정수(1, 3, 5, 7, …)로 log2{displacement}를 표시하고, 좌측방향에는 부의 값을 갖는 디스플레이스먼트에 대해서 부의 수로 -log2{-displacement}를 표시한다. 세로축은 %를 단위로 해서 그 출현빈도를 나타낸다. 데이타는 9개의 다른 프로그램에 대해서 채집하였다.
도 24 및 도 25에서 명확한 바와 같이, 분기명령 및 부기 올웨이즈 명령에 있어서, 출현빈도가 높은 것은 비교적 중심부근 분포하고 있으며, 8비트의 디스플레이스먼트가 있으면 분포의 대부분을 커버할 수 있다. 또, 도 26의 서브루틴 호출 명령에서는 상당히 멀리까지 점프하고 있지만, 12∼13비트의 디스플레이스먼트 필드가 있으면, 모두 커버할 수 있는 것을 알 수 있다. 또, 도 27에 도시된 점프명령 또는 점프 서브 루틴 명령의 경우, 가로축의 값은 점프명령이 존재한 번지와 점프지 번지의 차를 디스플레이스먼트로 하였다. 이것도 점프할 장소가 먼 것을 알 수 있다.
본 실시예의 마이크로 컴퓨터MCU에 있어서는 조건 분기명령의 디스플레이스먼트를 8비트, 서브루틴 분기명령 및 무조건 분기명령의 디스플레이스먼트를 12비트로 고정하고, 그들 명령을 16비트 고정길이 명령포맷으로 제한하도록 하고 있다. 예를 들면, 도 19에 도시된 각종 분기명령에 있어서, BC, BT, BF의 각각이 조건 분기명령으로 되고, 동일도면에 있어서의 BSR이 서브루틴 분기명령, 그리고 BRA가 무조건 분기명령으로 된다. 각각의 명령의 상세한 내용에 대해서는 후술하는 명령의 설명의 항목을 참조하기 바란다.
프로그램을 비교적 작은 서브루틴(함수)의 집합으로서 작성하는 모듈러 프로그래밍 방법에 있어서, 조건 분기명령은 함수내로만 점프한다. 대개의 함수는 수백 바이트 정도 크기 밖에 없으므로 8비트의 디스플레이스먼트에 의해 거의 커버할 수 있다. 반면, 서브루틴 분기는 함수 자체의 외부로 점프하므로 가까운 장소로는 점프하지 않는 경향이 있으며, 조건 분기명령보다 많은 비트수의 디스플레이스먼트를 필요로 한다. 무조건 분기는 프로그램의 고속화를 위해서 함수의 마지막에서 다른 함수를 호출할 때에 사용되는 경우도 있으며, 프로그램 작성시에 서브루틴 분기명령과 동일하게 취급할 수 있다는 것이 이점으로 고려되므로, 디스플레이스먼트의 비트수는 서브루틴 분기와 동일하게 하고 있다. 이와 같이, 분기명령의 종류에 따라서 적절한 디스플레이스먼트 길이를 고정적으로 할당하는 것에 의해, 실질적인 장해없이 16비트 고정길이 명령포맷의 실현에 기인한다.
[13] 이미디어트 데이타의 처리
16비트 고정길이 명령포맷을 채용했을 때, 데이타어 길이가 32비트인 것을 감안하면 모든 이미디어트 값을 16비트 이하로 제한하는 것은 현실적으로는 없다. 본 실시예에서는 16비트 이상의 이미디어트값의 지정을 하나의 명령포맷중에서 실행할 수 있도록 하기 위해 프로그램 카운터 PC 등의 레지스터의 값과 상대 어드레스를 사용하는 방법을 채용한다.
이 이미디어트값의 처리를 실행하는 명령으로서는 예를 들면 도 13도에 도시된 로드 명령어로서의 MOV. W @(disp, PC)Rn이나 MOV. L@(disp, PC)Rn 등이 있다. 이들의 명령은 범용 레지스터Rn에 이미디어트 데이타를 저장하기 위한 명령이다. 데이타는 32비트로 부호 확장된다. 데이타가 워드/롱워드일때는 프로그램 카운터PC에 디스플레이스먼트를 가한 어드레스에 저장된 테이블내의 데이타를 참조한다. 데이타가 워드일때 디스플레이스먼트는 1비트 좌측으로 시프트되어 9비트로 되고, 테이블과의 상대거리는 -256에서 +254바이트로 된다. 프로그램 카운터PC는 본 명령의 2명령후의 선두 어드레스이다. 따라서, 워드 데이타는 2바이트 경계에 배치할 필요가 있다. 데이타가 롱워드일때, 디스플레이스먼트는 2비트 좌측으로 시프트되어 10비트로 되고, 오퍼런드와의 상대거리는 -512에서 +508바이트로 된다. 프로그램 카운터PC는 본 명령의 2명령후의 선두 어드레스이지만, 프로그램 카운터PC의 하위 2비트는 B, 00으로 보정된다. 따라서, 롱워드 데이타는 4바이트 경계에 배치할 필요가 있다.
[14] 묵시(implicit)의 레지스터 지정
묵시의 레지스터 지정이라고 하는 것은 명령중에 레지스터 지정 필드가 없음에도 불구하고 오퍼런드로서 고정된 범용 레지스터를 선택하는 것을 말한다. 여기에서 말하는 범용 레지스터는 예를 들면 메모리 어드레스를 결정하기 위해서 이용되고, 또는 메모리에서 페치한 데이타의 저장에 이용된다. 이 묵시의 레지스터 지정을 실행하는 명령으로서는 예를 들면 도 14에 도시된 MOV @(disp, R1)R0이나 MOV R0, @(disp, R1)을 들 수 있다. 동일 도면의 해당 명령에 대응하는 코드에서도 명확한 바와 같이, 레지스터 지정 필드는 없고, 연산 코드와 8비트의 디스플레이스먼트 dddddddd를 포함할 뿐이다. 이 디스플레이스먼트는 묵시적으로 지정되어 있는 레지스터R1의 값과 함께 메모리 어드레스를 결정하기 위해 이용된다. 이 묵시의 레지스터 지정에 의해서 레지스터의 값과 디스플레이스먼트를 필요로 하는 명령에 있어서, 디스플레이스먼트로서 필요하게 되는 비트수를 감소시키지 않고도 명령어 길이를 16비트로 제한하는 것이 가능하게 된다.
[15] 기능 복합 명령
기능 복합 명령으로서 예를 들면 도 15에 기재된 AND. B # imm, @R1과 같은 비트 조작 명령을 들 수 있다. 이 명령은 상기와 마찬가지의 묵시적으로 지정되는 레지스터R1상대에서 지정되는 메모리의 8비트 데이타와 8비트의 이미디어트 데이타의 논리곱(AND처리)를 실행하는 명령이며, 메모리의 리드, AND처리, AND처리 결과의 해당 메모리로의 라이트 리턴을 실행하는 3명령을 복합한 명령이다. 이 종류의 처리는 조립기기 제어 용도에 있어서는 매우 출현 빈도가 높고, 이와 같은 복합 기능적인 명령을 16비트 고정 길이 명령 포맷으로서 채용하는 것은 코드 효율향상에 기여한다.
[16] 지정 조건에 대한 진위 설정 명령
지정 조건에 대해서 연산 결과의 진위 설정을 실행하는 명령으로서, 예를 들면 도 16에 도시된 8종류의 CMP 명령을 들 수 있다. 이들 명령은 오퍼런드의 비교를 실행하는 명령이며, 비교 결과를 상기 상태 레지스터SR의 T(True)비트에 설정한다. 예를 들면, CMP/EQ Rm, RnFF로 나타내는 명령은 레지스터Rm과 Rn의 값이 동일한지의 여부를 비교하고, 동일할 때에는 T비트에 1을 세트하고, 불일치할 때는 0으로 클리어한다. 이와 같이 상태 레지스터에 T비트를 마련하고, 비교 결과에 대한 진위를 T비트에 설정하는 조작을 16비트 고정 길이 명령 포맷의 1명령에서 실행하는 것에 의해, 그 결과의 진위에 다른 처리를 실행하는 다음 명령, 예를 들면 상기 조건 분기 명령 BT령에 있어서는 직접 T비트를 참조하면 좋고, 해당 BT명령 그 자체에 이전의 명령에 의한 연산 결과에 대해서 필요한 조건(Condition)의 기술은 불필요하게 되며, 한정된 고정 길이 명령 포맷중에 있어서 그분만큼 BT 명령에 필요한 디스플레이스먼트의 영역을 크게 취하는 것이 가능하게 되며, 결국, 16비트 고정 길이 명령 포맷의 실현에 기여한다.
[17] 명령 일람
지금까지의 설명에 있어서, 16비트 고정 길이 포맷의 명령중 특징적인 명령을 대표적으로 설명했지만, 또, 16비트 고정 길이 명령 포맷의 전모를 밝히기 위해 본 실시예의 마이크로 컴퓨터의 모든 명령을 알파벳순으로 순차 설명한다. 각각의 명령의 설명은 명령의 명칭, 어셈블러의 입력서식으로 표시된 서식(imm, disp는 수치 또는 심벌), 명령의 설명, 명령 사용상의 주의사항, C언어로 표시된 동작설명, 어셈블러 니모닉으로 예시된 동작예(명령의 실행전후의 상태를 표시) 및 코드를 포함한다. 여기에서 각각의 명령을 설명하기 전에 프로그램을 실행하는 경우에 주목해야 할 프로그래머의 모델(programmer's model)로서의 레지스터 구성을 도 28을 참조하면서 설명한다. 프로그래머의 모델로 되는 레지스터는 상기 범용 레지스터R0(R0H, R0L)∼R15(R15H, R15L) 이외에 상태 레지스터SR, 처리 레지스터PR(PRH, PRL), 글로벌 베이스 레지스터GBR(GBRH, GBRL), 프로그램 카운터PC(PCH, PCL), 벡터 베이스 레지스터VBR(VBRH, VBRL), 브레이크 레지스터BR(BRH, BRL) 등의 제어 레지스터로 된다. 도 28의 예에서 레지스터R0은 어큐뮬레이터, 레지스터R1은 인덱스 레지스터, 레지스터R15는 스택 포인터로 된다. 도 28의 상태 레지스터SR에 있어서, M/Q비트는 DIV명령에서 참조되고, I비트는 인터럽션 마스크 비트로 되고, -는 예약비트로 되고, D비트는 PASS명령에서 참조되고, C비트는 캐리/빌림수/오버플로/언더플로/시프트 아웃을 반영하는 비트로 되고, T비트는 상기한 바와 같이 참(1), 거짓(0)을 나타내는 비트로 된다.
C에서 동작내용을 나타낸 동작설명은 특히 제한되지 않지만, 이하의 자원의 사용을 가정하고 있다.
Figure kpo00002
어드레스Addr 각각의 사이즈의 내용을 리턴한다.
(2n)번지 이외에서의 워드, (4n)번지 이외에서의 롱워드의 리드는 어드레스 에러로서 검출된다.
Figure kpo00003
어드레스Addr에 데이타Data를 각각의 사이즈로 라이트한다.
(2n)번지 이외에서의 워드, (4n)번지 이외로의 롱워드의 라이트는 어드레스 에러로서 검출된다.
Delay_Slot(unsigned long Addr) ;
어드레스(Addr-4)의 슬롯명령으로 실행을 이동한다. 이것은 Delay_Slot(4)일 때, 4번지는 아니고 0번지의 명령으로 실행이 이행하는 것을 의미한다. 또, 이 함수에서 이하의 명령으로 실행이 이행되도록 하면, 그 직전에 슬롯 부당명령으로서 검출된다.
BC, BF, BT, BRA, BSR, JMP, JSR, RTS
BRK, PASS, RTB, RTE, TRAP
unsigned long R[16]
unsigned long CR[3]
unsigned long PC ;
unsigned long RB ;
unsigned long VBR ;
각 레지스터 본체인
#define SR(CR[0])
#define RR(CR[1])
#define GBR(CR[2])
레지스터 고유명과 CRn 형식표시의 대응
struct SRO {
unisigned long dummy0 : 22 ;
unisigned long M0 : 1 ;
unisigned long Q0 : 1 ;
unisigned long I0 : 4 ;
unisigned long dummy2 : 1 ;
unisigned long D0 : 1 ;
unisigned long C0 : 1 ;
unisigned long T0 : 1 ;
} ;
SR의 구조의 정의
#define M((*(struct SRo *)(&CR[0])). M0)
#define Q((*(struct SR0 *)(&CR[0])). Q0)
#define D((*(struct SR0 *)(&CR[0])). D0)
#define C((*(struct SR0 *)(&CR[0])). C0)
#define T((*(struct SR0 *)(&CR[0])). T0)
SR내 비트의 정의
#define BRKVEC 0x0000001C
#define PASSVEC 0x00000014
벡터 어드레스의 정의
#define SHAL() SHLL()
다른 이름 동일 명령의 정의
Error ( char *er) ;
에러표시함수
이것 이외에 PC는 현재 실행중인 명령의 4바이트(2명령)지를 나타내고 있는 것으로 가정한다. 이것은 (PC-4 ;)는 4번지는 아니고 0번지의 명령으로 실행이 이행하는 것을 의미한다.
어셈블러 니모닉의 형식으로 기재되는 사용예에 있어서, 코드는 2진 코드를 표시하고,
니모닉중 r은 코드의 rrrr
R은 RRRR
imm은 iiiiiiii
disp는 dddd 또는
dddddddd
dddddddddddd
로 전개된다.
MOV명령 코드중의 SS는 오퍼런드 사이즈에 의해서
01=바이트
10=워드
11=롱워드
로 전개된다.
ADD(가산) 명령
서식 ADD Rm, Rn
ADD #imm, Rn
[설명] 범용 레지스터Rn의 내용과 Rm을 가산하고, 결과를 Rn에 저장한다. 범용 레지스터 Rn과 8비트 이미디어트 데이타의 가산도 가능하다. 8비트 이미디어트 데이타는 32비트로 부호 확장되므로 감산과 겸용한다.
[동작]
Figure kpo00004
사용예 ADD R0, R1 ; 실행전 R0=H'7FFFFFFF, R1=H'00000001
; 실행후 R1=H'80000000
ADD #H'01, R2 ; 실행전 R2=H'00000000
; 실행후 R2=H'00000001
ADD #H'FE, R3 ; 실행전 R3=H'00000001
; 실행후 R3=H'FFFFFFFF
코드
Figure kpo00005
ADDC(캐리를 갖는 가산) 명령
서식 ADDC Rm, Rn
설명 범용 레지스터Rn의 내용과 Rm 및 C비트를 가산하고, 결과를 Rn에 저장한다. 연산의 결과에 의해 캐리가 C비트에 반영된다.
동작
Figure kpo00006
사용예 ADDC R0, R1 ; 실행전 C=1, R0=H'00000001, R1=H'00000001,
; 실행후 C=0, R1=H'00000003
ADDC R2, R3 ; 실행전 C=0, R2=H'00000002, R3=H'FFFFFFFF,
; 실행후 C=1, R3=H'00000001
ADDC R4, R5 ; 실행전 C=1, R4=H'00000001, R5=H'FFFFFFFE,
; 실행후 C=1, R5=H'00000001
코드
Figure kpo00007
ADDS(포화기능을 갖는 가산) 명령
서식 ADDS Rm, Rn
설명 범용 레지스터Rn의 내용과 Rm을 가산하고, 결과를 Rn에 저장한다. 오버플로우가 발생해도 결과는 H'7FFFFFFF∼H'80000000의 범위로 제한된다. 이 때 C비트가 세트된다.
동작
Figure kpo00008
사용예 ADDS R0, R1 ; 실행전 R0=H'00000001, R1=H'7FFFFFFE, C=0
; 실행후 R1=H'7FFFFFFF, C=0
ADDS R0, R1 ; 실행전 R0=H'00000002, R1=H'7FFFFFFE, C=0
; 실행후 R1=H'7FFFFFFF, C=1
코드
Figure kpo00009
ADDV(오버플로우를 갖는 가산) 명령
서식 ADDV Rm, Rn
설명 범용 레지스터Rn의 내용과 Rm을 가산하고, 결과를 Rn에 저장한다. 오버플로우가 발생한 경우, C비트가 세트된다.
동작
Figure kpo00010
사용예 ADDV R0, R1 ; 실행전 RO=H'00000001, R1=H'7FFFFFFD, C=0
; 실행후 R1=H'7FFFFFFF, C=0
ADDV R0, R1 ; 실행전 R0=H'00000002, R1=H'7FFFFFFE, C=0
; 실행후 R1=H'80000000, C=1
코드
Figure kpo00011
AND(논리곱) 명령
서식 AND Rm, Rn
AND #imm, R0
AND. B #imm, @R1
설명 범용 레지스터Rn의 내용과 Rm의 논리곱을 취하고, 결과를 Rn에 저장한다. 특수형으로서 범용 레지스터R0과 제로 확장한 8비트 이미디어트 데이타의 논리곱 또는 R1상대에서 8비트 메모리와 8비트 이미디어트 데이타의 논리곱이 가능하다.
주의 AND #imm, R0에서는 연산의 결과, R0의 상위 24비트는 항상 클리어된다.
동작
Figure kpo00012
Figure kpo00013
사용예 AND R0, R1 ; 실행전 R0=H'AAAAAAAA, R1=H'55555555
; 실행후 R1=H'00000000
AND #H'0F, R0 ; 실행전 R0=H'FFFFFFFF
; 실행후 R0=H'0000000F
AND. B #H'80, @R1 ; 실행전 @R1=H'A5
; 실행후 @R1=H'80
코드
Figure kpo00014
BC/BF/BT(조건부 분기) 명령
서식 BC disp
BF disp
BT disp
설명 T/C비트를 참조하는 조건부 분기 명령이다. T=1일 때 BT는 분기하지만, BF는 다음의 명령을 실행한다. 반대로 T=0일 때 BF는 분기하지만, BT는 다음의 명령을 실행한다. BC는 C=1일 때 분기하지만, C=0일 때는 다음의 명령을 실행한다. 분기지는 PC에 디스플레이스먼트를 가한 어드레스이다. PC는 본 명령의 2 명령 후의 선두 어드레스이다. 디스플레이스먼트는 1비트 좌측으로 시프트되어 9비트이므로, 분기지와의 상대거리는 -256에서 +254바이트로 된다. 분기지에 도달하지 않을 때는 BRA명령 또는 JMP명령의 조합으로 대응한다.
동작
Figure kpo00015
Figure kpo00016
사용예 CLRT ; ; 항상 T=0
BT TRGET_T ; T=0이므로 분기하지 않는
BT TRGET_F ; T=0이므로 TRGET_F로 분기한다.
NOP
NOP ; BF명령에서 분기지 어드레스 계산에 사용되는 PC의 위치
TRGET_F ; BF명령의 분기지
코드
Figure kpo00017
BRA(무조건 분기) 명령
서식 BRA disp
설명 무조건의 지연분기 명령이다. 분기지는 PC에 디스플레이스먼트를 가한 어드레스이다. PC는 본 명령의 2명령후의 선두 어드레스이다. 디스플레이스먼트는 1비트 좌측으로 시프트되어 13비트이므로, 분기지와의 상대거리는 -4096에서 +4094바이트로 된다. 분기지에 도달하지 않을 때는 JMP명령으로의 변경이 필요하다. 이 때, 분기지 어드레스를 MOV명령으로 레지스터로 전송해 둘 필요가 있다.
주의 지연분기명령이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령 사이에 인터럽트는 접수되지 않는다. 직후의 명령이 분기명령일 때 부당명령으로서 인식된다.
동작
Figure kpo00018
사용예 BRA TRGET ; TRGET로 분기한다.
ADD R0,R1 ; 분기에 앞서 실행된다.
NOP ; BRA명령에 의해 분기지 어드레스계산에 사용하는 PC의 위치
TRGET ; BRA 명령의 분기지
코드
Figure kpo00019
BRK(소프트웨어 브레이크) 명령
서식 BRK
설명 브레이크 예외 처리를 개시한다. 즉, 외부 디바이스로 아크놀리지 신호를 리턴한 후, PC를 BR에 퇴피시키고, 소정의 벡터에 따라 브레이크 인터럽트 루틴으로 분기한다. PC는 본 명령의 선두 어드레스이다. 벡터 어드레스의 계산과 VBR의 내용은 관계없다. RTB와 조합해서 브레이크 루틴콜에 사용한다.
주의 본 명령은 인터럽트를 접수하지 않는다. BR은 브레이크 단자에 의한 하드웨어 브레이크와 공용된다. 따라서, 브레이크 처리중의 브레이크 재요구는 피해야 할 것이다. PC는 BR로 보호되지만, SR은 보호되지 않는다. 필요하면 STC명령으로 레지스터 또는 메모리로 퇴피하지 않으면 안된다.
동작
Figure kpo00020
사용예 CMP/EQ R0, R1 ;
BT _TRUE ; R0
Figure kpo00021
R1 일 때 브레이크한다.
BRK ; 브레이크 루틴으로부터의 리턴지이다.
…………………
BREAK : ; 브레이크 루틴의 입구
MOV R0,R0 ;
RTB ; 상기 BRK명령으로 되돌아간다.
코드
Figure kpo00022
BSR(처리콜) 명령
서식 BSR disp
설명 지정된 어드레스의 처리로 분기한다. PC의 내용을 PR로 퇴피시키고, PC에 디스플레이스먼트를 가한 어드레스로 분기한다. PC는 본 명령의 2명령후의 선두어드레스이다. 디스플레이스먼트는 1비트 좌측으로 시프트되어 13비트이므로, 분기지와의 상대거리는 -4096에서 +4094바이트로 된다. 분기지에 도달하지 않은 경우에는 JSP명령으로의 변경이 필요하다. 이 때, 분기지 어드레스를 MOV명령으로 레지스터로 전송해 둘 필요가 있다. RTS와 조합해서 처리콜에 사용한다.
주의 지연분기 명령이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령 사이에 인터럽트는 접수되지 않는다. 직후의 명령이 분기명령일 때 부당명령으로서 인식된다.
동작
Figure kpo00023
사용예 BSR TRGET ; TRGET로 분기한다.
MOV R3, R4 ; 분기에 앞서 실행된다.
ADD R0, R1 ; BSR 명령에서 분기지 어드레스 계산에 사용하는 PC의 위치
…………… 처리로부터의 리턴지이다.
……………
TRGET: ; 처리의 입구
MOV R2, R3 ;
RTS ; 상기 ADD 명령으로 되돌아간다.
MOV #1, R0 ; 분기에 앞서 실행된다.
코드
Figure kpo00024
CLRC(C비트 클리어) 명령
서식 CLRC
설명 SR의 비트를 클리어한다.
동작
Figure kpo00025
사용예 CLRC ; 실행전 C=1
; 실행후 C=0
코드
Figure kpo00026
CLRT(T비트 클리어)명령
서식 CLRT
설명 SR의 T비트를 클리어한다.
동작
Figure kpo00027
사용예 CLRT ; 실행전 T=1
; 실행후 T=0
코드
Figure kpo00028
CMP/cond(오퍼런드 비교)명령
서식 CMP/cont Rm, Rn
설명 범용 레지스터Rn과 Rm을 비교하고, 그 결과 지정된 조건(cont)가 성립하고 있으면 SR의 T비트를 세트한다. 조건이 성립하지 않을 때에는 T비트는 클리어된다. Rn의 내용은 변화하지 않는다. 8조건을 지정할 수 있다. PZ와 PL의 2조건에 대해서는 Rn과 0의 비교로 된다.
니모닉 설명
CMP/EQ Rm, Rn Rn=Rm일 때 T=1
CMP/GE Rm, Rn 유부호값으로서 Rn≥Rm일 때 T=1
CMP/GT Rm, Rn 유부호값으로서 Rn〉Rm일 때 T=1
CMP/HI Rm, Rn 무부호값으로서 Rn〉Rm일 때 T=1
CMP/HS Rm, Rn 무부호값으로서 Rn≥Rm일 때 T=1
CMP/PL Rn Rn〉0일 때 T=1
CMP/PZ Rn Rn≥0일 때 T=1
CMP/STR Rm, Rn 어느것인가의 바이트가 동일할 때 T=1
동작
Figure kpo00029
Figure kpo00030
사용예 CMP/GE R0, R1 ; R0=H'7FFFFFFF, R1=H'80000000
BT TRGET_T ; T=0 이므로, 분기하지 않는다.
CMP/HS R0, R1 ; R0=H'7FFFFFFF, R1=H'80000000
BT TRGET_T ; T=1이므로, 분기한다.
CMP/STR R2, R3 ; R2="ABCD", R3="XYCZ"
BT TRGET_T ; T=1 이므로, 분기한다.
코드
Figure kpo00031
DIV0S/DI0U/DIV1(스텝 제산) 명령
서식 DIV1 Rm, Rn
DIV0S Rm, Rn
DIV0U
설명 범용 레지스터Rn의 내용32비트를 Rm의 내용에서 1스텝 제산하고, 결과의 1비트를 SR의 C비트에 저장한다. DIV0S는 부호화 제산용의 초기화 명령으로서 피제수(Rn)의 MSB를 Q비트에, 제수(Rm)의 MSB를 M비트에, M비트와 Q비트의 EOR을 C비트에 저장한다. DIV0U는 부호 없음 제산용의 초기화 명령으로 M/Q, C비트를 0으로 클리어한다. DIV1을(필요하다면 ROTCL과 조합해서) 제수의 비트수분만큼 반복하는 것에 의해서 몫을 얻는다. 이 반복중에는 지정한 레지스터와 SR의 M/Q/C비트에 중간결과가 저장된다. 이들을 불필요하게 소프트 웨어에 의해 리라이트하면 연산결과는 보증되지 않는다. 제산의 시퀀스는 다음 사용예를 참조로 할 수 있다. 제로 제산과 오버플로우의 검출 및 잉여의 연산은 준비되어 있지 않다.
동작
Figure kpo00032
Figure kpo00033
Figure kpo00034
Figure kpo00035
Figure kpo00036
Figure kpo00037
Figure kpo00038
사용예 1 R1(32bits) ÷R0(16bits) = R1(16bits) ; 부호없음
SL16 R0 ; 제수를 상위 16bit, 하위 16bit를 0으로 설정
TEST R0, R0 ; 제로 제산 체크
BT ZERO_DIV ;
CMP/HS R0, R1 ; 오버플로우 체크
BT OVER_DIV ;
DIV0U ; 플래그의 초기화
. arepeat 16 ;
DIV1 R0, R1 ; 16회 반복
. aendr ;
ROTCL R1 ;
EXTU. W R1, R1 ; R1 =몫
사용예 2 R1 : R2(64bits) ÷R0(32bits) = R2(32bits) ; 부호없음
TEST R0, R0 ; 제로 제산 체크
BT ZERO_DIV ;
CMP/HS R0, R1 ; 오버플로우 체크
BT OVER_DIV ;
DIV0U ; 플래그의 초기화
. arepeat 32 ;
ROTCL R2 ; 32회 반복
DIV1 R0, R1 ;
. aendr ;
ROTCL R2 ; R2 =몫
사용예 3 R1(16bits) ÷R0(16bits) = R1(16bits) ; 부호화
SL16 R0 ; 제수를 상위 16bit, 하위 16bit를 0으로 설정
EXTS. W R1, R1 ; 피제수는 부호 확장해서 32비트
EOR R2, R2 ; R2=0
MOV R1, R3 ;
ROTCL R3 ;
SUBC R2, R1 ; 피제수가 부일 때 -1한다.
DIV0S R0, R1 ; 플래그의 초기화
. arepeat 16 ;
DIV1 R0, R1 ; 16회 반복
. aendr ;
EXTS. W R1, R1 ; R1 =몫(1이 보수 표현)
ROTCL R1 ;
ADDC R2, R1 ; 몫의 MSB가 1일 때 +1해서 2의 보수표현으로 변환
EXTS. W R1, R1 ; R1 =몫(2의 보수 표현
사용예 4 R2(32bits) ÷R0(32bits) = R1(32bits) : 부호화
EOR R3, R3 ;
MOV R2, R4 ;
ROTCL R4 ;
SUBC R1, R1 ; 피제수는 부호 확장해서 64bit
(R1 : R2)
SUBC R3, R2 ; 피제수가 부일 때 -1한다.
DIV0S R0, R1 ; 플래그의 초기화
. arepeat 32 ;
ROTCL R2 ; 32회 반복
DIV1 R0, R1 ;
. aendr ;
ROTCL R2 ; R2=몫(1의 보수 표현)
ADDC R2, R2 ; 몫의 MSB가 1일 때 +1해서 2의 보수표현으로 변환
; R2 =몫(2의 보수 표현)
코드
Figure kpo00039
EOR(배타적 논리합) 명령
서식 EOR Rm, Rn
EOR #imm, R0
EOR.B #imm, @R0
설명 범용 레지스터Rn의 내용과 Rm의 배타적 논리합을 취하고, 결과를 Rn에 저장한다. 특수형으로서 범용 레지스터R0과 제로 확장한 8비트 이미디어트 데이타의 배타적 논리합 또는 R1 상대로서 8비트 메모리와 8비트 이미디어트 데이타의 배타적 논리합이 가능하다.
동작
Figure kpo00040
사용예 EOR R0, R1 ; 실행전 R0=H'AAAAAAAA, R1=H'55555555
; 실행후 R1=H'FFFFFFFF
EOR #H' F0, R0 ; 실행전 R0=H'FFFFFFFF
; 실행후 R0=H'FFFFFF0F
EOR. B #H' A5, @R1 ; 실행전 @R1=H' A5
; 실행후 @R1=H' 00
코드
Figure kpo00041
EXTS(부호 확장) 명령
서식 EXTS. B Rm, Rn
EXTS. W Rm, Rn
설명 범용 레지스터Rm의 내용을 부호 확장해서 결과를 Rn에 저장한다. 바이트 지정일 때 Rm의 비트7의 내용을 비트8에서 비트31에 카피한다.
워드 지정일 때 Rm의 비트 15의 내용을 비트16에서 비트31로 카피한다.
동작
Figure kpo00042
Figure kpo00043
사용예 EXTS. B R0, R1 ; 실행전 R0=H'00000080
; 실행후 R1=H'FFFFFF80
EXTS. W R0, R1 ; 실행전 R0=H'0000800
; 실행후 R1=H'FFFF8000
코드
Figure kpo00044
EXTU(제로 확장) 명령
서식 EXTU. B Rm, Rn
EXTU. W Rm, Rn
설명 범용 레지스터Rm의 내용을 제로 확장해서 결과를 Rn에 저장한다. 바이트 지정일 때 Rn의 비트8에서 비트31에 0이 들어간다. 워드지정일 때 Rn의 비트16에서 비트31에 0이 들어간다.
동작
Figure kpo00045
사용예 EXTU. B R0, R1 ; 실행전 R0=H'FFFFFF80
; 실행후 R1=H'00000080
EXTU.W R0, R1 ; 실행전 R0=H'FFFF8000
; 실행후 R1=H'00008000
코드
Figure kpo00046
JMP(무조건 점프)명령
서식 JMP @Rn
설명 지정된 어드레스로 무조건 지연분기한다. 분기지는 범용레지스터Rn의 내용의 32비트 데이타로 표시되는 어드레스이다.
주의 지연분기 명령이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령 사이에 인터럽트는 접수되지 않는다. 직후의 명령이 분기명령일 때 부당명령으로서 인식된다.
동작
Figure kpo00047
사용예 .align 4
JMP_TABLE: .data.1 TRGET ; 점프테이블
MOV JMP_TABLE, R0 ; R0=TRGET의 어드레스
JMP @R0 ; TRGET로 분기한다.
MOV R0, R1 ; 분기에 앞서 실행된다.
……………………
TRGET: ADD #1, R1 ; 분기지
코드
Figure kpo00048
JSR(처리콜) 명령
서식 JSR @Rn
설명 지정된 어드레스의 처리로 분기한다. PC의 내용을 PR로 퇴피시키고, 범용 레지스터 Rn의 내용의 32비트 데이타로 표시되는 어드레스로 분기한다. PC는 본 명령의 2명령후의 선두 어드레스이다. RTS와 조합해서 처리콜에 사용한다.
주의 지연분기 명령이므로, 본 명령직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령 사이에 인터럽트는 접수되지 않는다. 직후의 명령이 분기명령일 때, 부당명령으로서 인식된다.
동작
Figure kpo00049
사용예 .align 4
JSR_TABLE : .data.1 TRGET ; 점프테이블
MOV JSR_TABLE, R0 ; R0=TRGET의 어드레스
JSR @R0 ; TRGET로 분기한다.
EOR R1, R1 ; 분기에 앞서 실행된다.
ADD R0, R1 ; 처리로부터의 리턴지이다.
……………………
TRGET: NOP ; 처리의 입구
MOV R2, R3 ;
RTS ; 상기 ADD 명령으로 되돌아간다.
MOV #70, R1 ; 분기에 앞서 실행된다.
코드
Figure kpo00050
LDC(CR전송)명령
서식 LDC Rm, CRn
LDC. L @Rm+, CRn
설명 소오스, 오퍼런드를 제어 레지스터CRn에 저장한다.
주의 본 명령은 인터럽트를 접수하지 않는다.
동작
Figure kpo00051
사용예 LDC R0, SR ; 실행전 R0=H'FFFFFFFF, SR=H'00000000
; 실행후 SR=H'000003F7
LDC. L @R15+, PR ; 실행전 R15=H'10000000
; 실행후 R15=H'10000004, PR=@H'10000000
코드
Figure kpo00052
LDBR(BR)명령
서식 LDBR
설명 범용 레지스터R0의 내용을 제어 레지스터BR에 저장한다.
주의 본 명령은 인터럽트를 접수하지 않는다.
동작
Figure kpo00053
사용예 LDBR ; 실행전 R0=H'12345678, BR=H'00000000
; 실행후 BR=H'12345678
코드
Figure kpo00054
LDVR(VBR전송)명령
서식 LDVR
설명 범용 레지스터R0의 내용을 제어 레지스터VBR에 저장한다.
주의 본 명령은 인터럽트를 접수하지 않는다.
동작
Figure kpo00055
사용예 LDVR ; 실행전 R0=H'FFFFFFFF, VBR=H'00000000
; 실행후 VBR=H'FFFFFFFF
코드
Figure kpo00056
MOV(이미디어트 데이타전송)명령
서식 MOV #imm, Rn
MOV. W @(disp, PC), Rn
MOV. L @(disp, PC), Rn
설명 범용 레지스터Rn에 이미디어트 데이타를 저장한다. 데이타는 32비트로 부호 확장한다. 데이타가 워드/롱워드일 때에는 PC에 디스플레이스먼트를 가한 어드레스에 저장된 테이블내의 데이타를 참조한다. 데이타가 워드일 때, 디스플레이스먼트는 1비트 좌측으로 시프트되어 9비트이므로, 테이블과의 상대거리는 -256에서 +254바이트로 된다. PC는 본 명령의 2명령후의 선두 어드레스이다. 따라서, 워드 데이타는 2바이트 경계에 배치할 필요가 있다. 데이타가 롱워드일 때, 디스플레이스먼트는 2비트 좌측으로 시프트되어 10비트이므로, 오퍼런드와의 상대거리는 -512에서 +508바이트로 된다. PC는 본 명령의 2명령후의 선두 어드레스이지만, PC의 하위 2비트는 B, 00으로 보정된다. 따라서, 롱워드 데이타는 4바이트 경계에 배치할 필요가 있다.
주의 테이블은 자동적으로 스킵되지 않으므로, 어떠한 대책도 세우지 않으면 명령이라 해석된다. 이것을 피하기 위해 모듈선두 또는 무조건 분기명령의 후등에 배치하는 것이 필요하다. 단, 부주의로 BSR/JSR/TRAP의 직후에 배치하면, 단순히 리턴했을 때 테이블에 충돌하게 된다. 본 명령이 지연분기 명령의 직후에 배치되어 있을 때, PC는 분기지의 선두 어드레스+2로 된다. 본 명령의 테이블 액세스는 명령캐시의 대상으로 된다.
동작
Figure kpo00057
Figure kpo00058
사용예 어드레스
1000 MOV #H' 80, R1 ; R1=H'FFFFFF80
1002 MOV.W IMM+4, R2 ; R2=H'FFFF9ABC
1004 MOV.L IMM, R3 ; R3=H'12345678
1006 NOP ; ←MOV. W명령에서 어드레스 계산에 사용하는 PC의 위치
1008 ADD #1, R0 ; ←MOV.L명령에서 어드레스 계산에 사용하는 PC의 위치
. align4 ;
100C IMM: .data. 1 H'12345678
1010 .data. w H'9ABC
코드
Figure kpo00059
MOV(스택 데이타 전송)명령
서식 MOV. L @(disp, Rm), Rn
MOV. L Rm, @(disp, Rn)
설명 소오스 오퍼런드를 디스티네이션으로 전송한다. 메모리 오퍼런드는 스택 프레임에 존재하므로 데이타 사이즈는 롱워드에 한정된다. 따라서, 디스플레이스먼트는 2비트 좌측으로 시프트되어 6비트이므로, -32에서 +28바이트를 지정할 수 있다. 메모리 오퍼런드에 도달하지 않을 때는 일반적인 MOV명령을 사용한다. 단, 사용하는 레지스터가 고정되어 있는 등의 제한이 있다.
동작
Figure kpo00060
사용예 MOV. L @(2, R0), R1 ; 실행전 @(R0+8)=H'12345670
; 실행후 R1=@H'12345670
MOV. L R0, @(-1, R1) ; 실행전 R0=H'FFFF7F80
; 실행후 @(R1-4)=H'FFFF7F80
코드
Figure kpo00061
MOV(I/O데이타 전송) 명령
서식 MOV @(disp, GBR), R0
MOV R0, @(disp, GBR)
설명 소오스 오퍼런드를 디스티네이션으로 전송한다. 메모리 오퍼런드의 데이타 사이즈를 바이트/워드/롱워드의 범위에서 지정할 수 있다. I/O의 베이스 어드레스를 GBR에 설정한다. I/O의 데이타가 바이트 사이즈일 때 디스플레이스먼트는 8비트이므로, -128에서 +127바이트를 지정할 수 있다. 워드 사이즈일 때 디스플레이스먼트는 1비트 좌로 시프트되어 9비트이므로, -256에서 +254바이트를 지정할 수 있다. 롱워드 사이즈일 때, 디스플레이스먼트는 2비트 좌로 시프트되어 10비트이므로, -512에서 +508바이트를 지정할 수 있다. 메모리 오퍼런드에 도달하지 않을 때는 일반적인 MOV명령을 사용한다. 소오스 오퍼런드가 메모리일 때, 로드된 데이타는 32비트로 부호확장되어 레지스터에 저장된다.
주의 로드할 때 디스티네이션 레지시터가 R0고정이다. 따라서, 직후의 명령에서 R0을 참조하고자 하여도 로드명령의 실행완료까지 대기된다. 다음의 ① ②에서 대응되도록 명령의 순서변경에 의한 최적화가 필요하다.
Figure kpo00062
동작
Figure kpo00063
Figure kpo00064
Figure kpo00065
Figure kpo00066
사용예 MOV. L @(2, GBR), R0 ; 실행전 @(GBR+8)=H'12345670
; 실행후 R0=@H'12345670
MOV. B R0, @(-1, GBR) ; 실행전 R0=H'FFFF7F80
; 실행후 @(GBR-1)=H'FFFF7F80
코드
Figure kpo00067
사이즈
01=바이트, 10=워드, 11=롱워드
MOV(전송)명령
서식 MOV Rm, Rn
MOV @Rm, Rn
MOV Rm, @Rn
MOV @Rm+, Rn
MOV Rm, @-Rn
MOV @(disp, R1), R0
MOV R0, @(disp, R1)
MOV @(Rm, R1), Rn
MOV Rm, @(Rn, R1)
설명 소오스 오퍼런드를 디스티네이션으로 전송한다. 오퍼런드가 메모리일 때는 전송하는 데이타 사이즈를 바이트/워드/롱워드의 범위에서 지정할 수 있다. 소오스 오퍼런드가 메모리일 때, 로드된 데이타는 32비트로 부호확장되어 레지스터에 저장된다. @(disp, R1)모드일 때 메모리의 데이타가 바이트 사이즈일 때 디스플레이스먼트는 8비트이므로, -128에서 +127바이트를 지정할 수 있다. 워드 사이즈일 때 디스플레이스먼트는 1비트 좌로 시프트되어 9비트이므로, -256에서 +254바이트를 지정할 수 있다. 롱워드 사이즈일 때 디스플레이스먼트는 2비트 좌로 시프트되어 10비트이므로, -512에서 +508바이트를 지정할 수 있다.
주의 @(disp, R1)모드일 때, 다른쪽의 오퍼런드가 R0고정이다. 따라서, 로드 명령일때는 전후의 I/O데이타 전송명령과 마찬가지로 다음의 ① ②에서 대응되도록 명령의 순서변경에 의해서 최적화가 가능하다.
Figure kpo00068
동작
Figure kpo00069
Figure kpo00070
Figure kpo00071
Figure kpo00072
Figure kpo00073
Figure kpo00074
Figure kpo00075
Figure kpo00076
Figure kpo00077
Figure kpo00078
Figure kpo00079
Figure kpo00080
Figure kpo00081
사용예 MOV R0, R1 ; 실행전 R0=H'FFFFFFFF, R1=H'00000000
; 실행후 R1=H'FFFFFFFF
MOV. B @R0, R1 ; 실행전 @R0=H'80, R1=H'00000000
; 실행후 R1=H'FFFFFF80
MOV. W R0, @R1 ; 실행전 R0=H'FFFF7F80
; 실행후 @R1=H'7F80
MOV. L @R0+, R1 ; 실행전 R0=H'12345670
; 실행후 R0=H'12345674, R1=@H'12345670
MOV. W R0, @-R1 ; 실행전 R0=H'AAAAAAAA, R1=H'FFFF7F80
; 실행후 R1=H'FFFF7F7E, @R1=H'AAAA
MOV. W @(R2, R1), R0 ; 실행전 R2=H'00000004, R1=H'10000000
; 실행후 R0=@H'10000004
MOV. W @(H'04, R1) R0 ; 실행전 R1=H'10000000
; 실행후 R0=H'10000004
코드
Figure kpo00082
Figure kpo00083
단, SS는 사이즈이며, 01=바이트,
10=워드,
11=롱워드이다.
MOVA(실효 어드레스 데이타 전송)명령
서식 MOVA@(disp, PC), R1
설명 범용 레지스터R1에 소오스 오퍼런드의 실효 어드레스를 저장한다. 디스플레이스먼트는 2비트 좌측으로 시프트되어 10비트이므로, 오퍼런드와의 상대거리는 -512에서 +508바이트로 된다. PC는 본 명령의 2명령후의 선두 어드레스이지만, PC의 하위 2비트는 B'00로 보정된다. 따라서, 소오스 오퍼런드는 4바이트 경계에 배치할 필요가 있다.
주의 본 발명의 지연분기명령의 직후에 배치되어 있을 때, PC는 분기지의 선두 어드레스+2로 된다.
동작
Figure kpo00084
Figure kpo00085
사용예 어드레스 .align 4
1000 STR: .sdata "XYZP12"
1006 MOVA STR, R1 ; SRT의 어드레스→R1
1008 MOVA. B @R1, R0 ; R0="X"←PC하위 2비트 보정후의 위치
100A ADD R4, R5 ; "←MOVA명령의 어드레스 계산시, PC의 본래의 위치
…………………………………………………
2002 BRA TRGET ; 지연분기명령
2004 MOVA @(-2, PC), R1 ; TRGET의 어드레스→R1
2006 NOP ; ←본래R1에 저장되어야 할 어드레스
코드
Figure kpo00086
MULS(부호화 승산)명령
서식 MURS Rm, Rn
설명 범용 레지스터Rn내용과 Rm을 16비트로 승산하고, 결과의 32비트를 Rn에 저장한다. 연산은 부호화 산술연산으로 실행한다.
동작
Figure kpo00087
사용예 MULS R0, R1 ; 실행전 R0=H'FFFFFFFE, R1=H'00005555
; 실행후 R1=H'FFFF5556
코드
Figure kpo00088
MULU(부호없음 승산)명령
서식 MULU Rm, Rn
설명 범용 레지스터Rn의 내용과 Rm을 16비트로 승산하고, 결과의 32비트를 Rn에 저장한다. 연산은 부호없음 산술연산으로 실행한다.
동작
Figure kpo00089
Figure kpo00090
사용예 MULU R0, R1 ; 실행전 R0=H'00000002, R1=H'FFFFAAAA
; 실행후 R1=H'00015554
코드
Figure kpo00091
NEG(부호 반전)명령
서식 NEG Rm, Rn
설명 범용 레지스터Rm의 내용의 2의 보수를 취하고, 결과를 Rn에 저장한다. 0에서 Rm을 감산하고, 결과를 Rm에 저장한다.
동작
Figure kpo00092
사용예 NEG R0, R1 ; 실행전 R0=H'00000001
; 실행후 R1=H'FFFFFFFF
코드
Figure kpo00093
NEGC(캐리를 갖는 부호반전)명령
서식 NEGC Rm, Rn
설명 0에서 범용 레지스터Rm의 내용과 C비트를 감산하고, 결과를 Rn에 저장한다. 연산의 결과에 의해 빌림수가 C비트에 반영된다.
동작
Figure kpo00094
사용예 NEGC R0, R1 ; 실행전 R0=H'00000001, C=0
; 실행후 R1=H'FFFFFFFF, C=1
NEGC R2, R3 ; 실행전 R2=H'00000000, C=1
; 실행후 R3=H'FFFFFFFF, C=1
코드
Figure kpo00095
NOP(무조작)명령
서식 NOP
설명 PC의 증가만을 실행하고, 다음의 명령으로 실행이 이행된다.
동작
Figure kpo00096
사용예 NOP ; 1사이클의 시간이 경과한다.
코드
Figure kpo00097
NOT(논리부정)명령
서식 NOT Rm, Rn
설명 범용 레지스터Rm의 내용의 1의 보수를 취하고, 결과를 Rn에 저장한다.
동작
Figure kpo00098
사용예 NOT R0, R1 ; 실행전 R0=H'AAAAAAAA
; 실행후 R1=H'55555555
코드
Figure kpo00099
OR(논리합)명령
서식 OR Rm, Rn
OR #imm, R0
OR. B #imm, @R1
설명 범용 레지스터Rn의 내용과 Rm의 논리합을 취하고, 결과를 Rn에 저장한다. 특수형으로서 범용 레지스터R0과 제로 확장한 8비트 이미디어트 데이타의 논리합 또는 R1상대로 8비트 메모리와 8비트 이미디어트 데이타의 논리합도 가능하다.
동작
Figure kpo00100
Figure kpo00101
사용예 OR R0, R1 ; 실행전 R0=H'AAAA5555, R1=H'55550000
; 실행후 R1=H'FFFF5555
OR #H'F0,R0 ; 실행전 R0=H'00000008
; 실행후 R0=H'000000F8
ORB #B'50, @R1 ; 실행전 @R1=H'A5
; 실행후 @R1=H'F5
코드
Figure kpo00102
PASS(통과 확인)명령
서식 PASS #imm
설명 D비트를 참조하는 조건을 갖는 소프트웨어 인터럽트 명령이다. D=1일 때 디버그 인터럽트를 발생한다. 반대로, D=0일 때, PC의 증가만을 실행한다. 디버그 인터럽트가 발생하면, PC와 SR을 스택으로 퇴피시켜 소정의 벡터 어드레스의 내용에 의해 나타내어지는 어드레스로 분기한다. PC는 본 명령의 다음 명령의 선두 어드레스이다. 프로그램 작성시에 루틴의 선두에 본 명령을 매립해 두고, 필요할 때에 D=1로 하는 것에 의해 디버그 인터럽트에 의해 통과 확인을 실행하는 것이 가능하다. 또, 미리 정의하는 디버그 인터럽트 루틴으로 imm코드를 참조하는 것에 의해서 디버그 대상 루틴의 판별이 가능하다. imm코드는 스택상의 PC를 (-1)한 어드레스의 바이트 데이타이다.
주의 본 명령을 분기명령의 직후에 배치하면, D비트의 값에 관계없이 부당명령으로서 인식된다.
동작
Figure kpo00103
사용예 _TASK1 .equ H'01
……………………………
LDC SR, R0
OR. B #H'04, R0
STC R0, SR ; 실행후 D=1
……………………………
TASK1 PASS #_TASK1; D=1이므로 PASS로 분기한다.
SUB #1, R5; 디버그 루틴의 리턴지
……………………………
_PASS MOV. L @R15, R1 ; 디버그 루틴의 입구
ADD #-1, R1 ; R1=(스택상의 PC)-1
MOV. B @R1, R0 ; R1=#_TASK1
RTE ; 상기 SUB명령으로 되돌아간다.
NOP ; RTE에 앞서 실행된다.
코드
Figure kpo00104
ROTL/ROTR(회전)
서식 ROTL Rn
ROTR Rn
설명 범용 레지스터 Rn의 내용을 좌/우 방향으로 1비트 회전시키고, 결과를 Rn에 저장한다. 회전해서 오퍼런드의 밖으로 나와버린 비트는 C비트로 전송된다.
Figure kpo00105
동작
Figure kpo00106
사용예 ROTL R0 ; 실행전 R0=H'80000000, C=0
; 실행후 R0=H'00000001, C=1
ROTL R0 ; 실행전 R0=H'00000001, C=0
; 실행후 R0=H'80000000, C=1
코드
Figure kpo00107
ROTCL/ROTCR(캐리 비트를 갖는 회전)명령
서식 ROTCL Rn
ROTCR Rn
설명 범용 레지스터 Rn의 내용을 좌/우 방향으로 C비트를 포함해서 1비트 회전시키고, 결과를 Rn에 저장한다. 회전해서 오퍼런드의 밖으로 나와버린 비트는 C비트로 전송된다.
Figure kpo00108
동작
Figure kpo00109
사용예 ROTCL R0 ; 실행전 R0=H'80000000, C=0
실행후 R0=H'00000000, C=1
ROTCL R0 ; 실행전 R0=H'00000001, C=1
실행후 R0=H'80000000, C=1
코드
Figure kpo00110
RTB(브레이크로부터의 리턴)명령
서식 RTB
설명 브레이크 예외 처리 루틴에서 복귀한다. 즉, PC를 BR에서 복귀시킨 후, 외부 디바이스로 아크놀리지 신호를 되돌리고, 복귀한 PC가 나타내는 어드레스에서 처리가 속행된다.
주의 본 명령과 분기지 명령 사이의 인터럽트의 접수는 RTBMSK신호에 의해 제어할 수 있다. RTBMSK신호가 입력되어 있으면, NMI/IRQ 등의 외부 인터럽트는 접수되지 않는다(어드레스 에러 등은 접수된다).
동작
Figure kpo00111
사용예 MOV R0, R9 ;
ADD #-1, R1 ; ←RTB의 분기지(BR로 퇴피된 PC)
TEST R1, R1 ;
…………………………
NOP ;
RTB ; RTBMSK가 입력되어 있으면, 반드시 상기 ADD를
; 실행한다. 입력되어 있지 않으면 인터럽트를 접수하고,
; 이 때 상기 ADD는 실행되지 않는다.
코드
Figure kpo00112
RTE(예외 처리에서의 리턴) 명령
서식 RTE
설명 인터럽트 루틴에서 복귀한다. 즉, PC와 SR을 스택에서 복귀시킨다. 복귀된 PC가 나타내는 어드레스에서 처리가 속행된다.
주의 지연 분기명령이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령 사이에 인터럽트는 접속되지 않는다. 직후의 명령이 분기명령일 때, 부당명령으로서 인식된다. 메모리에서 R15로의 로드명령의 직후에 연속해서 배치하지 않는 것이 필요하다. 로드전의 오래된 R15를 잘못해서 참조하게 된다. 다음의 ① ②에서 대응되도록 명령의 순서변경이 필요하다.
Figure kpo00113
동작
Figure kpo00114
사용예 RTE ; 원래의 루틴으로 복귀한다.
ADD #8, R15 ; 분기에 앞서 실행된다.
코드
Figure kpo00115
RTS(처리로부터의 루틴)명령
서식 RTS
설명 처리에서 복귀한다. 즉, PC를 PR에서 복귀시킨다. 복귀한 PC가 나타내는 어드레스에서 처리가 속행된다. 본 명령에 따라서 BSR 및 JSR 명령에 의해 호출된 처리에서 호출원으로 되돌아갈 수 있다.
주의 지연분기명령이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령 사이에 인터럽트는 접수되지 않는다. 직후의 명령이 분기명령일 때, 부당명령으로서 인식된다.
동작
Figure kpo00116
사용예 TABLE: .data. 1 TRGET ; 점프테이블
MOV. L TABLE, R3 ; R3=TRGET의 어드레스
JSR @R3 ; TRGET로 분기한다.
NOP ; 분기에 앞서 실행된다.
ADD R0, R1 ; PR이 유지하고 있는 어드레스
…………………… 처리로부터의 리턴지이다.
……………………
TRGET: MOV R0, R1 ; 처리의 입구
RTS ; PR의 내용→PC
MOV #12, R0 ; 분기에 앞서 실행된다.
코드
Figure kpo00117
SETC(C비트 세트) 명령
서식 SETC
설명 SR의 C비트를 세트한다.
동작
Figure kpo00118
사용예 SETC ; 실행전 C=0
; 실행후 C=1
코드
Figure kpo00119
SETT(T비트 세트) 명령
서식 SETT
설명 SR의 T비트를 세트한다.
동작
Figure kpo00120
사용예 SETT ; 실행전 T=0
; 실행후 T=1
코드
Figure kpo00121
SHAL/SHAR(산술 시프트) 명령
서식 SHAL Rn
SHAR Rn
설명 범용 레지스터 Rn의 내용을 좌/우 방향으로 산술적으로 1비트 시프트하고, 결과를 Rn에 저장한다. 시프트해서 오퍼런드의 밖으로 나와버린 비트는 C비트로 전송된다.
Figure kpo00122
동작
Figure kpo00123
사용예 SHAL R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'00000002, C=1
SHAR R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'C0000000, C=1
코드
Figure kpo00124
SHLL/SHLR(논리 시프트)명령
서식 SHLL Rn
SHLR Rn
설명 범용 레지스터 Rn의 내용을 좌/우 방향으로 논리적으로 1비트 시프트하고, 결과를 Rn에 저장한다. 시프트해서 오퍼런드의 밖으로 나와버린 비트는 C비트로 전송된다.
Figure kpo00125
동작
Figure kpo00126
사용예 SHLL R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'00000002, C=1
SHLR R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'40000000, C=1
코드
Figure kpo00127
SLn/SRn(멀티 비트 시프트) 명령
서식 SL2 Rn
SR2 Rn
SL8 Rn
SR8 Rn
SL16 Rn
SR16 Rn
설명 범용 레지스터 Rn의 내용을 좌/우 방향으로 논리적으로 2/8/16비트 시프트하고, 결과를 Rn에 저장한다. 시프트해서 오퍼런드의 밖으로 나와버린 비트는 버려진다.
Figure kpo00128
Figure kpo00129
동작
Figure kpo00130
Figure kpo00131
사용예 SL2 R0 ; 실행전 R0=H'12345678
; 실행후 R0=H'48D159EO
SR2 R0 ; 실행전 R0=H'12345678
; 실행후 R0=H'048D159E
SL8 R0 ; 실행전 R0=H'12345678
; 실행후 R0=H'34567800
SR8 R0 ; 실행전 R0=H'12345678
; 실행후 R0=H'00123456
SL16 R0 ; 실행전 R0=H'12345678
; 실행후 R0=H'56780000
SR16 R0 ; 실행전 R0=H'12345678
; 실행후 R0=H'00001234
코드
Figure kpo00132
SLP(슬립) 명령
서식 SLP
설명 CPU를 저소비 전력모드로 한다. 저소비전력 모드에서는 CPU의 내부상태는 유지되고, 직후의 명령의 실행을 정지하고, 인터럽트 요구의 발행을 대기한다. 요구가 발생하면, 저소비전력 모드에서 빠져 예외처리를 개시한다. 즉, SR과 PC를 스택으로 퇴피시키고, 소정의 벡터에 따라 인터럽트 루틴으로 분기한다. PC는 본 명령의 직후의 명령의 선두 어드레스이다.
동작
Figure kpo00133
사용예 SLP ; 저소비전력 모드로의 천이
코드
Figure kpo00134
STC(CR전송) 명령
서식 STC CRm, Rn
STC. L CRm, @-Rn
설명 제어 레지스터 CRm을 디스티네이션에 저장한다.
주의 본 명령은 인터럽트를 접수하지 않는다.
동작
Figure kpo00135
Figure kpo00136
사용예 STC SR, R0 ; 실행전 R0=H'FFFFFFFF, SR=H'00000000
; 실행후 R0=H'00000000
STC. L PR, @-R15 ; 실행전 R15=H'10000004
; 실행후 R15=H'10000000, @R15=PR
코드
Figure kpo00137
STBR(BR전송) 명령
서식 STBR
설명 제어 레지스터 BR의 내용을 범용 레지스터 R0에 저장한다.
주의 본 명령은 인터럽트를 접수하지 않는다.
동작
Figure kpo00138
사용예 STBR ; 실행전 R0=H'FFFFFFFF, BR=H'12345678
; 실행후 R0=H'12345678
코드
Figure kpo00139
STVR(VBR전송) 명령
서식 STVR
설명 제어 레지스터 VBR의 내용을 범용 레지스터 R0에 저장한다.
주의 본 명령은 인터럽트를 접수하지 않는다.
동작
Figure kpo00140
사용예 SVTR ; 실행전 R0=H;FFFFFFFF, VBR=H'00000000
; 실행후 R0=H'00000000
코드
Figure kpo00141
SUB(감산) 명령서식
서식 SUB Rm, Rn
설명 범용 레지스터 Rn의 내용에서 Rm을 감산하고, 결과를 Rn에 저장한다. 이미디어트 데이타와의 감산은 ADD #imm, Rn으로 대응한다.
동작
Figure kpo00142
사용예 SUB R0, R1 ; 실행전 R0=H'00000001, R1=H'800000000
; 실행후 R1=H'7FFFFFFF
코드
Figure kpo00143
SUBC(캐리를 갖는 감산) 명령
서식 SUBC Rm, Rn
설명 범용 레지스터 Rn의 내용에서 Rm과 C비트를 감산하고, 결과를 Rn에 저장한다. 연산의 결과에 따라 캐리수가 C비트에 반영된다.
동작
Figure kpo00144
사용예 SUBC R0, R1 ; 실행전 C=1, R0=H'00000001,
R1=H'00000001
; 실행후 C=1, R1=H'FFFFFFFF
SUBC R2, R3 ; 실행전 C=0, R2=H'00000002,
R3=H'00000001
; 실행후 C=1, R3=H'FFFFFFFF
코드
Figure kpo00145
SUBS(포화기능을 갖는 감산) 명령
서식 SUBS Rm, Rn
설명 범용 레지스터 Rn의 내용에서 Rm을 감산하고, 결과를 Rn에 저장한다. 언더플로우가 발생해도 결과는 H'7FFFFFFF∼H'80000000의 범위로 제한된다. 이 때, C비트가 세트된다.
동작
Figure kpo00146
사용예 SUBS R0, R1 ; 실행전 R0=H'00000001, R1=H'80000001
; 실행후 R1=H'80000000, C=0
SUBS R2, R3 ; 실행전 R2=H'00000002, R3=H'80000001
; 실행후 R3=H'80000000, C=1
코드
Figure kpo00147
SUBV(언더플로우를 갖는 감산) 명령
서식 SUBV Rm, Rn
설명 범용 레지스터 Rn의 내용에서 Rm을 감산하고, 결과를 Rn에 저장한다. 언더플로우가 발생한 경우, C비트가 세트된다.
동작
Figure kpo00148
사용예 SUBV R0, R1 ; 실행전 R0=H'00000002, R1=H'80000001
; 실행후 R1=H'7FFFFFFF, C=1
SUBV R2, R3 ; 실행전 R2=H'FFFFFFFE, R3=H'7FFFFFFE
; 실행후 R3=H'80000000, C=1
코드
Figure kpo00149
SWAP(교환) 명령
서식 SWAP. B Rm, Rn
SWAP. W Rm, Rn
설명 범용 레지스터 Rn의 내용의 상위와 하위를 교환해서 결과를 Rn에 저장한다. 바이트 지정일 때, Rm의 비트0∼비트7의 8비트와 비트8∼비트15의 8비트가 교환된다. Rn에 저장될 때는 Rm의 상위16비트는 그대로 Rn의 상위16비트로 전송된다. 워드지정일 때, Rm의 비트0∼비트15의 16비트와 비트16∼비트31의 16비트가 교환된다.
동작
Figure kpo00150
Figure kpo00151
사용예 SWAP. B R0, R1 ; 실행전 R0=H'12345678
; 실행후 R1=H'12347856
SWAP. W R0, R1 ; 실행전 R0=H'12345678
; 실행후 R1=H'56781234
코드
Figure kpo00152
TAS(리드/검색/라이트) 명령
서식 TAS. B @Rn
설명 범용레지스터Rn의 내용을 어드레스 하고, 그 어드레스가 나타내는 바이트데이타가 제로일 때, T=1, 제로가 아닐 때 T=0으로 한다. 그 후, 비트7을 1로 세트해서 라이트한다. 그 동안 버스권은 해방되지 않는다.
동작
Figure kpo00153
사용예 _LOOP TAS. B @R7 ; R7=1000
BF _LOOP ; 100번지가 제로로 될때까지 루프한다.
코드
Figure kpo00154
TEST(테스트) 명령
서식 TEST Rm, Rn
TEST #imm, R0
TEST. B #imm, @R1
설명 범용 레지스터Rn의 내용과 Rm의 논리곱을 취하고, 결과가 제로일 때 T비트를 세트한다. 결과가 제로가 아닐 때 T비트는 클리어된다. Rn의 내용은 변경되지 않는다. 특수형으로서 범용 레지스터R0과 제로확장된 8비트 이미디어트 데이타의 논리곱 또는 R1상대로 8비트 메모리와 8비트 이미디어트 데이타의 논리곱도 가능하다. 메모리의 내용은 변경되지 않는다.
동작
Figure kpo00155
사용예 TEST R0, R1 ; 실행전 R0=H'00000000
; 실행후 T=1
TEST #H'80, R0 ; 실행전 R0=H'FFFFFF7F
; 실행후 T=1
TEST. B #H'A5, @R1 ; 실행전 @R1=H'A5
; 실행후 T=0
코드
Figure kpo00156
TRAP(소프트웨어 트랩)
서식 TRAP #imm
설명 트랩예외처리를 개시한다. 즉, PC와 SR을 스택으로 퇴피시키고, 지정벡터의 내용으로 표시되는 어드레스로 분기한다. 벡터는 이미디어트 데이타를 2비트 좌측으로 시프트하여 부호확장한 메모리 어드레스 그 자체이다. PC는 본 명령의 2명령후의 선두 어드레스이다. RTE와 조합해서 시스템 호출에 사용한다.
주의 지연분기이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령의 사이에 인터럽트는 접수되지 않는다. 직후의 명령이 분기명령일 때, 부당한 명령으로서 인식된다. 메모리에서 R15로의 로드명령의 직후에 연속해서 배치하지 않는 것이 필요하다. 로드전의 오래된 R15를 잘못해서 참조하게 된다. 다음 ① ②에서 대응되도록 명령의 순서변경이 필요하다.
Figure kpo00157
동작
Figure kpo00158
사용예 어드레스
0010 .data.1 10000000;
……………………………
TRAP #H'10 ; H'10번지의 내용의 어드레스로 분기한다.
ADD R1, R7 ; 분기에 앞서 실행된다.
TEST #0, R0 ; 트랩 루틴의 리턴지
………………………
10000000 MOV R0, R0 ; 트랩 루틴의 입구
10000002 RTE ; 상기 TEST명령으로 되돌아간다.
10000004 NOP ; RTE에 앞서 실행된다.
코드
Figure kpo00159
XTRCT(추출) 명령
서식 XTRCT Rm, Rn
설명 범용 레지스터Rm과 Rn을 연결한 64비트의 내용에서 중앙의 32비트를 추출하고, 결과를 Rn에 저장한다.
Figure kpo00160
동작
Figure kpo00161
사용예 XTRCT R0, R1 ; 실행전 R0=H'01234567, R1=H'89ABCDEF
; 실행후 R1=H'456789AB
코드
Figure kpo00162
다음에, 상기 실시예에서 설명한 마이크로 컴퓨터 등을 사용해서 실행할 수 있는 부호화 제산의 실시예에 대해서 설명한다.
[18] 부호화 제산에 있어서의 피제수에 대한 전처리의 원리
도 29에는 본 실시예에 관한 부호화제산에 있어서의 피제수에 대한 전처리의 원리가 개념적으로 도시되어 있다. 예를 들면 Y(몫)=X(피제수)÷3(제수)로 표시되는 부호화제산에 있어서, 피제수X가 부일 때는 피제수X에서 1을 뺀 값 (X-1)을 피제수로 한다. 개념적으로는 동일도면에 도시되는 바와 같이 몫Y의 좌표축을 좌측으로 1시프트시킨 상태에서 제산의 처리를 실행한다. 이것에 의해서 몫을 구하는 연산처리의 도중에 종래와 같이 부분잉여가 0인지 아닌지를 그 때마다 판정하지 않아도 좋고, 또한 그 판정을 위한 하드웨어도 불필요하게 된다. 정확한 나머지를 구할 때는 마지막에 구해진 나머지를 보정한다.
[19] 부호화제산의 원리적인 1예 처리순서
도 30에는 피제수가 부인 경우에 있어서의 부호화 제산처리의 원리적인 1예 처리순서가 도시되어 있다. 동일도면에 있어서는 -9÷-3을 1예로 한다. -9는 2의 보수표현으로 "110111"로 되고, -3은 "101"로 된다. 먼저, 피제수는 부이므로 -9에서 1을 뺀 값 "110110"이 피제수로 된다. 몫의 부호는 피제수의 부호"1"과 제수의 부호"1"의 배타적 논리합에서 구해진다(*1). 최초의 부분잉여의 산출은 피제수"110110"과 제수의 부호비트를 상위측(좌측)으로 확장한 "1101"을 부호비트의 자리수를 맞춰서 가산 또는 감산하는 것에 의해 실행된다. 쌍방의 부호비트의 배타적 논리합이 0이면 감산으로 되고, 1이면 가산으로 된다(*2). 이 예의 경우에는 감산으로 된다. 이것에 의해서 최초의 부분잉여 "000010"이 얻어진다. 제1의 부분잉여에 대응하는 몫은 부분잉여의 최상위비트와 제수의 부호비트의 배타적 논리합의 반전논리값에 의해서 부여된다(*3). 이하, 마찬가지로 해서 순차적으로 몫비트가 구해진다. 정확한 나머지가 필요한 경우에는 이 예에 따르면 마지막 잉여에 1을 더한다. 동일도면의 하측에 도시되는 바와 같이, 피제수를 그대로의 값"110111"로 해서 제산을 실행한 경우에는 잉여의 전체비트가 "0"으로 되는 것에 기인해서 정확한 몫비트를 그 상태까지로는 구할 수 없다. 그를 위해서는 부분잉여의 전체비트가 "0"인지 아닌지를 부분잉여를 산출할 때마다 판정하고, 그러한 경우에는 상기 몫비트의 논리값을 반전시키지 않으면 안된다. 또한, 도 31에는 부÷정의 경우에 있어서의 부호화 제산처리의 1예가 도시되고, 도 32에는 정÷정의 경우 및 정÷부의 경우에 있어서의 부호화 제산처리의 각각의 1예가 도시되어 있다.
[20] 부호화 제산처리의 전체적인 처리수순
도 33에는 상기 설명에서 개략이 이해되었다고 고려되는 본 실시예에 관한 부호화제산의 기본적인 약속마다 또는 기본적인 처리수순의 전체가 일반적인 형식으로 도시되어 있다.
《1》피제수에 대한 보정을 실행한다. 즉, 도 34(a)에는 도시되는 바와 같이 피제수가 부인 경우에는 피제수에서 1을 뺀다. 이 처리는 피제수의 부호를 조사해서 개별적으로 실행할 수도 있지만, 본 실시예에서는 피제수의 부호비트를 추출하고, 피제수에서 그 부호비트를 빼는 방법을 채용한다. 즉, 피제수의 MSB인 부호비트를 빼는 조작을 제산의 전처리로서 채용한다. 피제수가 부일 때 피제수의 MSB는 1이므로 피제수에서 1이 감산된다. 피제수가 정일 때 그의 MSB는 0이므로 피제수는 그대로 된다. 이와 같이, 피제수에서 그의 MSB를 감산하는 처리를 채용하는 것에 의해 피제수가 정인지 부인지를 고려하지 않고 제산프로그램을 작성할 수 있고, 또한 그와 같은 판정동작을 필요로 하지 않으므로 제산처리가 고속화되고, 또한 피제수가 정인지 부인지에 관계없이 동일한 회로를 이용해서 제산전처리를 실행할 수 있다.
여기서, 피제수에서 빼야 할 1이라 함은 피제수의 LSB의 비중을 가진 1로서 이해한다. 상기 1을 빼야 할 피제수의 비트위치 또는 자리수는 피제수의 최하위비트(LSB)이다. 구태여 이와 같은 설명을 하는 것은 상술한 바와 같이 피제수가 고정소수점 수인 경우를 고려한 것이다. 또, 피제수가 부일 때의 부호 비트는 1이고, 정일때의 부호비트는 0인 것에 주목하면, 피제수에서 그의 부호비트(피제수의 MSB)를 빼면, 부의 피제수에서 1을 뺀 것으로 된다. 이것은 2의 보수표현의 부의 정수에서 1의 보수표현으로의 변환으로 간주할 수 있다. 이와 같이 하면, 피제수가 정인지 부인지를 고려하지 않더라도 피제수에 대한 전처리를 실행할 수 있다. 또 35에는 예를 들면 4비트의 부의 정수에서 1을 뺀 변환상태가 도시되어 있다. 유한 비트수의 2의 보수의 최소값을 1의 보수로 변환하기 위해서는 1비트 여분이 필요하므로, 필요한 경우는 1비트 확장한다. 또, 부분잉여는 정으로 되는 경우도 있으므로, 부의 정수에 대해서 실행한 상기의 변환을 정수전체로 확장하고, 새로운 정수의 표현을 도입한다. 예를 들면, 4비트 부호화 정수의 범위에서는 도 36에 도시되는 바와 같은 표현이 채용된다. 또한, 임의의 정수를 그 수에서 1을 뺀 수로 표현한 것을 ZZ로 하면, 2의 보수를 사용한 정수에 대해서 1을 빼는 변환을 실행한 ZZ의 표현은 0이하의 정수에서는 1의 보수와 동일시 할 수 있고, 0이상의 정수에서는 본래의 값보다 1만큼 작은수로 표현된다. 이 때, 0의 부호비트는 부의 수와 동일한 1로 된다.
《2》 도 34(b)에 도시되는 바와 같이, 피제수와 제수에서 몫의 부호를 구한다. 즉, 피제수의 부호와 제수의 부호의 배타적논리합에서 몫의 부호를 예측한다.
《3》 순차 부분잉여를 구하면서 몫비트를 구해간다. 부분잉여를 구하기 위한 가산 및 감산명령은 도 37(a)에 따라서 결정된다. 즉, 부분잉여(또는 피제수)의 부호Q와 제수의 부호M의 배타적논리합이 0이면 감산이 지시되고, 개략적으로는 부분잉여(또는 피제수)에서 제수가 감산된다. 부분잉여(또는 피제수)의 부호Q와 제수의 부호M의 배타적논리합이 1이면 가산이 지시되고, 개략적으로는 부분잉여(또는 피제수)에 제수가 가산된다. 몫비트는 도 37(b)에 도시되는 바와 같이, 상기 감산 또는 가산후의 부분잉여의 부호비트와 제수의 부호비트의 배타적 논리합의 결과를 반전시켜 얻어진다.
여기서, 몫비트의 산출방법을 더욱 상세하게 설명한다. 몫비트의 산출방법을 정리한 내용은 도 37(b)에 도시되고, 그의 산출방법은 이하의 〈a〉, 〈b〉, 〈c〉, 〈d〉로 분류된다.
〈a〉 A÷B(A≥0, B〉0, A와 B는 2의 보수)인 경우
공지와 같이 부분잉여의 부호비트가 0일 때 몫비트를 1, 부분잉여의 부호비트가 1일 때 몫비트를 0으로 한다.
〈b〉 A÷B(A≥0, B〈0, A와 B는 2의 보수)인 경우
몫이 부로 되므로, 〈a〉의 경우와 몫비트를 구하는 방법은 반대로 한다. 즉, 부분잉여의 부호비트가 0일 때 몫비트를 0, 부분잉여의 부호비트가 1일 때 몫비트를 1로 한다. 몫은 1의 보수로 된다. 후술하는 《4》에서 기술되는 바와 같이, 몫비트가 전부 구해지면 마지막에 2의 보수로 변환된다.
〈c〉 A÷B(A〈0, B〈0, A와 B는 2의 보수)인 경우
사전에 피제수에서 피제수의 LSB의 비중을 갖는 1을 빼 둔다. 피제수와 부분잉여의 부의 표현은 1의 보수로 되고, 정의 표현은 본래의 값보다 LSB의 비중을 갖는 1만큼 작게 된다. 0이하의 경우, 부호비트MSB가 1로 되고, 0보다 큰 경우 부호비트MSB가 0으로 된다. 몫은 정으로 되므로, 부분잉여의 부호비트MSB가 1일 때 몫비트를 1로 하고, 부분잉여의 부호비트MSB가 0일 때 몫비트를 0으로 한다.
〈d〉 A÷B(A〈0, B〉0, A와 B는 2의 보수)인 경우
사전에 피제수에서 피제수의 LSB의 비중을 갖는 1을 빼 둔다. 피제수와 부분잉여의 부의 표현은 1의 보수로 되고, 정의 표현은 본래의 값보다 LSB의 비중을 갖는 1만큼 작게 된다. 0이하의 경우, 부호비트MSB가 1로 되고, 0보다 큰 경우 부호비트MSB가 0으로 된다. 몫은 부로 되므로, 〈c〉의 경우와 몫비트를 구하는 방법을 반대로 한다. 부분잉여의 부호비트MSB가 0일 때 몫비트를 1로 하고, 부분잉여의 부호비트MSB가 0일 때 몫비트를 1로 한다. 몫은 1의 보수로 된다. 후술하는 《4》에서 기술하는 바와 같이, 몫비트가 전부 구해지면 마지막에 2의 보수로 변환한다.
《4》상기《3》에서 얻어진 몫은 몫의 부호에 따라 반드시 정확한 값으로 되어 있지 않은 경우도 있다. 상기《2》에서 구한 몫의 부호가 1일 때에는 몫은 1의 보수로 되어 있기 때문이다. 따라서, 최종적인 몫은 상기 몫의 부호와 몫비트에 따라서 결정된다. 도 38에 도시되는 바와 같이, 몫이 부(몫의 부호비트가 1)인 경우에는 몫은 1의 보수로 표현되어 있으므로,《3》에서 얻어진 몫에 1을 가산해서 2의 보수로 변환하는 보정을 실행한다. 이것에 의해서 정확한 몫이 구해진다. 또, 도 38에 도시되는 바와 같이 최종 부분잉여에 대한 잉여보정을 실행한다.
[21] 부호화 제산의 구체예
도 39 및 도 40에는 부호화제산의 상기 기본적인 수순을 채용한 처리의 구체적인 1예가 도시되어 있다. 동일도면에 도시되는 예는 -8÷-3의 부호화 제산이며, 이해를 용이하게 하기 위해 6비트의 범용 레지스터를 사용한 설명으로 한다. 도 40은 도 39에 도시되는 마지막의 처리에 계속해서 실행되는 처리를 도시한 도면으로서 열방향의 기술의 의미는 도 39와 일치되어 있다. 각 도면에 있어서, R0∼R4는 각각 6비트의 범용 레지스트를 의미하고, Q, M, T는 제어레지스터 또는 상태 레지스터 중의 비트 플래그를 의미하고, Q는 피제수 또는 부분잉여의 부호를 저장하는 비트, M은 제수의 부호를 저장하는 비트, T는 몫비트나 캐리를 저장하는 비트이다. 도면중의 좌측끝에는 명령코드와 오퍼런드가 기재되고, 이에 대응하는 열에는 범용 레지스터 및 비트플래그의 내용이 도시된다. 이 범용 레지스터 및 비트플래그의 내용을 나타내는 기술에 있어서 언더라인이 그어져 있는 내용은 대응명령의 실행에 의해서 그의 내용이 갱신된 것을 의미한다. ×표시된 비트는 값이 확정되어 있지 않은 비트를 의미한다. 이하, 이 항에 있어서 부호화 제산처리를 순차 설명하지만, 먼저 그 설명에서 사용하는 기호에 대한 범례를 이하에 기술한다.
← ; 저장하는 것을 나타낸다.
MSB(Rn) ; 레지스터Rn의 MSB(최상위 비트)를 나타낸다.
LSB(Rn) ; 레지스터Rn의 LSB(최하위 비트)를 나타낸다.
^ ; 배타적 논리합을 나타내는 연산자이다.
Rn〈〈=1 ; 레지스터Rn의 값을 1비트 좌측으로 시프트하는 것을 나타낸다.
Rn〉〉=1 ; 레지스터Rn의 값을 1비트 우측으로 시프트하는 것을 나타낸다.
(Q:Rn) ; 레지스터Rn의 최상위에 Q비트를 부가한 7비트의 2진수를 의미한다.
(M:Rn) ; 레지스터Rn의 최상위에 M비트를 부가한 7비트의 2진수를 의미한다.
∼ ; 부정(비트반전)을 의미하는 연산자이다.
(Rn : T)를 우회전 ; T비트를 레지스터Rn의 MSB로 시프트인 하면서 레지스터Rn의 값을 우로 시프트하고, 시프트아웃된 값의 LSB를 T비트에 저장하는 것을 나타낸다.
(Rn : T)를 좌회전 ; T비트를 레지스터Rn의 LSB로 시프트인 하면서 레지스터Rn의 값을 좌로 시프트하고, 시프트아웃된 값의 MSB를 T비트에 저장하는 것을 나타낸다.
[1] EOR R0, R0
R0←0. 즉, 레지스터R0의 값을 전체비트 0으로 한다.
[2] SL3 R1
레지스터R1의 하위 3비트(제수)를 상위 3비트로 좌로 시프트한다.
[3] DIV0S R0, R2
Q←MSB(R2), M←MSB(R0)=0, T←Q^M=Q^0=Q.
따라서, T비트에는 피제수의 부호가 저장된다.
[4] MOVT R3
R←T. 즉, 피제수의 부호를 LSB(3)에 저장한다. 이 피제수의 부호는 나머지를 구할 때에 필요하게 된다.
[5] SUBC R0, R2
R2←(R2-T). 즉, 2의 보수를 1의 보수로 변환하고 있다. 즉, 피제수가 부인 경우에 R2가 유지하는 피제수에서 1을 빼고 있는 것과 등가이다. 이 처리에 있어서 실제로는 피제수에서 피제수의 부호비트MSB의 값을 감산하고 있는 것으로 되므로, 피제수가 정인지 부인지를 일체 검출할 필요는 없고, 어떠한 경우에도 동일한 명령을 실행해서 대응할 수 있다. 즉, 피제수가 부인 경우에만 분기해서 1을 빼는 연산을 실행하는 처리흐름은 불필요하게 된다.
[6] DIV0S R1, R2
Q←MSB(R2)에 의해 피제수의 부호를 Q비트에 취득하고,
M←MSB(R1)에 의해 제수의 부호를 M비트에 취득하고,
T←Q^M에 의해 몫의 부호를 취득한다.
[7] DIV1 R1, R2
".arepeat 3"과 ".aendr"의 사이에 있는 명령 DIV1 R1, R2가 3회 반복된다.
명령 DIV1의 각 실행사이클에 있어서, Q^M=0일 때에 감산명령을 발행하고, Q^M=1일 때에 가산명령을 발행하고, Q←MSB(R2)에 의해 Q비트를 취득하고, R2〈〈1=1에 의해 R2의 피제수를 1비트 좌로 시프트하고, LSB(R2)←T에 의해 R2의 LSB에 T비트(최초의 DIV1 R1, R2에서는 몫의 부호로 되어 있다)를 저장하고, (Q:R2)←(Q:R2)±(M:R)에 의해서 가감산명령에 따른 연산을 실행하고, T←∼(Q^M)에 의해서 몫비트를 T비트에 저장한다.
명령DIV1을 3회 실행하는 것에 의해 Q비트에는 마지막의 부분잉여의 부호가 들어가 있으며, T비트에는 몫의 최하위 비트가 들어가 있고, R2의 상위 3비트에는 마지막의 부분잉여가 들어가 있고, 그의 하위 3비트에는 몫이 들어가 있다. 하위부터 3비트째에는 [6] DIV0S R1, R2에서 T비트에 취득한 몫의 부호가 들어가 있다.
[8] MOV R2, R4
R2를 R4에 카피한다. R4를 이용해서 나머지를 구하기 위함이다. T비트는 불변이다.
[9] EXTS. W R2, R2
R2의 하위부터 3비트째를 상위 3비트측으로 부호확장한다. 이 부호는 몫의 부호를 나타내고 있다.
[10] ROTCL R2
(R2 : T)를 좌회전, 즉 T비트를 레지스터R2의 LSB로 시프트인하면서 레지스터R2의 값을 1비트 좌로 시프트하고, 레지스터아웃된 값의 MSB를 T비트에 저장한다. 이것에 의해 R2의 하위 3비트에는 몫이 저장되어 있고, T비트에는 몫의 부호가 저장된다.
[11] ADDC R0, R2
R2←R2+T에 의해 1의 보수를 2의 보수로 변환한다. 즉, 이 명령을 실행하기 직전에 몫은 R2가 유지하고, T비트에는 몫의 부호가 저장되어 있다. 따라서, T비트의 값을 R2의 값에 가산하는 것에 의해 R2가 1의 보수를 유지하고 있을 때에는 그것이 2의 보수로 변환된다. 몫이 정일 때 T=0이므로, T를 가산하여도 R2의 값은 변화되지 않는다. 몫이 부일 때는 T=1이므로 T를 가산하는 것에 의해 R2의 값은 1의 보수에서 2의 보수로 변환된다. 이것에 의해서 정확한 몫이 구해진다.
[12] DIV0S R0, R4
Q←MSB(R4)에 의해 R4의 MSB(나머지의 부호)를 Q비트에 저장하고, M←MSB(R0)에 의해 R0(=0)의 MSB를 M비트에 저장하고, T←Q^M=Q^0=Q에 의해 Q비트와 M비트의 배타적 논리합, 즉 Q비트(나머지의 부호)를 T비트에 저장하고, 나머지의 부호를 T비트에 얻는다.
[13] MOVT R0
R0←T에 의해 T비트에 유지되어 있는 보정전의 나머지의 부호가 R0의 LSB에 저장된다. 이것은 나머지의 보정에 이용된다.
[14] EOR R3, R0
R0←R3^R0에 의해 피제수의 부호와 보정전의 나머지의 부호의 배타적 논리합의 결과가 R0의 LSB에 저장된다.
[15] ROTCR R0
(R0 : T)의 우회전에 의해 T비트를 R0의 MSB로 시프트인하면서 R0의 값을 우로 시프트하고, 시프트아웃된 값의 LSB를 T비트에 저장한다. 이것에 의해 피제수의 부호와 보정전의 나머지의 부호의 배타적 논리합의 결과가 T비트로 들어간다.
[16] BF L1
T비트의 값이 0이면 레이블L1로 분기한다. T=0일 때는 피제수와 나머지의 부호가 동일하므로, 나머지를 보정할 필요가 없기 때문이다.
[17] DIV0S R1, R4
Q←MSB(R4)에 의해 Q비트에 보정전의 나머지의 부호를 저장하고, M←MSB(R1)에 의해 M비트에 제수의 부호를 저장하고, T←Q^M에 의해 Q비트와 M비트의 배타적 논리합의 결과를 T비트에 저장한다.
[18] ROTCR R4
(R4 : T)의 우회전에 의해 다음의 DIV1명령의 좌로의 시프트를 부정하기 위한 처리를 실행한다.
[19] DIV1 R1, R4
Q^M=0일 때에 감산명령을 발행하고, Q^M=1일 때에 가산명령을 발행하고, Q←MSB(R4)에 의해 Q비트를 취득하고, R4〈〈1=1에 의해 R4의 값을 1비트 좌로 시프트하고, LSB(R4)←T에 의해 R4의 LSB에 T비트(이 때는 제수의 부호와 보정전의 나머지의 부호의 배타적 논리합의 결과가 들어가 있다)를 저장하고, (Q : R4)←(Q : R4)±(M : R1)에 의해 Q비트와 R4의 값을 합한 7비트에서 M비트와 R1의 값을 합한 7비트를 상기 가감산을 위한 판정결과에 따라서 가산 또는 감산을 실행하고, 그 결과를 Q비트와 R4에 저장하고, T←∼(Q^M)에 의해서 그의 배타적 논리합의 결과를 반전한 값을 T비트에 저장한다.
[20] SR3, R4
R4의 상위 3비트(나머지에 상당)를 R4의 하위 3비트로 우로 시프트한다.
[21] ADD R3, R4
R3은 피제수의 부호를 유지하고 있다. R4는 보정전의 나머지를 유지하고 있다. 상기 [5]의 명령SUBC R0, R2에 의해서 피제수에서 그의 부호가 감산되어 있으므로, R4에 R3을 가산하는 것에 의해 즉 나머지가 1인 보수라도 이것을 2의 보수로 변환하는 것에 의해 R4의 하위 3비트에 정확한 나머지가 얻어진다.
[22] EXTS. W R4, R4
보정된 나머지를 하위 3비트에 유지하는 R4의 상위측을 부호확장해서 전체 6비트에서 최종적인 나머지를 구한다.
여기서, 상기 도 39 및 도 40의 설명에서는 3회의 DIV1명령의 반복에 있어서 몫과 나머지는 모두 R2에 유지하고, DIV1명령의 실행마다 R2의 값을 1비트씩 좌로 시프트하고 있다(R2〈〈=1). 이 점에 관해서, 종래기술의 연산방법과 같이 피제수가 부인 경우에 부분잉여의 전체비트가 0인지를 판정하지 않으면 안되는 것으로 하면, R2에 있어서 판정대상으로 되는 부분잉여의 자리수 위치를 매회 변화시켜서 그의 판정을 실행하지 않으면 안되어 그 처리는 비교적 번잡하게 된다. 따라서, 종래기술과 같이 피제수가 부인 경우에 부분잉여의 전체비트가 0인지를 판정하지 않으면 안되는 연산방법에 있어서는 몫과 나머지를 각각의 레지스터에 유지하면, 그와 같이 부분잉여의 자리수 위치를 매회 변화시켜서 판정을 실행하지 않아도 된다. 단, 이 경우에는 몫과 나머지를 각각의 레지스터에 유지시키기 위해서 실행하지 않으면 전송명령이 반대로 증대하게 된다. 본 실시예의 경우에는 부분잉여의 전체비트가 0인지 아닌지를 그때마다 판정하지 않아도 좋으므로, 몫과 나머지를 모두 R2에 유지하는 것에 의해 실행해야 할 명령수도 줄일 수 있어 부호화 제산처리의 고속화가 더욱 용이하게 된다.
또한, 도 41 및 도 42에는 마찬가지로 -8÷3, 도 43 및 도 44에는 마찬가지로 -9÷-3, 도 45 및 도 46에는 마찬가지로 -9÷3, 도 47 및 도 48에는 마찬가지로 8÷3, 도 49 및 도 50에는 마찬가지로 8÷-3의 부호화 제산처리의 구체적인 예가 각각 도시되어 있다. 이들 내용은 상기 도 39 및 도 40에 대해서 피제수와 제수의 값이 상이할 뿐이므로, 상세한 설명은 생략한다.
[22] 부호화 제산을 위한 연산유닛
도 51에는 상기 부호화 제산을 실행할 수 있는 연산유닛의 1실시예가 도시되어 있다. 이 연산유닛은 도 6 및 도 7에 도시되는 범용 레지스터부 GBR 및 연산부 OPB를 부호화 제산처리를 설명하기 쉽도록 보는 각도를 변경해서 표현한 것으로서 파악할 수 있다. 도 51에 있어서, 연산유닛에는 대표적으로 5개의 범용 레지스터R0∼R4가 도시된다. 레지스터R2는 피제수 또는 부분잉여를 저장하는 데 이용되고, 레지스터R1은 제수를 저장하는 데 이용된다. (3)은 몫의 부호비트나 몫비트를 일시적으로 저장하기 위한 제어비트 레지스터(제3의 제어비트 저장수단)이다. 이 제어비트 레지스터(3)을 이하 단지 T비트라고도 한다. (4)는 시프트 제어신호의 명령에 따라 상기 T비트를 선택회로(14)를 거쳐서 최하위 비트 또는 최상위 비트로 시프트인하고, 최상위 비트 또는 최하위비트를 선택회로(15)에 의해 시프트아웃하는 시프터이다. 또, 이 시프터는 시프트 제어신호의 명령에 따라 32비트 입력의 상위 16비트를 하위 16비트로 논리시프트 또는 하위 16비트를 상위 16비트로 논리시프트하고 출력한다. (5)는 피제수 또는 부분잉여의 최상위 비트의 상위에 부가한 비트의 역할을 하기 위한 제어비트 레지스터(제1의 제어비트 저장수단)이다. 이 제어비트 레지스터(5)를 이하 단지 Q비트라고도 한다. (6)은 제수의 최상위 비트의 상위에 부가한 비트의 역할을 하기 위한 제어비트 레지스터(제2의 제어비트 저장수단)이다. 이 제어비트 레지스터(6)을 이하 단지 M비트라고도 한다. (7)은 산술논리 연산회로(8)에 가감산의 지시를 하는 연산제어회로이다. (8)은 32비트의 산술논리 연산회로이다. 이 산술논리 연산회로(8)은 A포트의 입력에 대해서 B포트의 입력을 연산제어회로(7)의 명령에 따라서 가감산하고, 그의 결과를 피제수 레지스터R2 등에 연결되는 버스로 출력할 수 있고, 캐리 또는 빌림수 플래그를 갖는 산술논리 연산을 실행한다. 또, 이 산술논리 연산회로(8)은 B포트의 입력의 MSB(최상위 비트)를 M비트로 출력할 수 있고, 그 이외에 가산, 캐리를 갖는 감산, 캐리를 갖는 가산, 배타적 논리합(EOR), 논리곱 등의 연산을 실행할 수 있다. (9)는 제어비트 레지스터(5)의 값에 제어비트 레지스터(6)의 값을 산술논리 연산회로(8)의 캐리 또는 빌림수를 포함해서 가감산하는 연산회로이다. (10)은 연산회로(9)의 결과와 제어비트 레지스터의 배타적 논리합의 부정을 계산하고 그 결과를 선택회로(12)로 출력하는 것, 제어비트 레지스터(5)의 값과 제어비트 레지스터(6)의 값의 배타적 논리합을 계산하고 그 결과를 선택회로(12)로 출력할 수 있는 연산회로이다. (11)은 제어비트 레지스터(5)의 입력을 선택하는 것이며, 선택회로(15)를 거치는 시프터(4)로부터의 출력과 연산회로(9)로부터의 출력 중 어느 쪽을 선택하기 위한 선택회로이다. (12)는 산술논리 연산회로(8)의 캐리 또는 빌림수, 연산회로(10)의 연산결과 또는 선택회로(15)의 출력중 어느 한쪽을 선택해서 제어비트 레지스터(3) 또는 연산회로(9)로 출력하는 선택회로이다. (13)은 제어비트 레지스터(5)로부터의 입력과 연산회로(9)로부터의 입력 중 어느 한쪽을 선택해서 출력하는 선택회로이다. (16)은 제어 레지스터(3)의 출력을 산술논리 연산회로(8) 또는 선택회로(14)로 공급하는 선택회로이다. (17)은 산술논리 연산회로(8)의 B포트에 입력이 접속된 부호확장회로이다. 이 회로는 제로확장도 실행할 수 있다.
도 52에는 도 51에 도시되는 산술논리 연산회로(8), 연산회로(9), 연산회로(10) 및 연산제어회로(7)의 1예가 도시되어 있다. 상기 연산제어회로(7)은 도 52(b)에 도시되어 있는 바와 같이, 2입력형의 배타적 논리합회로와 그의 출력의 부정회로에 의해서 구성된다. 출력이 1일 때 산술연산회로(8)에 감산을 명령하고, 출력이 0일 때 산술연산회로(8)에 가산을 명령한다. 연산회로(10)은 도 52(d)에 도시되는 바와 같이, 2입력형의 배타적 논리합회로 및 그의 출력과 제어신호를 2입력으로 하는 배타적 논리합회로에 의해서 구성된다. 제어신호가 0일 때 연산회로(10)은 전자의 배타적 논리합회로의 출력을 그대로 출력하고, 제어신호가 1일 때 연산회로(10)은 전자의 배타적 논리합회로의 출력을 부정(반전)해서 출력한다. 도 52(a)에 있어서 산술논리 연산회로(8)은 가감산을 위한 논리가 대표적으로 도시되고, 32비트의 풀가산기를 구비한다. B00∼B31은 B포트입력, A00∼A31은 A포트 입력, C/B는 캐리/빌림수이며, SUB는 연산제어회로(7)의 출력이다. 도 52(c)에 있어서 연산회로(9)는 2입력 이외에 캐리/빌림수를 입력받지만, 캐리/빌림수를 출력하지 않는 1비트 가감산회로이다.
[23] 부호화 제산시의 연산유닛의 동작예
도 53에는 부호화제산을 위한 명령예의 1예가 도시되어 있다. 동일도면에 도시되는 기술은 도 51에 도시되는 회로를 사용해서 32비트÷16비트의 부호화 제산을 실행해서 몫과 잉여(나머지)를 구하기 위한 것이다. 이 제산은
R2÷R1=R2…R4
에 의해서 도시되는 바와 같이, 부호화 32비트의 피제수는 레지스터R2가 유지하고, 제수는 부호화 16비트로 되어 레지스터R1이 유지한다. 몫은 레지스터R2가 유지하고, 잉여는 레지스터R4가 유지한다.
도 54∼도 74에는 도 53의 명령을 순차 실행했을 때 도 51의 회로의 동작이 순서대로 도시되고, 도 75∼도 81에는 역시 마찬가지로 그때의 동작이 레지스터의 상태를 중심으로 순서대로 도시된다. 이들 도면에 따라서 부호화제산시에 있어서 연산유닛의 동작을 순차 명령단위로 설명한다. 또한, 이하의 설명에서는 상술한 바와 같이, 32비트 데이타를 16비트 데이타로 제산하는 것으로 한다. 피제수 및 제수는 최상위비트를 부호비트로 한 2의 보수로 부가되어 있으며, 몫도 2의 보수로 얻는 것으로 한다. 이 설명에서는 몫의 오버플로우의 검출은 실행하고 있지 않다. 피제수가 2의 보수의 부의 최소값인 경우, 처리수순이 의도한 알고리듬과는 다르지만, 이 경우에는 반드시 오버플로우로 되므로, 몫을 보증하지 않는다. 오버플로우의 검출이 필요한 경우에는 사전에 실행해 둔다. 도 53의 명령예를 실행하는 전제조건으로서 레지스터R1에는 16비트 부호화 제수가 저장되어 있으며, 레지스터R2에는 피제수가 저장되어 있다. 레지스터R0, R3은 작업용 레지스터이다. 몫은 레지스터R2에 저장한다.
[1] EOR R0, R0
도 54 및 도 75에 도시되는 바와 같이, 이 명령의 실행에 있어서 작업용 레지스터R0의 값이 0으로 된다. R0의 값이 이미 0으로 되어 있는 경우에는 이 명령은 필요하지 않다. 도 54에 있어서, 시프터(4) 및 부호확장회로(17)은 동작되지 않고, 입력을 스루로 출력한다. 산술논리 연산회로(8)은 A포트 입력과 B포트 입력에 대해서 비트대응으로 배타적 논리합을 취한다. 이것에 의해서 레지스터R0의 값이 전체비트 0으로 된다.
[2] SL16 R1
도 55 및 도 75에 도시되는 바와 같이, 이 명령의 실행에 의해서 제수 레지스터R1에 저장된 제수를 16비트 상위로 시프트(좌측으로의 시프트)하고, 하위 16비트에 0을 시프트한다. 16비트 좌측으로의 시프트는 시프터(4)로 실행한다. 산술논리 연산회로(8)은 A포트 입력을 스루로 출력한다.
[3] DIV0S R0, R2
도 56 및 도 75에 도시되는 바와 같이, 이 명령에 의해 레지스터R2의 MSB를 Q비트에, 레지스터R0의 MSB를 M비트에 저장하고, Q비트와 M비트의 배타적 논리합을 T비트에 저장한다. 이 때, 레지스터R0의 값은 0으로 되어 있으므로, T비트에는 레지스터R2가 유지하고 있는 피제수의 MSB가 저장되게 된다. 이 처리에 있어서, 시프터(4)는 입력의 MSB를 선택회로(15)에 인가한다. 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리 연산회로(8)은 B포트 입력의 MSB를 출력한다. Q비트와 M비트의 배타적 논리합 연산은 연산회로(10)이 실행한다.
[4] MOVT R3
도 57 및 도 76에 도시되는 바와 같이, 이 명령에 의해 T비트의 값, 즉 피제수의 부호를 레지스터R3에 저장한다. 이것은 나머지를 구할 때를 위해 피제수의 부호비트를 보존하기 위함이다. 이 처리에 있어서, 산술논리 연산회로(8)은 A포트 및 B포트 각 비트0의 32비트의 비트열에 T비트의 값을 부가해서 출력한다.
[5] SUBC R0, R2
도 58 및 도 76에 도시되는 바와 같이, 이 명령에 의해 레지스터R2에서 레지스터R0을 캐리를 갖고 감산한다. T비트가 캐리비트이다. 여기에서는 레지스터R0은 0이므로, 레지스터R2에서 T비트(피제수의 부호비트)를 빼는 것에 의해 2의 보수를 1의 보수로 변환하고 있다. 이 처리에 있어서 시프터(4) 및 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리 연산회로(8)은 A포트입력에서 B포트입력과 C/B입력을 감산하고, 그 감산결과와 C/B를 출력한다. 즉, SUBC명령으로 피제수 레지스터 R2에서 R0을 캐리를 갖고 감산하고 있다. 캐리는 제어비트 레지스터(3)과 동일시하고 있다. R0의 값은 0이므로, 피제수 레지스터인 R2에서 제어비트 레지스터(3)의 값을 뺀 것으로 된다. 이것으로 피제수에서 피제수의 부호비트의 값을 빼는 처리가 완료된다. 이 처리에 의해 피제수가 0이상이었던 경우에는 피제수가 그대로이지만, 피제수가 부이었던 경우에는 피제수가 1의 보수로 표현되게 된다. 도 35에는 피제수가 부이고, 4비트의 경우에 피제수가 보정에 의해 어떻게 표현이 바뀌는가를 나타내는 예를 도시한다. 4비트의 부호화 2의 보수의 최소값"1000"에 상기 보정을 가하면, "10111"과 같이 5비트가 필요하게 된다. 본 실시예에서 피제수는 32비트 부호화2의 보수로 표현되어 있으므로, 32비트 부호화2의 보수의 최소값에 상기 보정을 가하면, 33비트가 필요하게 된다. 제어비트 레지스터(3)을 최상위 비트로 하는 33비트로 표현할 수도 있지만, 본 실시예에서는 거기까지 실시하고 있지 않다. 왜냐하면, 피제수가 32비트 부호화2의 보수의 최소값인 경우, 반드시 오버플로우가 발생하여 정확한 몫이 얻어지지 않지만, 오버플로우가 발생하는 경우를 사전에 검출해서 제어하면 좋기 때문이다.
[6] DIV0S R1, R2
도 59 및 도 76에 도시되는 바와 같이, 이 명령에 의해 레지스터R2에 저장되어 있는 피제수의 MSB(부호비트)를 Q비트에, 레지스터R1에 저장되어 있는 제수의 MSB(부호비트)를 M비트에 저장하고, Q비트와 M비트의 배타적 논리합을 취하고, 이것을 몫의 부호로서 T비트에 저장한다. 이 동작은 하나전의 SUBC R0, R2의 실행에서 오버플로우하지 않을 때에 보증된다. 이 때, 시프터(4)는 32비트 입력의 MSB를 출력한다. 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리 연산회로(8)은 B포트 입력의 MSB를 출력한다. 배타적 논리합 연산은 연산회로(10)이 실행한다. 이 DIV0S명령에 따라 3개의 제어비트 레지스터의 초기화가 실행된다. DIV0S명령의 제1의 오퍼런드에 제수 레지스터R1을 설정하고, 제2의 오퍼런드에 피제수 레지스터R2인 2를 설정하고 있다. DIV0S명령은 제1의 오퍼런드를 산술논리 연산회로(8)에 입력하고, 제1의 오퍼펀드의 MSB를 제어비트 레지스터(6)에 저장한다. 그의 처리와 병행해서 DIV0S명령은 제2의 오퍼런드의 MSB를 시프터(4)에 의해 시프터아웃하고, 선택회로(15) 및 선택회로(11)을 경유해서 제어비트 레지스터(5)에 저장한다. 제어비트 레지스터(5)와 제어비트 레지스터(6)의 값은 DIV0S명령 종료후에도 유지해 둔다. 제어비트 레지스터(5)의 값은 선택회로(13)을 경유해서 연산회로(10)의 입력값으로 된다. 제어비트 레지스터(6)의 값은 연산회로(10)의 입력값으로 된다. 연산회로(10)은 상기 2개의 입력의 배타적 논리합을 계산하고, 결과를 선택회로(12)를 경유해서 제어비트 레지스터(3)에 저장한다. 제어비트 레지스터(3)의 값은 DIV0S명령 종료후에도 유지해 둔다. 제1의 오퍼런드의 R1과 제2의 오퍼런드의 R2는 리라이트하지 않는다.
이 DIV0S명령은 피제수의 부호비트를 제어비트 레지스터(5)에 저장하고, 제수의 부호비트를 제어비트 레지스터(6)에 저장하고, 제어비트 레지스터(5)와 제어비트 레지스터(6)의 배타적 논리합을 제어비트 레지스터(3)에 저장하고 있다. 제어비트 레지스터(5)와 제어비트 레지스터(6)의 값은 다음의 계산의 최초의 스텝에서 가산을 실행할지 감산을 실행할지의 판단을 이용한다. 제어비트 레지스터(6)은 다음의 계산에서 제수의 부호확장부로서 이용한다. 제어비트 레지스터(3)의 값은 몫의 부호를 나타내고 있다. 몫이 부인 경우, 몫은 한번에 1의 보수로 구하고 나서 2의 보수로 변환된다. 16비트 부호화2의 보수의 최소값이 몫으로 되는 경우, 1의 보수표현에서는 17비트가 필요하게 된다. 그 17비트의 1의 보수의 부호비트로 되는 것이 본 DIV0S명령 종료 직후의 제어비트 레지스터(3)의 값이다.
피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우, 1을 빼는 상기 보정에 의해 피제수 레지스터R2는 정의 최대값으로 되어 있으므로, DIV0S명령 종료 직후의 제어비트 레지스터(5)의 값은 0으로 된다. 본래대로 하면, 제어비트 레지스터(5)에는 피제수의 부호비트가 들어가 있으므로, 제어비트 레지스터(5)의 값은 1로 되어야 할 것이다. 이 때문에 피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우, 제어수순이 본래의 의도와는 달라진다. 그러나, 조금전에 주의한 바와 같이, 피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우에는 몫이 반드시 오버플로우하지만, 오버플로우가 발생하는 경우를 사전에 검출해서 제어해 두면 좋다. 이하, 피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우에 대해서 특별한 주의는 하지 않는다.
[7] DIR1, R1, R2
도 53의 기술에 있어서, ".arepeat 16"은 어셈블러의 매크로명령으로 ".arepeat 16" 과 ".aendr" 사이에 있는 명령을 16개 전개한다는 의미이다. 따라서, DIV1명령은 16회 반복되고 이것에 의해서 실질적인 제산이 실행된다. DIV1명령의 제1의 오퍼런드의 R1이 제수 레지스터, DIV1명령의 제2의 오퍼런드의 R2가 피제수 레지스터이다. 도 60 및 도 77에 있어서, 1회의 DIV1명령의 실행은 (i), (ii), (iii), (iv)의 처리로 크게 구별된다.
(i) 처음에 제어비트 레지스터(5)와 제어비트 레지스터(6)의 값을 연산제어회로(7)에 페치하고, 2개의 입력의 배타적 논리합의 부정을 계산한다. 이 결과는 산술논리 연산회로(8)로 보내지고, 산술논리 연산회로(8)은 그 값을 연산명령으로서 유지해 둔다. 상기 배타적 논리합의 부정의 결과가 1인 경우 감산명령으로 되고, 0인 경우 가산명령으로 된다.
(ii) 다음에, 피제수 레지스터R2의 값이 시프터(4)에 입력된다. 시프터(4)는 입력된 32비트를 상위로 1비트 시프트한다. 동시에 제어비트 레지스터(3)의 값을 LSB로 시프트인하고, 시프트아웃된 MSB비트를 선택회로(15)를 거쳐서 선택회로(11)로 보내고, 제어비트 레지스터(5)에 저장한다.
(iii) 다음에, 시프터(4)의 32비트의 출력의 최상위에 제어비트 레지스터(5)의 값을 부가한 33비트에 대해서 제수 레지스터R1의 최상위에 제어비트 레지스터(6)을 부가한 33비트를 가산 또는 감산한다. (i)에서 가산명령이 있었던 경우에는 가산, (i)에서 감산명령이 있었던 경우는 감산을 실행한다. 시프터(4)의 32비트의 출력과 제수 레지스터R1의 값의 가감산은 산술논리 연산회로(8)에서 실행한다. 그 결과, 산술논리 연산회로(8)에서 발생한 캐리 또는 빌림수를 선택회로(12)를 거쳐서 연산회로(9)로 보낸다. 산술논리 연산회로(8)에서 발생한 32비트의 연산결과는 피제수 레지스터R2에 저장한다. 제어비트 레지스터(5)와 제어비트 레지스터(6)의 가감산은 산술논리 연산회로(8)에서 조금전에 발생한 캐리 또는 빌림수를 갖는 연산회로(9)에서 실행한다. 연산회로(9)의 결과는 부분잉여의 부호비트로 된다. 이 부분잉여의 부호는 한쪽에서 선택회로(11)로 보내져서 제어비트 레지스터(5)에 저장되고, 다른 한쪽에서 선택회로(13)을 경유해서 연산회로(10)의 입력값으로 된다.
(iv) 연산회로(10)은 이 부분잉여의 부호와 제어비트 레지스터(6)의 값의 배타적 논리합의 부정을 계산한다. 그 결과는 선택회로(12)로 보내지고, 제어비트 레지스터(3)에 저장된다. 이 때의 제어비트 레지스터(3)의 값이 몫비트로 된다.
DIV1명령을 16회 반복한 직후에는 제어비트 레지스터(5)에는 최후의 부분잉여의 부호가 들어가 있으며, 제어비트 레지스터(3)에는 몫의 최하위비트가 들어가 있고, 피제수 레지스터R2의 상위 16비트에는 최후의 부분잉여가 들어가 있고, 하위 16비트에는 17비트의 몫의 상위 16비트가 들어가 있다.
[8] MOV R2, R4
도 61에 도시되는 바와 같이, 이 명령에 의해 레지스터R2의 상위 16비트에 유지되어 있는 최후의 부분잉여를 몫을 구하는 수단으로 파괴하지 않도록 상기 레지스터R2의 값을 레지스터R4로 퇴피시킨다.
[9] EXTS. W R2, R2
상기 DIV0S명령에서 T비트로 출력한 몫의 부호가 상기 DIV1명령을 16회 반복하는 것에 의해 레지스터R2의 하위 16비트의 부호비트의 위치로 가고 있다. EXTS. W R2 R2는 도 62 및 도 77에 도시되는 바와 같이, 그의 하위 16비트의 부호비트를 상위 16비트로 부호확장한다. 이 처리에 있어서, 도 62의 부호확장회로(17)은 하위 16비트를 32비트로 부호확장한다. 산술논리 연산회로(8)은 입력을 스루로 출력한다. 즉, EXTS. W명령으로 피제수 레지스터R2의 하위 16비트의 부호를 상위 16비트로 확장하고 있다. 피제수 레지스터R2의 하위 16비트의 부호비트에는 상기 처리(6)의 DIV0S R1, R2에서 구한 몫의 부호비트가 저장되어 있으므로, 이 몫의 부호를 상위 16비트로 확장하고 있다.
[10] ROTCL R2
T비트에는 상기 DIV1 명령의 16회째에서 구한 최후의 몫비트가 들어가 있다. 도 63 및 도 78에 도시되는 바와 같이, 이 ROTCL명령에서는 시프터(4)를 사용해서 T비트를 레지스터R2의 LSB로 시프트인함과 동시에 레지스터R2의 값을 좌로 시프트하고, 시프트아웃된 MSB(부호비트)를 T비트로 출력한다. 즉, 제어비트 레지스터(3)에 저장되어 있던 몫의 최하위비트를 피제수 레지스터R2로 시프트인한다. 시프트아웃된 부호비트는 제어비트 레지스터(3)에 저장된다. 이 때, 피제수 레지스터R2에는 몫이 저장되어 있다. 제어비트 레지스터(3)의 값이 0일 때, 즉 몫이 정인 경우에는 보정이 불필요하지만, 제어비트 레지스터(3)의 값이 1일 때, 즉 몫이 부인 경우에는 몫이 1의 보수로 표현되어 있으므로 2의 보수로 변환할 필요가 있다.
[11] ADDC R0, R2
이 명령을 실행하기 직전에 레지스터R2는 몫을 유지하고, T비트에는 몫의 부호가 저장되어 있다. 이 ADDC명령은 도 64 및 도 78에 도시되는 바와 같이, T비트의 값을 레지스터R2의 값에 가산하는 것에 의해 레지스터R2가 유지하는 1의 보수를 2의 보수로 변환한다. 몫이 정일 때 T=0이므로 T를 가산하여도 레지스터R2의 값은 변화하지 않는다. 몫이 부일 때는 T=1이므로 T를 가산하는 것에 의해 레지스터R2의 값은 1의 보수에서 2의 보수로 변환된다. 이것에 의해 정확한 몫이 구해진다. 이 처리에 있어서, 산술논리 연산회로(8)은 A포트 입력에 B포트 입력을 가산하고, 또 T비트(캐리/빌림수)를 가산하여 캐리를 T비트에 저장한다. 즉, ADDC명령은 캐리를 갖는 가산명령이다. 제어비트 레지스터(3)은 캐리와 동일시하고 있으며, ADDC명령은 피제수 레지스터R2에 값이 0인 레지스터R1과 제어비트 레지스터(3)을 가산하고 있다. 제어비트 레지스터(3)의 값이 0인 경우에는 피제수 레지스터R2의 값은 ADDC명령 실행전과 변함이 없고, 제어비트 레지스터(3)의 값이 1인 경우에는 피제수 레지스터R2에 저장된 몫을 1의 보수에서 2의 보수로 변환한 것으로 된다. 이 결과, 정확한 몫을 얻을 수 있다. 도 53에 있어서 상기 명령ADDC의 이하에 기술된 명령 DIV0S∼명령EXTS. W는 나머지를 구할 때에 필요한 처리로 된다.
[12] DIV0S R0, R4
이 명령은 레지스터R4의 MSB(나머지의 부호)를 T비트에 저장하는 것을 목적으로 한다. 즉, 도 65 및 도 78에 도시되는 바와 같이, 레지스터R4 MSB가 Q비트에 들어가고, 레지스터R0의 MSB가 M비트에 들어가고, Q비트와 M비트의 배타적 논리합이 T비트에 들어간다. 이 때, 상술한 바와 같이, 레지스터R0의 값은 0이므로 M비트는 0이고, T비트에는 Q비트의 값(나머지의 부호)이 그대로 들어가게 된다. 이러한 처리에 있어서, 시프터(4)는 입력의 MSB를 Q비트로 출력한다. 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리 연산회로(8)은 B포트 입력의 MSB(부호비트)를 M비트로서 제어비트(6)으로 출력한다. 연산회로(10)은 선택회로(13)을 경유한 Q비트의 값과 M비트의 값의 2입력의 배타적 논리합을 취해서 출력한다.
[13] MOVT R0
이 명령은 도 66 및 도 79에 도시되는 바와 같이, T비트의 값(보정전의 나머지의 부호)을 레지스터R0에 저장한다. 이러한 처리에 있어서 산술논리 연산회로(8)은 A포트, B포트가 전체비트0의 32비트의 데이타에 T비트의 값을 가산해서 레지스터R0을 향해서 출력한다.
[14] EOR R3, R0
이 명령은 도 67 및 도 79에 도시되는 바와 같이, 레지스터R3의 내용과 레지스터R0의 내용에 대해서 배타적 논리합을 취한다. 이 처리에 있어서, 시프터(4) 및 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리 연산회로(8)은 A포트 입력과 B포트 입력에 대해서 비트마다 배타적 논리합을 채택해서 출력하고, 레지스터R0에 저장한다.
[15] ROTCR R0
상기 명령EOR에 의해 레지스터R0의 LSB는 피제수의 부호화 나머지(보정전)의 부호가 다를 때에는 1로 되고, 그 부호가 일치하고 있을 때에는 0으로 되어 있다. 명령ROTCR0은 도 68 및 도 79에 도시되어 있는 바와 같이, 그와 같은 레지스터R0의 LSB를 T비트에 저장하는 처리를 실행한다. 이 처리에 있어서, 시프트(4)는 MSB로 T비트를 시프트인하면서 레지스터R0의 값을 우로 시프트하고, 시프트아웃된 LSB를 T비트에 저장한다. 산술논리 연산회로(8)은 A포트 입력을 스루로 출력한다.
[16] BF L1
이 명령은 T비트의 값이 0일 때에 레이블L1이 붙은 명령으로 분기하는 것을 지시하고, T비트의 값이 1일 때에는 이 BF명령의 다음의 명령DIV0S를 실행하는 것을 지시한다.
[17] DIV0S R1, R4
이 명령은 이것에 이어서 실행되는 명령ROTCR 및 명령DIV1과 함께 나머지의 보정을 실행한다. 이 때, 레지스터R4의 상위16비트에는 보정전의 나머지가 저장되어 있으며, 레지스터R1의 상위16비트에는 제수가 저장되어 있다. 양자의 부호가 다를 때는 가산, 일치할 때에는 감산을 실행하게 된다. 이 때문에 상기 DIV0S명령에서는 도 69 및 도 80에 도시되는 바와 같이, Q비트에 나머지(보정전)의 부호, M비트에 제수의 부호를 저장하고, 후기 명령DIV1에 있어서의 가감산의 판정에 사용된다. T비트에는 Q비트와 M비트의 배타적 논리합의 결과가 저장된다. 이 처리에 있어서, 시프터(4)는 입력의 MSB를 선택회로(15) 및 (11)을 경유해서 Q비트로 출력한다. 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리 연산회로(8)은 B포트 입력의 MSB(부호비트)를 M비트로 출력한다. 연산회로(10)은 선택회로(13)을 경유한 Q비트의 값과 M비트의 값의 2입력의 배타적 논리합을 취해서 선택회로(12)를 경유해서 T비트로 출력한다.
[18] ROTCR R4
후기 명령DIV1에서는 좌측을 시프트하고 나서 가산 또는 감산을 실행하기 위해 이 좌측으로의 시프트를 부정하기 위해서 레지스터R4의 값을 우측으로 회전시키고 있다. 이 상태는 도 70 및 도 80에 도시되어 있다. 이 처리에 있어서, 시프터(4)는 MSB에 T비트를 시프트인하면서 레지스터 R4의 값을 우측으로 시프트하고, 시프트아웃된 LSB를 T비트로서 저장한다. 산술논리 연산회로(8)은 A포트 입력을 스루로 출력한다.
[19] DIV1 R1, R4
이 명령DIV1은 도 71 및 도 80에 도시되어 있는 바와 같이, (i), (ii), (iii), (iv)의 처리로 크게 구별된다.
(i) 처음에 제어비트 레지스터(5)의 Q비트와 제어비트 레지스터(6)의 M비트를 연산제어회로(7)에 페치하고, 2개의 입력의 배타적 논리합의 부정을 계산한다. 이 결과는 산술논리 연산회로(8)로 보내고, 산술논리 연산회로(8)은 그 값을 연산명령으로서 유지해 둔다. 상기 배타적 논리합의 부정의 결과가 1인 경우(보정전의 나머지의 부호와 제수의 부호가 동일한 경우)에는 감산명령으로 되고, 0인 경우(보정전의 나머지의 부호와 제수의 부호가 다른 경우)에는 가산명령으로 된다.
(ii) 다음에 레지스터R4의 값이 시프터(4)에 입력된다.
시프터(4)는 레지스터R4의 값의 LSB로 T비트를 시프트인하면서 레지스터R4의 값을 1비트 좌로 시프트하고, 시프트아웃한 MSB를 Q비트에 저장한다.
(iii) 다음에, Q비트와 레지스터R4의 값을 합한 33비트에서 M비트와 레지스터R1의 값을 합한 33비트를 상기 (i)에서 취득한 판정결과에 따라서 가산 또는 감산을 실행하고, 그 결과를 Q비트와 레지스터R4에 저장한다. 시프터(4)의 출력과 레지스터R1의 값의 가감산은 산술논리 연산회로(8)에서 실행한다. 그 결과, 산술논리 연산회로(8)에서 발생한 캐리 또는 빌림수를 선택회로(12)를 거쳐서 연산회로(9)로 보낸다. 연산회로(9)는 그 캐리/빌림수를 입력하고 이것과 함께 Q비트와 M비트의 가감산을 실행한다.
(iv) 연산회로(10)은 상기 연산회로(9)에서 연산된 값, 즉 Q비트와 M비트의 배타적 논리합의 부정을 계산한다. 이 결과는 선택회로(12)를 거쳐서 T비트에 저장된다.
[20] SR16 R4
이 명령은 도 72 및 도 81에 도시되는 바와 같이, 레지스터R4의 상위 16비트(나머지에 상당)를 레지스터R4의 하위16비트로 우로 시프트한다. 시프트 처리는 시프터(4)가 실행한다.
[21] ADD R3, R4
레지스터R3에는 상기 명령MOVT R3에 의해서 피제수의 부호가 저장되어 있다. 상기 명령(5) SUBC R0, R2에 의해서 피제수에서 그의 부호(MSB)가 감산되어 있으므로, 정확한 나머지를 구하기 위해서는 레지스터R4에 유지되어 있는 나머지를 보정하지 않으면 안되는 경우가 있다. 명령ADD R3, R4에서는 보정전의 나머지의 피제수의 부호(R3)을 부가하고 있다. 이 처리는 도 73 및 도 81에 도시되어 있으며, 시프터(4)와 부호확장회로(17)은 각각 입력을 스루로 출력한다. 산술논리 연산회로(8)은 A포트 입력에 B포트 입력을 가산해서 그 가산결과와 캐리를 출력한다. 가산결과는 레지스터R4에 저장되고, 상기 레지스터R4의 하위 16비트에 정확한 나머지가 유지된다.
[22] EXTS. W R4, R4
이 명령은 도 74 및 도 81에 도시되는 바와 같이, 하위 16비트에 정확한 나머지가 저장되어 있는 레지스터R4의 상위측을 부호확장해서 전체 32비트의 최종적인 나머지를 구한다. 이 처리에 있어서, 부호확장회로(17)은 입력의 하위측에서 제16비트째의 부호를 상위 16비트로 부호확장한다. 산술논리 연산회로(8)은 B포트 입력을 스루로 레지스터R4를 향해서 출력한다.
도 54∼도 74에 걸쳐서 설명한 부호화 제산처리를 흐름도로 정리하면, 도 82(a)에 도시되는 전처리, 제산1 및 후처리로 크게 구별되고, 상기 제산1의 처리는 도 83(a)에 도시되는 바와 같이, 제산스텝을 16회 반복하여 실행한다. 전처리의 내용은 도 82(b)에 도시되고, 제산스텝의 처리내용은 도 83(b)에 도시되고 후처리의 내용은 도 85에 도시된다. 후처리중에서는 몫보정, 제1의 잉여보정수단, 제2의 잉여보정수단을 실행한다. 몫보정의 처리는 도 84(b)에 도시되고, 제1의 잉여보정수단은 도 85(a)에 도시되고, 제2의 잉여보정수단은 도 85(b)에 도시된다. 각 흐름도의 내용에 대해서는 또 설명을 필요로 하지 않더라도 그의 내용은 상기 설명에서 용이하게 이해될 것이다.
도 53의 명령기술에 따른 예에서는 몫과 나머지는 동일한 레지스터R2에 유지하였지만, 쌍방을 별도의 레지스터에 넣도록 하여도 좋다. 예를 들면, 몫을 도시하지 않는 레지스터R5에 넣으면, 도 53의 기술에 있어서 명령EOR R0, R0의 다음에 MOV R0, R5를 삽입하고, 또 명령DIV1 R1, R2의 전에 명령ROCTL R5를 삽입해서 상기 명령DIV1, R1, R2 및 명령ROTCL을 16회 반복하도록 한다. 그리고, 명령EXTS. W R2, R2를 명령EXTS. W R5, R5로 변경하고, 다음의 명령ROTCL R2를 명령ROTCL R5로 변경하고, 그 다음의 명령ADDC R0, R2를 명령ADDC R0, R5로 변경하면 좋다.
또한, 도 86∼도 91에는 부호화 제산을 위한 명령기술의 다른 변형예가 도시되어 있다. 이들 상태는 모두 나머지에 관한 보정처리의 기술이 생략되어 있다. SL8 Rn명령은 레지스터Rn을 8비트 좌로 시프트하는 명령이다. 이 명령실행후의 Rn 하위 8비트의 각 비트는 0이다. EXTS. B Rn, Rm명령은 Rn의 하위 8비트를 32비트로 부호확장하고, Rm에 저장하는 명령이다. 이들 내용에 대해서는 또 상세하게 설명할 것까지는 없고, 그의 내용은 상기 실시예의 설명에서 용이하게 이해될 것이다.
[24] DIV0S/DIVOU/DIV1(스텝제산) 명령
여기서, 상기 설명에서 사용한 DIV0S 명령 및 DIV1명령의 동작예와 사용예에 대해서 설명한다. 이하에 나타내는 내용은 상기 항목[17]의 명령 일람에 있어서의 전제조건을 공통으로 한다. 그 항목에 포함되는 DIV1명령 등과는 C언어로 표기된 동작예에 있어서 그의 세부에 있어서 상이하다.
서식 DIV1 Rm, Rn
DIV0S Rm, Rn
DIVOU
설명 범용 레지스터Rn의 내용 32비트를 Rm의 내용에서 1스텝 제산하고, 결과의 1비트를 T비트에 저장한다. DIV0S는 부호화 제산용의 초기화명령에서 피제수(Rn)의 MSB를 Q비트에, 제수(Rm)의 MSB를 M비트에, M비트와 Q비트의 EOR을 T비트에 저장한다. DIVOU는 부호없음 제산용의 초기화명령에서 M/Q/T비트를 0으로 클리어한다. DIV1을(필요하다면 ROTCL과 조합해서) 제수의 비트수 만큼 반복하는 것에 의해 몫을 얻는다. 이 반복중에는 지정한 레지스터와 M/Q/T비트에 중간결과를 저장하고 있다. 이들을 불필요하게 소프트웨어로 리라이트하면, 연산결과를 보증할 수 없게 된다. 제로제산과 오버플로의 검출 및 잉여의 연산은 준비하지 않고 있다. 제산의 시퀀스는 하기 사용예를 참고로 할 수 있다.
동작
Figure kpo00163
Figure kpo00164
Figure kpo00165
Figure kpo00166
Figure kpo00167
Figure kpo00168
사용예1 R1(32bit)÷R0(16bit)=R1(16bit) : 부호없음
SL16 R0 ; 제수를 상위 16비트, 하위 16비트를 0으로 설정
TEST R0, R0 ; 제로제산 체크를 실행한다. TEST R0, R0은 R0과 R0의 논리곱이 0일 때 T비트를 1로 하고, 그 외일 때 T비트를 0으로 하는 명령이다.
BT ZERO_DIV ; T=0일 때 ZERO_DIV로 분기한다.
CMP/HS R0, R1 ; 오버플로우 체크를 실행한다. 즉, 부호없이 R0≤R1일 때 T비트를 1로 한다.
BT OVER_DIV ;
DIVOU ; 플래그의 초기화
.arepeat 16 ;
DIV1 R0, R1 ; 16회 반복
.aendr ;
ROTCL R1 ;
EXTU.W R1,R1 ; R1=몫
사용예2 R1:R2(64bit)÷R0(32bit)=R2(32bit) : 부호없음
TEST R0, R0 ; 제로제산 체크
BT ZERO_DIV ;
CMP/HS R0, R1 ; 오버플로우 체크
BT OVER_DIV ;
DIVOU ; 플래그의 초기화
.arepeat 32 ;
ROTCL R2 ; 32회 반복
DIV1 R0, R1 ;
.aendr ;
ROTCL R2 ; R2=몫
사용예3 R1(16bit)÷R0(16bit)=R1(16bit) : 부호없음
SL16 R0 ; 제수를 상위 16비트, 하위 16비트를 0으로 설정
EXTS. W R1, R1 ; 피제수는 부호확장해서 32비트
EOR R2, R2 ; R=0
DIV0S R2, R1 ;
SUBC R2, R1 ; 피제수가 부일때 -1로 한다.
DIV0S R0, R1 ; 플래그의 초기화
.arepeat 16 ;
DIV1 R0, R1 ; 16회 반복
.aendr ;
EXTS. W R1, R1 ; R1=몫(1의 보수표현)
ROTCL R1 ;
ADDC R2, R1 ; 몫의 부호비트 MSB가 1일 때 +1해서 2의 보수표현으로 변환
EXTS R1, R1 ; R1=몫(2의 보수표현)
사용예4 R2(32bit)÷R0(32bit)=R2(32bit) : 부호화
EOR R3, R3 ;
DIV0S R3, R2 ;
SUBC R1, R1 ; 피제수는 부호확장해서 64비트(R1:R2)
SUBC R3, R2 ; 피제수가 부일 때 -1로 한다.
DIV0S R0, R1 ; 플래그의 초기화
.arepeat 32 ;
ROTCL R2 ; 32회 반복
DIV1 R0, R1 ;
.aendr ;
ROTCL R2 ; R2=몫(1의 보수표현)
ADDC R3, R2 ; 몫의 부호비트 MSB가 1일 때 +1해서 2의 보수표현으로 변환
; R2=몫(2의 보수표현)
이상 본 발명자에 의해서 이루어진 발명을 실시예에 따라 구체적으로 설명했지만, 본 발명은 상기 실시예에 한정되는 것은 아니고 그 요지를 이탈하지 않는 범위에서 여러가지로 변경가능한 것은 물론이다.
예를 들면, 데이타어 길이와 고정길이 명령포맷의 비트수는 32비트의 데이타어 길이와 16비트 고정길이 명령포맷에 한정되지 않고, 각각 2의 누승의 비트수로서 변경할 수 있다. 부호화 제산은 32비트 3오퍼런드 RISC용 명령 등에도 적용할 수 있다. 부호화 제산을 위한 제어는 마이크로 프로그램 방식 이외에 전용의 연산회로를 구성해서 와이어드 논리로 제어하여도 좋다. 또, 부호화 제산에 있어서 상기 DIV1 명령 등의 전용명령이 없는 경우에는 마찬가지의 처리를 다른 명령에 의해서 서브루틴화해서 대처하는 것도 가능하다.
이상의 설명에서는 주로 본 발명자에 의해서 이루어진 발명을 그의 배경으로 된 이용분야인 프로그램 ROM을 내장하는 마이크로 컴퓨터에 적용한 경우에 대해서 설명하였지만, 본발명은 그것에 한정되는 것은 아니고 프로그램 ROM이나 그 이외에 주변회로를 포함하지 않는 마이크로 컴퓨터에도 널리 적용할 수 있다. 또, 상기 실시예에서는 부호화 제산을 비회복법에 적용한 경우에 대해서 설명하였지만 회복법에도 적용할 수 있는 것은 물론이다.
본원에서 개시되는 발명 중 대표적인 것에 의해서 얻어지는 효과를 간단하게 설명하면 다음과 같다.
[1] 범용 레지스터방식을 채용하는 마이크로 컴퓨터에 있어서, 명령실행수단에 공급되는 최대의 데이타어 길이보다 비트수가 적은 고정길이 포맷을 채용하는 것에 의해 종래의 32비트와 같은 고정길이 명령포맷을 갖는 RISC머신에 보여지는 명령디코드 처리의 단순화 등의 이익을 얻으면서 프로그램 용량이 작고 또는 프로그램 메모리의 이용효율이 높고, 또한 시스템 코스트가 작은 마이크로 프로세서를 얻을 수 있다는 효과가 있다.
[2] 상기 고정길이 명령포맷 및 상기 최대 데이타어 길이에 각각 2의 누승의 비트수를 설정하는 것에 의해, 예를 들면 최대 데이타어 길이가 32비트일 때, 명령포맷을 16비트로 고정하는 것에 의해 메모리상에 있어서의 프로그램의 미스얼라이먼트의 방지, 시판되고 있는 일반적인 메모리 등과의 정합성을 유지하고, 또한 동일비트 구성의 ROM/RAM 상에 명령 및 데이타 어느쪽이라도 전개할 수 있다는 효과를 얻는다.
[3] 상기 고정길이 명령포맷 및 상기 최대 데이타어 길이에 각각 2의 누승의 비트수를 설정할 때, 버스폭 전체를 사용해서 여러 명령을 동일 사이클에서 프리체크하는 것에 의해 최대 데이타어 길이와 동일한 비트수의 내부버스를 이용해서 능률적으로 명령을 체크할 수 있음과 동시에 명령페치를 위한 버스 액세스 회수를 줄일 수 있다.
[4] 내부버스가 데이타전송과 명령페치에 공용되는 경우, 메모리에 대한 데이타페치와 명령페치가 경합했을 때 데이타페치를 우선하고, 이 데이타페치에 경합하는 명령페치를 포함하는 명령실행 스케쥴을 전체적으로 지연시키는 파이프 제어를 실행하도록 하는 것에 의해, 데이타페치와 명령페치가 경합하였을 때의 처리 또는 그것에 기인하는 후처리를 간단화할 수 있다는 효과가 있다.
[5] 특정의 레지스터의 값에 대해서 디스플레이스먼트의 값을 오프셋으로 하는 레지스터 상대로 이미디어트 데이타를 지정시키는 기술을 포함하는 명령을 서포트하는 것에 의해 고정길이 명령포맷의 비트수의 제한이 이미디어트 데이타의 이용에 제한을 부여하지 않도록 할 수 있다는 효과가 있다.
[6] 명령중에 레지스터 지정필드가 없는 것에 관계없이 오퍼런드로서 고정된 특정의 범용 레지스터를 묵시적으로 지정시키는 명령을 서포트하는 것에 의해 비트수가 제한된 고정길이 명령포맷이라도 처리상 필요한 디스플레이스먼트 또는 이미디어트 데이타의 비트수를 매우 많게 할 수 있다는 효과가 있다.
[7] 지정조건에 대한 연산결과의 진위를 소정의 상태플래그에 반영시키는 기술을 포함하는 명령을 서포트하는 것에 의해 비트수가 제한된 고정길이 명령포맷이라도 처리상 필요한 디스플레이스먼트 또는 이미디어트 데이타의 비트수를 극력 많게 할 수 있다는 효과가 있다.
[8] 이들의 효과에 의해 고정길이 명령포맷의 비트수가 데이타어 길이보다 작더라도 이미디어트 데이타의 이용이나 절대 어드레스 지정에 제한을 미치지 않는 것, 한정된 비트수의 고정길이 명령포맷 중에서 필요한 디스플레이스먼트 등의 기술이 가능한 것, 메모리상에 있어서의 프로그램 배치의 미스얼라이먼트의 방지에 기여하는 것 및 서포트하는 명령의 내용이라는 점에서 코드효율 또는 메모리 이용효율을 한층 향상시키는 것 등, 데이타어 길이보다 적은 비트수의 고정길이 명령포맷을 채용하는 것에 수반되는 여러가지 문제점을 해결할 수 있다.
[9] 범용 레지스터에 포함되는 레지스터 경합상태를 명령포맷 중에 포함되는 레지스터 지정영역의 정보에 따라서 검출하고, 이 검출결과에 명령실행 사이클수에 따라서 상대적으로 후의 명령의 실행을 지연시키는 파이프 제어수단을 채용하는 것에 의해 범용 레지스터 방식을 이용해서 파이프라인적으로 실행되는 전후의 명령에 의한 상기 범용 레지스터의 이용이 경합하는 상태에 간단하게 대처할 수 있다.
[10] 16비트 고정길이 명령포맷일 때, 조건분기 명령의 디스플레이스먼트를 8비트로 고정하고, 서브루틴 분기명령 및 무조건 분기명령의 디스플레이스먼트를 12비트로 고정하는 것에 의해 명령포맷 길이가 제한된 것중에서 실제의 동작에 실질적인 악영향을 미치는 일 없이 분기명령의 종류에 따른 적절한 분기지를 지정할 수 있다.
[11] 피제수가 부인 경우, 피제수의 LSB의 비중을 갖는 상기 피제수에서 감산하는 전처리를 실행하는 것에 의해 종래와 같이 부분잉여가 0인지 아닌지를 그때마다 판정하지 않더라도 부호화인 채로 제산을 실행할 수 있게 된다. 이것에 의해 제산을 고속으로 실행할 수 있다. 즉, 종래에 있어서 부분잉여가 0인지 아닌지를 짧은 스텝수로 판정하기 위한 전용적인 하드웨어를 마련해서 제산을 고속화한 것과 마찬가지 또는 그 이상의 효과를 하드웨어량을 증대시키는 일없이 실현할 수 있다.
[12] 부분잉여가 0인지 아닌지를 그때마다 판정하는 종래기술에서 멀티길이(임의길이) 부호화 제산을 실행하는 경우에는 부분잉여의 비트수(8비트, 16비트, 32비트, 64비트 등)에 따라서 부분잉여=0의 판정을 실행할 필요가 있으며, 그 비트수에 비례해서 소프트웨어량 및 하드웨어량이 증대한다. 이 점에 있어서 본 발명에서는 부분잉여=0의 판정을 필요로 하지 않으므로, 멀티길이(임의길이) 부호화제산 또는 임의길이 임의 정밀도 부호화 제산에 있어서도 소프트웨어량 및 하드웨어량을 증대시키는 일 없이 용이하게 대응할 수 있다.
[13] 피제수의 MSB인 부호비트를 빼는 조작을 제산의 전처리로서 채용하는 것에 의해 피제수가 정인지 부인지를 고려하지 않고 제산 프로그램을 작성할 수 있고, 또한 그와 같은 판정동작을 필요로 하지 않으므로 제산처리가 고속화되고 또한 피제수가 정인지 부인지에 관계없이 동일한 회로를 이용해서 제산을 실행할 수 있게 된다.
[14] 부분잉여에 대한 제수의 과대 감산 또는 과대 가산의 판단이나 몫비트 산출을 피제수 또는 부분잉여의 MSB와 제수의 MSB에서만 실행할 수 있으므로, 제산의 하드웨어가 더욱 간단하게 된다. 또, 부분잉여에 대한 제수의 과대 감산 또는 과대 가산의 판단이나 가감산의 판단 또는 몫비트 산출을 피제수 또는 부분잉여의 MSB와 제수의 MSB에서만 실행할 수 있으므로, 이 점에 있어서도 임의길이의 제산에 간단하게 응용할 수 있다. 또, 제산스텝에 있어서의 가감산의 판단을 MSB만으로 할 수 있으므로, 제산의 초기화에 의해 동일한 제산스텝을 부호화 및 부호없는 제산에 이용할 수 있다.
[15] 몫과 나머지를 시프트시키면서 양자를 단일의 피제수 레지스터에 유지해 갈때, 종래와 같이 부분잉여=0의 판정을 할 때에 판정대상으로 되는 부분잉여의 자리수 위치를 매회 변화시켜서 그 판정을 실행하지 않으면 안된다는 것에 따라서 그의 처리가 번잡하게 되고, 또한 처리에 시간이 걸린다는 제약을 받지 않고 또한 몫과 나머지를 각각의 레지스터에 유지시키면, 그를 위해 실행하지 않으면 안되는 전송명령이 증대한다는 제약도 받지 않으며, 이것에 의해서 부호화 제산처리를 더욱 고속화하는 것이 용이하게 된다.

Claims (36)

  1. 피제수 또는 부분잉여 부호화 제수의 부호에 따라서 피제수 또는 부분잉여에 제수를 감산 또는 가산해서 새로운 부분잉여를 취득함과 동시에 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리의 반복에 의해서 부호화 제산을 실행하는 제산회로로서, 상기 제산처리에 앞서 피제수의 부호와 제수의 부호에서 몫의 부호를 취득함과 동시에 피제수가 부일 때에는 이 피제수에서 상기 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고, 보정된 피제수를 상기 제산처리의 대상으로 하는 전처리수단 및 상기 제산처리의 반복에 의해서 취득된 몫을 몫의 부호에 따라서 보정하는 후처리수단을 마련해서 이루어지는 것인 것을 특징으로 하는 제산회로.
  2. 제1항에 있어서, 상기 전처리수단에 의한 피제수의 보정은 피제수의 부호비트인 최상위 비트를 상기 피제수에서 빼는 처리인 것을 특징으로 하는 제산회로.
  3. 각각의 2의 보수로 표현된 피제수의 부호와 제수의 부호에서 몫의 부호를 취득하는 수단, 피제수의 부호비트인 최상위비트를 상기 피제수에서 빼서 취득한 값을 유지하는 피제수 레지스터, 피제수의 부호와 제수의 부호에 따라서 상기 피제수 레지스터의 값에서 제수를 감산 또는 가산해서 부분잉여로 하고, 부분잉여의 부호와 제수의 부호에 따라서 상기 부분잉여에서 제수를 감산 또는 가산해서 새로운 부분잉여로서 취득하는 제1의 연산수단, 제1의 연산수단에 의해 취득되는 부분잉여의 부호와 제수의 부호에 따라서 순차 몫비트를 취득하는 제2의 연산수단 및 제2의 연산수단에 의해 취득된 몫에 상기 몫의 부호비트를 더하는 몫보정 수단을 구비해서 이루어지는 것인 것을 특징으로 하는 제산회로.
  4. 제3항에 있어서, 상기 피제수 레지스터는 상기 제1의 연산수단에 의한 감산 또는 가산에 의해서 얻어진 부분잉여를 1비트 상위로 시프트시킴과 동시에 그 때의 몫비트가 최하위 비트로 시프트인되고 몫과 잉여가 유지되는 것인 것을 특징으로 하는 제산회로.
  5. 피제수 레지스터, 제수 레지스터, 제1의 제어비트 저장수단, 제2의 제어비트 저장수단, 피제수 레지스터에 저장된 2의 보수의 부호를 제1의 제어비트 저장수단에 저장하는 수단, 제수 레지스터에 저장된 2의 보수의 부호를 제2의 제어비트 저장수단에 저장하는 수단, 제1의 제어비트 저장수단의 내용을 피제수 레지스터의 부호비트로 간주한 수를 제1의 피제수로 하고, 제1의 피제수가 부인 경우에는 제1의 피제수에서 그의 LSB의 비중을 갖는 1을 뺀 결과를 제2의 피제수로 하고, 제1의 피제수가 0 또는 정인 경우에는 제1의 피제수를 제2의 피제수로 하는 수단, 제2의 피제수의 부호를 제1의 제어비트 저장수단의 부호로 하고, 제2의 피제수를 피제수 레지스터에 저장하는 수단, 제1의 제어비트 저장수단의 내용을 피제수 레지스터의 부호비트로 간주한 수를 피제수 또는 부분잉여로 하고, 제2의 제어비트 저장수단의 내용을 제수 레지스터의 부호비트로 간주한 수를 제수로 하고, 제1의 제어비트 저장수단과 제2의 제어비트 저장수단의 부호가 동일한 경우에 피제수 또는 부분잉여에서 제수를 감산하고, 제1의 제어비트 저장수단과 제2의 제어비트 저장수단의 부호가 다른 경우에 피제수 또는 부분잉여에 제수를 가산하는 수단, 상기 가감산의 결과의 부호를 얻는 수단 및 상기 가감산 전의 제1의 제어비트 저장수단의 부호와 상기 가감산의 부호가 동일한 경우에 상기 가감산 전의 피제수 또는 부분잉여의 절대값은 제수의 절대값보다 크거나 동일하고, 상기 가감산 전의 제1의 제어비트 저장수단의 부호와 상기 가감산의 부호가 다른 경우에 상기 가감산 전의 피제수 또는 부분잉여의 절대값은 제수의 절대값보다 작다고 판단해서 몫비트를 구하는 수단을 포함해서 이루어지는 것을 특징으로 하는 제산회로.
  6. 피제수 레지스터, 제수 레지스터, 제1의 제어비트 저장수단, 제2의 제어비트 저장수단, 피제수 레지스터에 저장된 2의 보수의 부호를 제1의 제어비트 저장수단에 저장하는 수단, 제수 레지스터에 저장된 2의 보수의 부호를 제2의 제어비트 저장수단에 저장하는 수단, 제1의 제어비트 저장수단의 내용을 피제수 레지스터의 부호비트로 간주한 수를 제1의 피제수로 하고, 제1의 피제수의 LSB에서 그 부호비트를 뺀 값을 제2의 피제수로 하는 수단, 제2의 피제수의 부호를 제1의 제어비트 저장수단의 부호로 하고, 제2의 피제수를 피제수 레지스터에 저장하는 수단, 제1의 제어비트 저장수단과 제2의 제어비트 저장수단의 부호가 동일한 경우에 정의 부호를 저장하고, 제1의 제어비트 저장수단과 제2의 제어비트 저장수단의 부호가 다른 경우에 부의 부호를 저장하는 제3의 제어비트 저장수단, 제1의 제어비트 저장수단과 제2의 제어비트 저장수단의 부호가 동일한 경우에 감산명령을 발행하고, 제1의 제어비트 저장수단과 제2의 제어비트 저장수단의 부호가 다른 경우에 가산명령을 발행하는 수단, 제1의 제어비트 저장수단의 내용을 피제수 레지스터의 부호비트로 간주한 수를 1비트 상위로 시프트한 수를 피제수 또는 부분잉여로 하고, 제2의 제어비트 저장수단의 내용을 제수 레지스터의 부호비트로 간주한 수를 제수로 하고, 상기 감산명령 또는 가산명령에 따라 피제수 또는 부분잉여에 대해 제수를 가산 또는 감산하는 수단, 상기 가감산의 결과의 부호를 제1의 제어비트 저장수단에 저장하는 수단, 상기 가감산의 결과를 피제수 레지스터에 저장하는 수단, 제1의 제어비트 저장수단의 부호비트와 제2의 제어비트 저장수단의 부호비트의 배타적 논리합의 부정을 몫비트로 하는 수단, 몫비트가 시프트인되는 몫저장수단 및 소정 비트수의 몫비트를 구한 후에 제3의 제어비트 저장수단의 부호가 부인 경우에 1의 보수로 표현된 몫을 2의 보수로 변환하는 몫보정수단을 포함해서 이루어지는 것을 특징으로 하는 제산회로.
  7. 최초의 피제수의 부호를 저장하는 제4의 제어비트 저장수단, 제1의 제어비트 저장수단에 저장된 최후의 부분잉여의 부호와 상기 제4의 제어비트 저장수단의 부호가 동일한 경우에는 보정을 실행하지 않고, 제1의 제어비트 저장수단의 상기 부호와 제4의 제어비트 저장수단의 부호가 다른 경우에는, 제1의 제어비트 저장수단의 상기 부호와 제2의 제어비트 저장수단의 부호가 동일한 경우에는 부분잉여에 제수를 빼서 원래의 상태로 되돌리고, 제1의 제어비트 저장수단의 상기 부호와 제2의 제어비트 저장수단의 부호가 다른 경우에는 부분잉여에 제수를 더해서 원래의 상태로 되돌리는 제1의 잉여보정수단 및 상기 제4의 제어비트 저장수단의 부호가 정인 경우에는 보정하지 않고, 제4의 제어비트 저장수단의 부호가 부인 경우에는 부분잉여의 LSB에 1을 더해서 원래의 상태로 되돌리는 제2의 잉여보정수단을 더 포함해서 이루어지는 것을 특징으로 하는 제산회로.
  8. 제1항∼제7항 중 어느 한항에 기재된 제산회로를 포함해서 이루어지는 것을 특징으로 하는 마이크로 컴퓨터.
  9. 제5항에 있어서, 제3의 제어비트 저장수단을 더 포함하고, 상기 제3의 제어비트 저장수단은 상기 제1의 제어비트 저장수단과 상기 제2의 제어비트 저장수단의 부호가 동일한 경우에 정의 부호를 저장하고, 상기 제3의 제어비트 저장수단은 상기 제1의 제어비트 저장수단과 상기 제2의 제어비트 저장수단의 부호가 다른 경우에 부의 부호를 저장하는 것을 특징으로 하는 제산회로.
  10. 제9항에 있어서, 몫보정수단을 더 포함하고, 상기 몫보정수단은 소정 비트수의 몫을 구한 후에 상기 제3의 제어비트 저장수단의 부호가 부인 경우 1의 보수로 표현된 몫을 2의 보수로 변환하는 것을 특징으로 하는 제산회로.
  11. 피제수 또는 부분잉여의 부호와 제수의 부호에 따라서 피제수 또는 부분잉여에 제수를 가산 또는 감산해서 새로운 부분잉여를 취득하고, 또한 상기 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리를 소정회수 만큼 반복하는 것에 의해 부호화 데이타의 제산을 실행하는 제산방법으로서, 상기 제산처리에 앞서 상기 피제수의 부호가 부일 때 상기 피제수에서 상기 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고, 상기 보정된 피제수를 상기 제산처리의 대상으로 하는 전처리공정을 포함하는 것을 특징으로 하는 제산방법.
  12. 제11항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산방법.
  13. 제12항에 있어서, 상기 전처리공정에 있어서의 상기 피제수의 보정은 상기 피제수의 부호비트의 값을 상기 피제수의 LSB에서 빼는 처리를 포함하는 것을 특징으로 하는 제산방법.
  14. 제13항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산방법.
  15. 피제수 또는 부분잉여의 부호와 제수의 부호에 따라서 피제수 또는 부분잉여에 제수를 가산 또는 감산해서 새로운 부분잉여를 취득함과 동시에 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리의 반복에 의해서 부호화데이타의 제산을 실행하는 제산회로로서, 상기 제산처리에 앞서 피제수의 부호화 제수의 부호에서 몫의 부호를 취득함과 동시에 피제수가 부일 때에는 이 피제수에서 상기 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고, 보정된 피제수를 상기 제산처리의 대상으로 하는 전처리수단을 포함하는 것을 특징으로 하는 제산회로.
  16. 제15항에 있어서, 상기 전처리수단에 의한 피제수의 보정은 피제수의 부호비트인 최상위 비트의 값을 상기 피제수의 LSB에서 빼는 처리인 것을 특징으로 하는 제산회로.
  17. 제16항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  18. 제15항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  19. 피제수 또는 부분잉여의 부호와 제수의 부호에 따라서 피제수 또는 부분잉여에 제수를 가산 또는 감산해서 새로운 부분잉여를 취득함과 동시에 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리의 반복에 의해서 부호화 데이타의 제산을 실행하는 제산방법으로서, 상기 제산처리에 앞서 피제수의 부호와 제수의 부호에서 몫의 부호를 취득함과 동시에 피제수가 부일 때에는 이 피제수에서 상기 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고, 보정된 피제수를 상기 제산처리의 대상으로 하는 전처리공정 및 상기 제산처리의 반복에 의해서 취득된 몫을 몫의 부호에 따라서 보정하는 후처리공정을 포함하는 것을 특징으로 하는 제산방법.
  20. 제19항에 있어서, 상기 전처리공정에 의한 피제수의 보정은 피제수의 부호비트인 최상위 비트의 값을 상기 피제수의 LSB에서 빼는 처리인 것을 특징으로 하는 제산방법.
  21. 제20항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산방법.
  22. 제19항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산방법.
  23. 피제수 또는 부분잉여의 부호와 제수의 부호에 따라서 피제수 또는 부분잉여에 제수를 가산 또는 감산하고, 상기 가산 내지 감산의 결과가 원래의 부호와 다른 경우, 상기 가산 내지 감산을 무효로 하고 새로운 부분잉여를 취득함과 동시에 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리의 반복에 의해서 부호화 데이타의 제산을 실행하는 제산회로로서, 상기 제산처리에 앞서 피제수가 부일 때에는 이 피제수에서 상기 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고, 보정된 피제수를 상기 제산처리의 대상으로 하는 전처리수단을 포함하는 것을 특징으로 하는 제산회로.
  24. 제23항에 있어서, 상기 전처리수단에 의한 피제수의 보정은 피제수의 부호비트인 최상위비트의 값을 상기 피제수의 LSB에서 빼는 처리인 것을 특징으로 하는 제산회로.
  25. 제24항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  26. 제23항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  27. 피제수 또는 부분잉여의 부호와 제수의 부호에 따라서 피제수 또는 부분잉여에서 제수를 가산 또는 감산하고, 상기 가산 내지 감산의 결과가 원래의 부호와 다른 경우, 상기 가산 내지 감산을 무효로 하고 새로운 부분잉여를 취득함과 동시에 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리의 반복에 의해서 부호화 데이타의 제산을 실행하는 제산회로로서, 상기 제산처리에 앞서 피제수의 부호와 제수의 부호에서 몫의 부호를 취득함과 동시에 피제수가 부일 때에는 이 피제수에서 상기 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고, 보정된 피제수를 상기 제산처리의 대상으로 하는 전처리수단을 포함하는 것을 특징으로 하는 제산회로.
  28. 제27항에 있어서, 상기 전처리수단에 의한 피제수의 보정은 피제수의 부호비트인 최상위비트의 값을 상기 피제수의 LSB에서 빼는 처리인 것을 특징으로 하는 제산회로.
  29. 제28항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  30. 제27항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  31. 피제수 또는 부분잉여의 부호와 제수의 부호에 따라서 피제수 또는 부분잉여에서 제수를 가산 또는 감산하고, 상기 가산 내지 감산의 결과가 원래의 부호와 다른 경우, 상기 가산 내지 감산을 무효로 하고 새로운 부분잉여를 취득함과 동시에 취득된 부분잉여의 부호와 제수의 부호에 따라서 몫비트를 취득하는 제산처리의 반복에 의해서 부호화 데이타의 제산을 실행하는 제산회로로서, 상기 제산처리에 앞서 피제수의 부호와 제수의 부호에서 몫의 부호를 취득함과 동시에 피제수가 부일 때에는 이 피제수에서 상기 피제수의 LSB의 비중을 갖는 1을 빼서 피제수의 보정을 실행하고, 보정된 피제수를 상기 제산처리의 대상으로 하는 전처리수단 및 상기 제산처리의 반복에 의해서 취득된 몫을 몫의 부호에 따라서 보정하는 후처리수단을 포함하는 것을 특징으로 하는 제산회로.
  32. 제31항에 있어서, 상기 전처리수단에 의한 피제수의 보정은 피제수의 부호비트인 최상위비트의 값을 상기 피제수의 LSB에서 빼는 처리인 것을 특징으로 하는 제산회로.
  33. 제32항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  34. 제31항에 있어서, 최초에 부가되는 피제수는 2의 보수인 것을 특징으로 하는 제산회로.
  35. 2의 보수로 표현된 피제수의 부호의 값과 2의 보수로 표현된 제수의 부호의 값에서 몫의 부호의 값을 취득하는 수단, 피제수의 부호의 값으로 되는 피제수의 최상위비트를 상기 피제수에서 빼고 취득된 값을 유지하는 피제수 레지스터, 피제수의 부호의 값과 제수의 부호의 값에 따라서 상기 피제수 레지스터의 값에 상기 제수의 값을 감산 또는 가산하고, 피제수 레지스터의 부호의 값이 변화했을 때 상기 감산 또는 가산을 무효로 해서 부분잉여의 값으로 하고, 상기 부분잉여의 부호의 값과 상기 제수의 부호의 값에 따라서 상기 부분잉여에 상기 제수를 감산 또는 가산해서 새로운 부분잉여를 취득하는 제1의 연산수단, 상기 제1의 연산수단에 의해 취득된 부분잉여의 부호의 값과 상기 제수의 부호의 값에 따라서 순차 몫비트를 취득하는 제2의 연산수단 및 상기 제2의 연산수단에 의해 취득된 몫에 상기 몫의 부호의 값을 가산하는 몫보정수단을 포함하는 것을 특징으로 하는 제산회로.
  36. 제35항에 있어서, 상기 피제수 레지스터는 상기 제1의 연산수단에 의한 감산 또는 가산에 의해서 얻어진 부분잉여를 1비트 상위로 시프트하고, 그 때의 몫비트가 최하위 비트에 저장되어 몫과 잉여가 유지되는 것을 특징으로 하는 제산회로.
KR1019970026158A 1991-06-24 1997-06-20 마이크로 컴퓨터 및 제산 회로 KR100268635B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019970026158A KR100268635B1 (ko) 1991-06-24 1997-06-20 마이크로 컴퓨터 및 제산 회로

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
JP91-178739 1991-06-24
JP17873991 1991-06-24
JP92-154525 1992-05-21
JP4154525A JP2984463B2 (ja) 1991-06-24 1992-05-21 マイクロコンピュータ
KR1019920010873A KR100294559B1 (ko) 1991-06-24 1992-06-23 마이크로컴퓨터및제산회로
KR1019970026158A KR100268635B1 (ko) 1991-06-24 1997-06-20 마이크로 컴퓨터 및 제산 회로

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1019920010873A Division KR100294559B1 (ko) 1991-06-24 1992-06-23 마이크로컴퓨터및제산회로

Publications (1)

Publication Number Publication Date
KR100268635B1 true KR100268635B1 (ko) 2000-10-16

Family

ID=26482784

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1019920010873A KR100294559B1 (ko) 1991-06-24 1992-06-23 마이크로컴퓨터및제산회로
KR1019970026157A KR100294560B1 (ko) 1991-06-24 1997-06-20 마이크로컴퓨터및제산회로
KR1019970026158A KR100268635B1 (ko) 1991-06-24 1997-06-20 마이크로 컴퓨터 및 제산 회로

Family Applications Before (2)

Application Number Title Priority Date Filing Date
KR1019920010873A KR100294559B1 (ko) 1991-06-24 1992-06-23 마이크로컴퓨터및제산회로
KR1019970026157A KR100294560B1 (ko) 1991-06-24 1997-06-20 마이크로컴퓨터및제산회로

Country Status (6)

Country Link
US (12) US5991545A (ko)
EP (4) EP0902361B1 (ko)
JP (1) JP2984463B2 (ko)
KR (3) KR100294559B1 (ko)
DE (3) DE69233361T2 (ko)
HK (2) HK1011101A1 (ko)

Families Citing this family (88)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3105197B2 (ja) * 1991-06-24 2000-10-30 株式会社日立製作所 除算回路及び除算方法
JP2984463B2 (ja) * 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
JP3000857B2 (ja) * 1994-08-31 2000-01-17 松下電工株式会社 プログラマブルコントローラ
JP3504355B2 (ja) * 1994-12-06 2004-03-08 松下電器産業株式会社 プロセッサ
CN103455304B (zh) * 1995-08-31 2016-04-27 英特尔公司 用于处理指令集的处理器
US6366999B1 (en) * 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
US6701405B1 (en) 1999-10-01 2004-03-02 Hitachi, Ltd. DMA handshake protocol
US6546480B1 (en) 1999-10-01 2003-04-08 Hitachi, Ltd. Instructions for arithmetic operations on vectored data
US6567932B2 (en) 1999-10-01 2003-05-20 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US6349371B1 (en) 1999-10-01 2002-02-19 Stmicroelectronics Ltd. Circuit for storing information
US6684348B1 (en) 1999-10-01 2004-01-27 Hitachi, Ltd. Circuit for processing trace information
US6434665B1 (en) 1999-10-01 2002-08-13 Stmicroelectronics, Inc. Cache memory store buffer
US6530047B1 (en) 1999-10-01 2003-03-04 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US6633971B2 (en) 1999-10-01 2003-10-14 Hitachi, Ltd. Mechanism for forward data in a processor pipeline using a single pipefile connected to the pipeline
US6542983B1 (en) 1999-10-01 2003-04-01 Hitachi, Ltd. Microcomputer/floating point processor interface and method
US6732307B1 (en) 1999-10-01 2004-05-04 Hitachi, Ltd. Apparatus and method for storing trace information
US6496905B1 (en) 1999-10-01 2002-12-17 Hitachi, Ltd. Write buffer with burst capability
US6629207B1 (en) 1999-10-01 2003-09-30 Hitachi, Ltd. Method for loading instructions or data into a locked way of a cache memory
US6928073B2 (en) * 1999-10-01 2005-08-09 Stmicroelectronics Ltd. Integrated circuit implementing packet transmission
US6859891B2 (en) 1999-10-01 2005-02-22 Stmicroelectronics Limited Apparatus and method for shadowing processor information
US6590907B1 (en) 1999-10-01 2003-07-08 Stmicroelectronics Ltd. Integrated circuit with additional ports
US6298394B1 (en) 1999-10-01 2001-10-02 Stmicroelectronics, Ltd. System and method for capturing information on an interconnect in an integrated circuit
US6449712B1 (en) 1999-10-01 2002-09-10 Hitachi, Ltd. Emulating execution of smaller fixed-length branch/delay slot instructions with a sequence of larger fixed-length instructions
US6820195B1 (en) 1999-10-01 2004-11-16 Hitachi, Ltd. Aligning load/store data with big/little endian determined rotation distance control
US6351803B2 (en) 1999-10-01 2002-02-26 Hitachi Ltd. Mechanism for power efficient processing in a pipeline processor
US7000078B1 (en) * 1999-10-01 2006-02-14 Stmicroelectronics Ltd. System and method for maintaining cache coherency in a shared memory system
US6779145B1 (en) 1999-10-01 2004-08-17 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US6665816B1 (en) 1999-10-01 2003-12-16 Stmicroelectronics Limited Data shift register
US7072817B1 (en) 1999-10-01 2006-07-04 Stmicroelectronics Ltd. Method of designing an initiator in an integrated circuit
US6772325B1 (en) * 1999-10-01 2004-08-03 Hitachi, Ltd. Processor architecture and operation for exploiting improved branch control instruction
US6629115B1 (en) 1999-10-01 2003-09-30 Hitachi, Ltd. Method and apparatus for manipulating vectored data
US7793261B1 (en) 1999-10-01 2010-09-07 Stmicroelectronics Limited Interface for transferring debug information
US6553460B1 (en) 1999-10-01 2003-04-22 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6601189B1 (en) 1999-10-01 2003-07-29 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US6615370B1 (en) 1999-10-01 2003-09-02 Hitachi, Ltd. Circuit for storing trace information
US6457118B1 (en) 1999-10-01 2002-09-24 Hitachi Ltd Method and system for selecting and using source operands in computer system instructions
US6598128B1 (en) 1999-10-01 2003-07-22 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US7260745B1 (en) 1999-10-01 2007-08-21 Stmicroelectronics Ltd. Detection of information on an interconnect
US6412047B2 (en) 1999-10-01 2002-06-25 Stmicroelectronics, Inc. Coherency protocol
US6502210B1 (en) 1999-10-01 2002-12-31 Stmicroelectronics, Ltd. Microcomputer debug architecture and method
US6591369B1 (en) 1999-10-01 2003-07-08 Stmicroelectronics, Ltd. System and method for communicating with an integrated circuit
US6487683B1 (en) 1999-10-01 2002-11-26 Stmicroelectronics Limited Microcomputer debug architecture and method
US6598177B1 (en) 1999-10-01 2003-07-22 Stmicroelectronics Ltd. Monitoring error conditions in an integrated circuit
US6408381B1 (en) 1999-10-01 2002-06-18 Hitachi, Ltd. Mechanism for fast access to control space in a pipeline processor
US6460174B1 (en) 1999-10-01 2002-10-01 Stmicroelectronics, Ltd. Methods and models for use in designing an integrated circuit
US6693914B1 (en) 1999-10-01 2004-02-17 Stmicroelectronics, Inc. Arbitration mechanism for packet transmission
JP2001142692A (ja) * 1999-10-01 2001-05-25 Hitachi Ltd 2つの異なる固定長命令セットを実行するマイクロプロセッサ、マイクロコンピュータおよび命令実行方法
US6412043B1 (en) 1999-10-01 2002-06-25 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US7266728B1 (en) 1999-10-01 2007-09-04 Stmicroelectronics Ltd. Circuit for monitoring information on an interconnect
US6463553B1 (en) 1999-10-01 2002-10-08 Stmicroelectronics, Ltd. Microcomputer debug architecture and method
US6557119B1 (en) 1999-10-01 2003-04-29 Stmicroelectronics Limited Microcomputer debug architecture and method
US6826191B1 (en) 1999-10-01 2004-11-30 Stmicroelectronics Ltd. Packets containing transaction attributes
US6918065B1 (en) 1999-10-01 2005-07-12 Hitachi, Ltd. Method for compressing and decompressing trace information
US6574651B1 (en) 1999-10-01 2003-06-03 Hitachi, Ltd. Method and apparatus for arithmetic operation on vectored data
US7149878B1 (en) * 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
DE10055659C1 (de) * 2000-11-10 2002-03-28 Infineon Technologies Ag Berechnungsschaltung zur Division eines Festpunktsignals
US7711926B2 (en) * 2001-04-18 2010-05-04 Mips Technologies, Inc. Mapping system and method for instruction set processing
US6826681B2 (en) * 2001-06-18 2004-11-30 Mips Technologies, Inc. Instruction specified register value saving in allocated caller stack or not yet allocated callee stack
US7167514B2 (en) * 2001-07-18 2007-01-23 Agere Systems Inc. Processing of quinary data
US7107439B2 (en) * 2001-08-10 2006-09-12 Mips Technologies, Inc. System and method of controlling software decompression through exceptions
JP2003186567A (ja) * 2001-12-19 2003-07-04 Matsushita Electric Ind Co Ltd マイクロプロセッサ
US7574585B1 (en) * 2003-01-31 2009-08-11 Zilog, Inc. Implementing software breakpoints and debugger therefor
US7194601B2 (en) * 2003-04-03 2007-03-20 Via-Cyrix, Inc Low-power decode circuitry and method for a processor having multiple decoders
US20070269297A1 (en) 2003-11-10 2007-11-22 Meulen Peter V D Semiconductor wafer handling and transport
US7458763B2 (en) 2003-11-10 2008-12-02 Blueshift Technologies, Inc. Mid-entry load lock for semiconductor handling system
US20070282480A1 (en) * 2003-11-10 2007-12-06 Pannese Patrick D Methods and systems for controlling a semiconductor fabrication process
US10086511B2 (en) 2003-11-10 2018-10-02 Brooks Automation, Inc. Semiconductor manufacturing systems
CN1555005A (zh) * 2003-12-29 2004-12-15 ����ͨѶ�ɷ����޹�˾ 动态循环流水线的交叠式命令提交方法
US7334116B2 (en) * 2004-10-06 2008-02-19 Sony Computer Entertainment Inc. Bit manipulation on data in a bitstream that is stored in a memory having an address boundary length
WO2008030637A2 (en) * 2006-05-01 2008-03-13 Blueshift Technologies, Inc. Methods and systems for controlling a semiconductor fabrication process
US7810073B2 (en) * 2006-09-05 2010-10-05 International Business Machines Corporation Method of translating n to n instructions employing an enhanced extended translation facility
US7908474B2 (en) * 2006-09-22 2011-03-15 International Business Machines Corporation Method for improved key management for ATMs and other remote devices
US7870087B2 (en) * 2006-11-02 2011-01-11 D-Wave Systems Inc. Processing relational database problems using analog processors
US7599901B2 (en) * 2006-12-06 2009-10-06 Microsoft Corporation Processing data-centric business models
US7873591B2 (en) * 2007-02-02 2011-01-18 Microsoft Corporation User-interface architecture for manipulating business models
JP5169760B2 (ja) * 2008-01-28 2013-03-27 富士通株式会社 通信装置、受信データサイズチェック方法、倍数判定回路および倍数判定方法
US9003170B2 (en) 2009-12-22 2015-04-07 Intel Corporation Bit range isolation instructions, methods, and apparatus
RU2469376C1 (ru) * 2011-07-06 2012-12-10 Федеральное государственное унитарное предприятие "Научно-производственное объединение автоматики имени академика Н.А. Семихатова" Вычислительное устройство бинс
US20130042091A1 (en) * 2011-08-12 2013-02-14 Qualcomm Incorporated BIT Splitting Instruction
US10025556B2 (en) * 2014-09-08 2018-07-17 Atmel Corporation Optimized multi-precision division
US10025299B2 (en) 2015-10-06 2018-07-17 Mtm Robotics, Llc System and method for self-contained modular manufacturing device having nested controllers
US10220516B2 (en) 2015-10-06 2019-03-05 Mtm Robotics, Llc System and method for self-contained independently controlled modular manufacturing tools
US10252421B2 (en) 2015-10-06 2019-04-09 Mtm Robotics Llc Self-contained modular manufacturing tool
US10022872B2 (en) 2015-10-06 2018-07-17 Mtm Robotics, Llc Self-contained modular manufacturing tool responsive to locally stored historical data
CN111628846B (zh) * 2017-09-01 2022-12-06 惠州市德赛西威汽车电子股份有限公司 一种提高数据传输效率的方法
US20210096877A1 (en) * 2019-09-26 2021-04-01 Advanced Micro Devices, Inc. Collapsing bubbles in a processing unit pipeline
CN110941211A (zh) * 2019-10-17 2020-03-31 华晟现代电子科技(香港)有限公司 一种基于物联网精简功能的微处理器及控制方法
US11755327B2 (en) * 2020-03-02 2023-09-12 Microsoft Technology Licensing, Llc Delivering immediate values by using program counter (PC)-relative load instructions to fetch literal data in processor-based devices

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4240139A (en) * 1977-09-22 1980-12-16 Tokyo Shibaura Denki Kabushiki Kaisha Address generating system
JPS5447455A (en) 1977-09-22 1979-04-14 Toshiba Corp Data processor
US4296469A (en) * 1978-11-17 1981-10-20 Motorola, Inc. Execution unit for data processor using segmented bus structure
US4325120A (en) * 1978-12-21 1982-04-13 Intel Corporation Data processing system
JPS55127639A (en) 1979-03-23 1980-10-02 Nec Corp Data processor
US4312034A (en) * 1979-05-21 1982-01-19 Motorola, Inc. ALU and Condition code control unit for data processor
US4354228A (en) * 1979-12-20 1982-10-12 International Business Machines Corporation Flexible processor on a single semiconductor substrate using a plurality of arrays
US4402043A (en) 1980-11-24 1983-08-30 Texas Instruments Incorporated Microprocessor with compressed control ROM
US4433378A (en) * 1981-09-28 1984-02-21 Western Digital Chip topography for MOS packet network interface circuit
US4868784A (en) * 1982-02-22 1989-09-19 Texas Instruments Incorporated Microcomputer with a multi-channel serial port having a single port address
JPS58189739A (ja) * 1982-04-30 1983-11-05 Hitachi Ltd デ−タ処理システム
US4569018A (en) * 1982-11-15 1986-02-04 Data General Corp. Digital data processing system having dual-purpose scratchpad and address translation memory
JPS6051948A (ja) * 1983-08-31 1985-03-23 Hitachi Ltd 情報処理装置
US4604722A (en) * 1983-09-30 1986-08-05 Honeywell Information Systems Inc. Decimal arithmetic logic unit for doubling or complementing decimal operand
JPS6260034A (ja) 1985-09-10 1987-03-16 Toshiba Corp ストア−ドプログラム方式制御装置
JPS62143140A (ja) 1985-12-18 1987-06-26 Fujitsu Ltd 条件付分岐命令設定方式
EP0239081B1 (en) * 1986-03-26 1995-09-06 Hitachi, Ltd. Pipelined data processor capable of decoding and executing plural instructions in parallel
JPS635432A (ja) 1986-06-25 1988-01-11 Nec Corp マイクロプロセツサ
US4992934A (en) * 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
JPS6491228A (en) * 1987-09-30 1989-04-10 Takeshi Sakamura Data processor
JPS6481032A (en) 1987-09-24 1989-03-27 Hitachi Ltd Microprocessor
US4947366A (en) * 1987-10-02 1990-08-07 Advanced Micro Devices, Inc. Input/output controller incorporating address mapped input/output windows and read ahead/write behind capabilities
US5019968A (en) * 1988-03-29 1991-05-28 Yulan Wang Three-dimensional vector processor
DE68928113T2 (de) * 1988-04-01 1997-10-09 Nec Corp Reihenfolgesteuersystem zur Behandlung von Befehlen
JPH07120278B2 (ja) * 1988-07-04 1995-12-20 三菱電機株式会社 データ処理装置
JP3098242B2 (ja) * 1988-07-13 2000-10-16 日本電気株式会社 データ処理装置
US5202967A (en) * 1988-08-09 1993-04-13 Matsushita Electric Industrial Co., Ltd. Data processing apparatus for performing parallel decoding and parallel execution of a variable word length instruction
US5132925A (en) * 1988-08-18 1992-07-21 Digital Equipment Corporation Radix-16 divider using overlapped quotient bit selection and concurrent quotient rounding and correction
US5023827A (en) * 1988-08-18 1991-06-11 Digital Equipment Corporation Radix-16 divider using overlapped quotient bit selection and concurrent quotient rounding and correction
US5050068A (en) * 1988-10-03 1991-09-17 Duke University Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams
JPH0628034B2 (ja) 1988-10-24 1994-04-13 工業技術院長 タグ付計算機
JPH02125333A (ja) 1988-11-04 1990-05-14 Hitachi Micro Comput Eng Ltd プログラムメモリ
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
JP2664750B2 (ja) * 1988-12-24 1997-10-22 株式会社東芝 演算装置及び演算処理方法
US5097435A (en) * 1988-12-24 1992-03-17 Kabushiki Kaisha Toshiba High speed dividing apparatus
JPH02308330A (ja) 1989-05-23 1990-12-21 Nec Corp 知識情報処理装置
US5050668A (en) * 1989-09-11 1991-09-24 Allied-Signal Inc. Stress relief for an annular recuperator
JPH03127125A (ja) 1989-10-13 1991-05-30 Hitachi Ltd 学習による多重分岐処理の自動変更方式
DE8913210U1 (ko) * 1989-11-08 1989-12-14 Howal Gmbh, 7505 Ettlingen, De
JP2816248B2 (ja) * 1989-11-08 1998-10-27 株式会社日立製作所 データプロセッサ
US5016210A (en) * 1989-11-15 1991-05-14 United Technologies Corporation Binary division of signed operands
JPH063583B2 (ja) * 1990-01-11 1994-01-12 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン 命令デコード・サイクル中にアドレスを生成するデジタル・コンピュータおよびその方法
US5095526A (en) * 1990-01-26 1992-03-10 Apple Computer, Inc. Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status
US5193167A (en) * 1990-06-29 1993-03-09 Digital Equipment Corporation Ensuring data integrity by locked-load and conditional-store operations in a multiprocessor system
US5155843A (en) * 1990-06-29 1992-10-13 Digital Equipment Corporation Error transition mode for multi-processor system
DE69130138T2 (de) * 1990-06-29 1999-05-06 Digital Equipment Corp Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
JPH04104350A (ja) * 1990-08-23 1992-04-06 Hitachi Ltd マイクロプロセッサ
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
JP2984463B2 (ja) * 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
JP2761688B2 (ja) * 1992-02-07 1998-06-04 三菱電機株式会社 データ処理装置
US5272660A (en) * 1992-06-01 1993-12-21 Motorola, Inc. Method and apparatus for performing integer and floating point division using a single SRT divider in a data processor
JP3127125B2 (ja) 1996-05-29 2001-01-22 株式会社ノダ 内装ドアの製造方法
US6282633B1 (en) * 1998-11-13 2001-08-28 Tensilica, Inc. High data density RISC processor
US6961819B2 (en) * 2002-04-26 2005-11-01 Mips Technologies, Inc. Method and apparatus for redirection of operations between interfaces

Also Published As

Publication number Publication date
HK1039661B (zh) 2005-02-25
DE69233361D1 (de) 2004-07-08
KR100294559B1 (ko) 2001-09-17
DE69233412D1 (de) 2004-10-21
US20050251651A1 (en) 2005-11-10
KR100294560B1 (ko) 2001-09-17
US6253308B1 (en) 2001-06-26
EP0902361A3 (en) 2002-01-02
EP0525375A2 (en) 1993-02-03
JP2984463B2 (ja) 1999-11-29
US5682545A (en) 1997-10-28
DE69232232T2 (de) 2002-08-29
US5969976A (en) 1999-10-19
HK1011101A1 (en) 1999-07-02
US20020078325A1 (en) 2002-06-20
JPH05197546A (ja) 1993-08-06
EP0902361B1 (en) 2004-06-02
HK1039661A1 (en) 2002-05-03
EP0902358A3 (en) 2002-01-02
US6343357B1 (en) 2002-01-29
US20080313444A1 (en) 2008-12-18
DE69233412T2 (de) 2005-02-17
US5991545A (en) 1999-11-23
DE69232232D1 (de) 2002-01-10
DE69233361T2 (de) 2005-06-02
EP1122638B1 (en) 2004-09-15
US6122724A (en) 2000-09-19
EP0902361A2 (en) 1999-03-17
KR930001056A (ko) 1993-01-16
EP1122638A2 (en) 2001-08-08
US6272620B1 (en) 2001-08-07
EP0525375A3 (en) 1993-04-21
US6131154A (en) 2000-10-10
EP0525375B1 (en) 2001-11-28
EP1122638A3 (en) 2002-01-23
EP0902358A2 (en) 1999-03-17
US20100191934A1 (en) 2010-07-29
US6996700B2 (en) 2006-02-07

Similar Documents

Publication Publication Date Title
KR100268635B1 (ko) 마이크로 컴퓨터 및 제산 회로
US5901301A (en) Data processor and method of processing data
US6560697B2 (en) Data processor having repeat instruction processing using executed instruction number counter
JP3745039B2 (ja) 遅延命令を有するマイクロプロセッサ
US20030061471A1 (en) Data processor
US6484253B1 (en) Data processor
US5924114A (en) Circular buffer with two different step sizes
JP4502532B2 (ja) データ処理装置
JP3105197B2 (ja) 除算回路及び除算方法
JP3215085B2 (ja) 中央処理装置及びマイクロコンピュータ
JP3539914B2 (ja) マイクロコンピュータ
JP3205544B2 (ja) 中央処理装置
JPH1173314A (ja) マイクロプロセッサ

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20110617

Year of fee payment: 12

EXPY Expiration of term