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

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

Info

Publication number
KR100294559B1
KR100294559B1 KR1019920010873A KR920010873A KR100294559B1 KR 100294559 B1 KR100294559 B1 KR 100294559B1 KR 1019920010873 A KR1019920010873 A KR 1019920010873A KR 920010873 A KR920010873 A KR 920010873A KR 100294559 B1 KR100294559 B1 KR 100294559B1
Authority
KR
South Korea
Prior art keywords
bit
instruction
register
address
command
Prior art date
Application number
KR1019920010873A
Other languages
English (en)
Other versions
KR930001056A (ko
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=KR100294559(B1) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by 요네야마 사다오, 히다치 마이컴시스템가부시키가이샤, 스즈키 진이치로, 히다치초엘에스아이 엔지니어링가부시키가이샤, 가나이 쓰도무, 가부시끼가이샤 히다치 세이사꾸쇼 filed Critical 요네야마 사다오
Publication of KR930001056A publication Critical patent/KR930001056A/ko
Priority to KR1019970026158A priority Critical patent/KR100268635B1/ko
Application granted granted Critical
Publication of KR100294559B1 publication Critical patent/KR100294559B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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
    • G06F7/535Dividing only
    • 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

마이크로 컴퓨터 및 제산 회로로서, 데이타어 길이보다도 작은 비트수의 고정 길이 명령 포맷을 채용하는 것에 따르는 여러가지의 문제점을 해소하기 위해, 범용 레지스터 방법을 채용하는 마이크로 컴퓨터MCU에 있어서, 명령 실행 수단에 공급되는 최대의 데이타어 길이보다도 비트수의 작은 2의 누승의 고정 길이 명령 포맷을 채용한다.
이러한 마이크로 컴퓨터 및 제산회로를 사용하는 것에 의해, 종래의 고정 길이 명령 포맷을 갖는 RISC머신에 보여지는 명령 디코드 처리의 단순화등의 이익을 가지면서 프로그램 용량이 작고, 프로그램 메모리의 이용 효율이 높고 또한 시스템 코스트의 적은 마이크로 프로세서를 얻을 수가 있다.

Description

마이크로 컴퓨터 및 제산 회로
제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도는 본 발명에 관한 부호화 제산의 기본적인 약속 또는 기본적인 처리 순서의 전체를 일반적 형식으로 도시한 설명도.
제34도 (a)는 피제수의 전보정의 방식에 대한 설명도.
제34도 (b)는 몫의 부호 예측에 대한 설명도.
제35도는 부의 피제수에 대한 전보정의 1예의 설명도.
제36도는 부의 피제수에 대한 1을 감산하는 전보정후의 부분잉여의 표현예를 도시한 설명도.
제37도 (a)는 부호화 제산 과정에 있어서의 가감산 명령의 추출 방법에 대한 1예의 설명도.
제37도 (b)는 몫비트의 추출 방법에 대한 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도의 명령 DIVOS R0, R2를 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제57도는 제53도의 명령 MOVT R3을 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제58도는 제53도의 명령 SUBC R0, R2를 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제59도는 제53도의 명령 DIVOS 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도의 명령 DIVOS R0, R4를 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제66도는 제53도의 명령 MOVT R0을 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제67도는 제53도의 명령 EOR R3, R0을 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제68도는 제53도의 명령 ROTCR R0을 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제69도는 제53도의 명령 DIVOS R1, R4를 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제70도는 제53도의 명령 ROTCR R4를 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제71도는 제53도의 명령 DIV1 R1, R4를 실행할때에 있어서의 제51도의 회로의 동작 설명도.
제72도는 제53도의 명령 SR16 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도의 동작에 대응하는 레지스터의 상태 설명도.
제79도 (L)는 제66도의 동작에 대응하는 레지스터의 상태 설명도.
제79도 (M)는 제67도의 동작에 대응하는 레지스터의 상태 설명도.
제79도 (N)는 제68도의 동작에 대응하는 레지스터의 상태 설명도.
제80도 (O)는 제69도의 동작에 대응하는 레지스터의 상태 설명도.
제80도 (P)는 제70도의 동작에 대응하는 레지스터의 상태 설명도.
제80도 (Q)는 제71도의 동작에 대응하는 레지스터의 상태 설명도.
제81도 (R)는 제72도의 동작에 대응하는 레지스터의 상태 설명도.
제81도 (S)는 제73도의 동작에 대응하는 레지스터의 상태 설명도.
제81도 (T)는 제74도의 동작에 대응하는 레지스터의 상태 설명도.
제82도는 제54도~제74도에 걸쳐서 설명한 부호화 제산 처리를 정리한 흐름도로서, (a)는 그 전체를 도시한 도면, (b)는 전처리의 처리를 도시한 도면.
제83도는 제82도의 제산1을 상세하게 도시한 흐름도로서, (a)는 제산1의 처리를 도시한 도면, (b)는 제산 스텝의 처리를 도시한 도면.
제84도는 제82도의 후처리를 상세하게 도시한 흐름도로서, (a)는 후처리의 처리를 정리한 흐름도, (b)는 몫보정의 처리를 도시한 도면.
제85도는 제84도의 후처리를 상세하게 도시한 흐름도로서, (a)는 제1의 잉여 보정 수단의 처리를 도시한 도면, (b)는 제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예의 설명도.
본 발명은 마이크로 컴퓨터 특히 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) 범용 레지스터 방식을 채용하는 마이크로 컴퓨터에 있어서, 명령 실행 수단에 공급되는 최대의 데이타어 길이보다도 비트수가 적은 고정 길이 명령 포맷을 채용하는 것이다.
(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비트 고정 길이 명령 포맷을 채용하는 경우에 비해서 프로그램 용량이 작게 된다. 즉, 명령의 종류를 적게 하는 것에 의해 명령의 실행을 고속화하고자 하는 RISC아키텍쳐에 있어서는 명령 셋트중에 미정의 오퍼레이션코드가 많게 되는 경향이 있고, 이때 명령 길이가 종래의 것에서 반감되면 프로그램 메모리의 이용 효율이 향상한다.
(3) 고정 길이 명령 포맷의 비트수가 데이타어 길이 보다 적더라도 이미디어트 데이타의 이용이나 절대 어드레스 지정에 제한을 미치지 않는 것, 한정된 비트수의 고정 길이 명령 포맷중에서 필요한 디스플레이스먼트등의 기술이 가능한 것, 메모리상에 있어서의 프로그램 배치의 미스얼라인먼트의 방지에 기여하는 것 및 서포트하는 명령의 내용이라는 점에서 코드 효율 또는 메모리 이용 효율을 한층 향상시키는 것등은 데이타어 길이보다도 적은 비트수의 고정 길이 명령 포맷을 채용하는 것에 따르는 고유의 각종 문제점을 해결한다.
(4) 상기한 부호화 제산을 위한 수단에 의하면, 피제수가 부인 경우에 피제수에서 피제수의 LSB의 비중을 갖는 1을 빼는 전보정이 실행되고, 계속해서 몫의 부호가 예측되고, 또 피제수 또는 부분 잉여의 부호와 제수의 부호의 배타적 논리합이 0인가 1인가에 따라서, 피제수 또는 부분 잉여에 제수가 가감산되고, 부분 잉여의 부호와 제수의 부호의 배타적 논리합을 몫비트로 하고, 또한, 몫이 부인 경우에 1의 보수의 몫을 2의 보수로 보정하고, 이와 같이 해서 몫이 구해진다.
(5) 상기 피제수가 부인 경우, 피제수의 LSB의 비중을 갖는 1을 상기 피제수에서 빼는 것은 모든 비트와 부호 비트를 1로 표현하도록 0을 표현하는 전처리와 등가로 된다. 이와 같은 전처리는 피제수가 부인 경우에 부분 잉여가 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(Driect Memory Access)컨트롤러이다. ROM(Read Only Memory)은 온칩에서 내장된 명령 메모리이며, 중앙 처리 장치 CPU의 명령(동작 프로그램)이나 정수 테이블등을 보유한다. RAM(Random Access Memory)은 온칩에서 내장된 데이타 메모리이며, 중앙 처리 장치 CPU의 작업 영역이나 데이타의 일차 기억 영역등으로서 이용된다. BSC는 버스 상태 컨트롤러이며, 마이크로 컴퓨터 MCU의 내부 및 외부에 대한 버스 액세스 제어를 실행한다. CACHE는 캐시 메모리이며, 중앙 처리 장치 CPU에 의한 명령의 액세스 패턴을 인식해서 가장 빈번하게 사용되는 것이 예상되는 명령을 유지해서 액세스 속도가 느린 외부 메모리에서 어플리케이션 프로그램 등을 리드해 가는 액세스 회수를 줄여서 처리의 고속화를 도모하기 위한 기억 장치이다. BURST/REFRESH는 연속 데이타 전송등에 대한 버스트 제어나 DRAM(Dynamic Random Access Momory)등에 대한 재생 제어를 실행하는 버스트/재생 장치이며, DRAM을 외부 메모리로서 사용할때의 고속 페이지 모드 액세스와 RAM의 재생등에 적용된다. edb는 포트 Port/Data를 거쳐서 외부 데이타 버스 EDB와 결합되는 내부 데이타 버스, eab는 포토 Pord/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, DMAC(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(Direct Memory Access Controller)에 관한 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 아키텍쳐에 있어서는 명령 셋트중에 미정의 오퍼레이션 코드가 많게 되는 경향이 있으며, 이때 명령 길이가 종래것에서 반감되면 프로그램 메모리의 이용 효율이 향상한다. 또, 데이타어 길이에 비해서 명령어 길이를 짧게 하는 것은 쌍방의 워드 길이가 같게 되는 경우에 비해서 고정 길이 명령 포맷의 비트열에 있어서 실질적으로 불필요한 비트 배열을 감소시켜, 이것이 프로그램 메모리의 이용 효율을 높게 한다. 따라서, 프로그램을 저장하기 위한 메모리의 이용 효율이 향상하고, 보오드상의 한정된 기억 용량의 메모리나 프로세서에 온칩된 프로그램 메모리를 사용하는 응용분야등에서는 시스템 구성시에 프로그램 메모리의 기억 용량이 부족하거나 메모리의 회로 규모를 크게 시키지 않을 수 없다는 문제점의 발생을 회피해서 시스템 코스트를 저감할 수가 있다.
또, 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에 포함되는 범용 레지스터 ROH, ROL,...,R15H, R15L중에서 어느것을 선택하는가의 지정에 이용된다. 또, 상기 명령 레지스터IR2에서 출력되는 레지스터 필드 RRRR, rrrr의 값은 일시 래치WBR0 및 WRB1을 거쳐서 라이트백 레지스터 디코더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에 공급되고, 이것에 의해 고속 제어ROM(Hardware Sequence Read Only Memory)HSC-ROM의 어드레스가 발견된다. 매핑-컨트롤블럭 MCB의 역할은 명령을 디코드해서 그 내용에 따라서 적절한 고속 제어 리드 온리 메모리MHSC-ROM의 엔트리 어드레스를 산출하는 것이다. 고속 제어 리드 온리 메모리HSC-ROM의 출력은 마이크로 명령 필드(Micro Code Field)MCF와 파이프 제어 필드(Pupe 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개의 범용 레지스터ROH, ROL,..., R15H, R15L중의 1개의 레지스터쌍을 선택하는 선택 신호를 생성해서 실행 유니트 EXEC에 공급한다.
메모리 인터페이스MIF는 중앙 처리 장치 CPU가 메모리를 액세스할 필요가 있는가 없는가, 그것이 리드인가 라이트인가등을 검출해서 메모리의 액세스에 필요한 신호를 출력한다. 또, 명령 페치/명령 레지스터 제어(Instruction Fectch&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도의 블럭 구성에서는 실행 유니트ESEC와는 다르게 기재되어 있지만, 제6도와 같이 실행 유니트EXEC에 포함되어도 좋다. 이미디어트 버퍼(Immediate Buffur)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 Regiser Low)는 인터럽트 벡터 영역의 베이스 어드레스의 저장 영역으로서 사용된다. GBRH(Global Base Register Low)는 I/O의 베이스 어드레스의 저장 레지스터로서 이용된다. BRH(Break Register 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 Low)은 메모리에 라이트 데이타를 넣기 위한 일시 레지스터이다. MABH(Memory Address Buffer High), MABL(Memory Address Buffer Low)는 메모리 액세스 할때 어드레스를 넣어 두는 일시 레지스터이다. MLTB(MULT V\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에 출력된다.
[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언어로 기술하면,
ANDM(int i)/*AND. B#imm:8, @R1*/
{
long temp;
tenp=(long)Read-Byte(r[1]);
tenp&=(long)i;
Write-Byte(R[1], tenp);
PC+=2;
}
로 된다. 이 기재를 참조하면, 마이크로 명령1의 ID(명령 디코드)단과 EX(연산 실행)단사이 및 마이크로 명령2의 μ-1F(마이크로 명령 페치)단과 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부동 소수점 규격에 일치한 단일 정밀도, 이중 정밀도 연산을 할당할 수도 있다.
[12] 분기 명령의 디스플레이스먼트 길이
제24도, 제25도, 제26도 및 제27도에는 샘플로서 추출한 각종 프로그램에 있어서의 분기 명령 및 점프 명령의 디스플레이스먼트 길이와 그 디스플레이스먼트 길이를 갖는 명령의 출현 빈도와의 관계가 표시된다. 제24도 및 제25도는 조건 분기 명령(분기명령) 및 무조건 분기 명령(분기 올웨이즈(always)명령)에 관한 것이고, 제6도는 서브 루틴 호출 명령에 관한 것이고, 제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등의 레지스터의 값과 상대 어드레스를 사용하는 방법을 채용한다.
이 이미디어트값의 처리를 실행하는 명령으로서는 예를들면 WP13도에 도시된 로드 명령으로서의 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에서 동작 내용을 나타낸 동작 설명은 특히 제한되지 않지만, 이하의 자원의 사용을 가정하고 있다.
unsinged char Read_Byte (unsingned long Addr);
unsingned short Read_Word (unsingned long Addr);
unsigned long Read_Long (unsingned long Addr);
어드레스 Addr 각각의 사이즈의 내용을 리턴한다.
(2n)번지 이외에서의 워드, (4n)번지 이외에서의 롱워드의 리드는 어드레스 에러로서 검출된다.
unsinged char Write_Byte (unsingned long Addr, unsigned long Data);
unsingned short Write_Word (unsingned long Addr, unsigned long Data);
unsigned long Write_Long (unsingned long Addr, unsigned long Data);
어드레스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 BR;
unsigned long VBR;
각 레지스터 본체인
#define SR (CR[0])
#define PR (CR[1])
#define GBR (CR[2])
레지스터의 고유명과 CRn 형식 표시의 대응
struct SR0 {
unsigned long dummy 0:22;
unsigned long M0:1;
unsigned long Q0:1;
unsigned long I0:4;
unsigned long dummy 2:1;
unsigned long D0:1;
unsigned long C0:1;
unsigned long T0:1;
};
SR의 구조의 정의
#define M ((*(struct SR0 *)(&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=롱워드
로 전개된다.
AND(가산) 명령
서식 ADD Rm, Rn
ADD #imm, Rn
설명 범용 레지스터 Rn의 내용과 Rm을 가산하고, 결과를 Rn에 저장한다. 범용 레지스터Rn와 8비트 이미디어트 데이타의 가산도 가능하다. 8비트 이미디어트 데이타는 32비트로 부호 확장되므로 감산과 겸용한다.
동작
ADD(long m, long n) / *ADD Rm, Rn */
{
R[n]+=R[m]
PC+=2;
ADDI(long i, long n) / *ADD #imm, Rn */
{
if ((i&0x80)==0) R[n]+=(0x000000FF & (long)i);
else R[n]+=(0xFFFFFF00 | (long)i);
PC+=2;
}
사용예 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
코드 MSB LSB
ADD r.R 0010RRRRrrrr00000
ADD #imm, R 0101RRRRiiiiiiii
ADDC(캐리를 갖는 가산) 명령
서식 ADDC Rm, Rn
설명 범용 레지스터 Rn의 내용과 Rm 및 C비트를 가산하고, 결과를 Rn에 저장한다. 연산의 결과에 의해 캐리가 C비트에 반영된다.
동작
ADDC(long m, long n) /*ADDC Rm, Rn */
{
unsigned long temp;
temp=R[n};
R[n]+=(R[m]+C);
if (temp>R[n]) C=1; else C=0;
PC+=2;
{
사용예 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'FFFFFFFF
; 실행후 C=1, R5=H'00000001
코드 MSB LSB
ADDC r.R 0010RRRRrrrr0010
ADDS(포화 기능을 갖는 가산)명령
서식 ADDS Rm, Rn
설명 범용 레지스터Rn의 내용과 Rm을 가산하고, 결과를 Rn에 저장한다. 오버플로우가 발생해도 결과는 H'7FFFFFFF~H'80000000의 범위로 제한된다. 이때, C비트가 셋트된다.
동작
ADDS(long m, long n) /*ADDS Rm, Rn */
{
long dest, src, ans;
if ((long)R[n]>=0) dest=0; else dest=1;
if ((long)R[m]>=0) src=0; else src=1;
src+=dest;
R[n]+=R[m];
if ((long)R[n]>=0) ans=0; else ans=1;
ans+=dest;
if (ans==1) {
if (src==0) {R[n]=0x7FFFFFFF; C=1;};
else C=0;
if (src==2) {R[n]=0x80000000; C=1;};
else C=0;
}
else C=0;
PC+=2;
}
사용예 ADDS R0, R1 ; 실행전 R0=H'00000001, R1=H'7FFF C=0
; 실행후 R1=H'7FFFFFFF,C=0
ADDS R1,R2 ; 실행전 R0=H' 00000002, R1=H'7FFF C=0
; 실행후 R1=H'7FFFFFFF, C=1
코드 MSB LSB
ADDS r.R 0010RRRRrrrr0011
ADDV(오버플로우를 갖는 가산)명령
서식 ADDV Rm, Rn
설명 범용 레지스터Rn내용과 Rm을 가산하고, 결과를 Rn에 저장한다. 오버플로우가 발생한 경우, C비트 셋트된다.
동작
ADDV(long m, long n) /*ADDV Rm, Rn */
{
long dest, src, ans;
if ((long)R[n]>=0) dest=0; else dest=1;
if ((long)R[m]>=0) src=0; else src=1;
src+=dest;
R[n]+=R[m];
if ((long)R[n]>=0) ans=0; else ans=1;
ans+=dest;
if (src==0 || src==2) {if (ans==1) C=1; else C=0;}
else C=0;
PC+=2;
}
사용예 ADDV R0, R1 ; 실행전 R0=H'00000001, R1=H'7FFFFFFE,
C=0
; 실행후 R1=H'7FFFFFFF,C=0
ADDV R0,R1 ; 실행전 R0=H' 00000002, R1=H'7FFFFFFE,
C=0
; 실행후 R1=H'80000000, C=1
코드 MSB LSB
ADDV r.R 0010RRRRrrrr0001
AND(논리곱)명령
서식
AND Rm, Rn
AND #imm, R0
AND. B #imm, @R1
설명 범용 레지스터Rn의 내용과 Rm의 논리곱을 취하고, 결과를 Rn에 저장한다. 특수형으로서 범용 레지스터R0과 제로 확장한 8비트 이미디어트 데이타의 논리곱, 또는 R1 상대에서 8비트 메모리와 8비트 이미 디어트 데이타의 논리곱이 가능하다.
주의 AND #imm, R0에서는 연산의 결과, R0의 상위 24비트는 항상 클리어된다.
동작
AND(long m, long n) /*AND Rm, Rn */
{
R[n]&=R[m];
PC+=2;
}
ANDI(long i) /*AND #imm, R0 */
{
R[0]&=(0x000000FF & (long)i);
PC+=2;
}
ANDM(long i) /*AND.B #imm, @R1 */
{
long temp;
temp=(long)Read_Byte(R[1]);
temp&=(0xFFFFFF00 | (long)i);
Write_Byte(R[1], temp);
PC+=2;
}
사용예 AND R0, R1 ; 실행전 R0=H'AAAAAAAA, R1=H'55555555
; 실행후 R1=H'00000000
AND # H'OF, R0 ; 실행전 R0=H'FFFFFFFF
; 실행후 R0=H'0000000F
AND.B # H'80,@R1 ; 실행전 @R1=H'A5
; 실행후 @R1=H'80
코드 MSB LSB
AND r.R 0001RRRRrrrr1001
AND #imm,R0 10001001iiiiiiii
AND.B #imm,@R1 10000001iiiiiiii
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에서 +256바이트로 된다. 분기지에 도달하지 않을때는 BRA명령 또는 JMP명령의 조합으로 대응한다.
동작
BC(long d) /*BC disp */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
if (C==1) PC=PC+(disp<<1)+4;
else PC+=2;
}
BF(long d) /*BF disp */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
if (T==0) PC=PC+(disp<<1)+4;
else PC+=2;
}
BT(long d) /*BT disp */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
if (T==1) PC=PC+(disp<<1)+4;
else PC+=2;
}
사용예 CLRT; ; 항상 T=0
BT TRGET_T ; T=0을 위해 분기하지 않는
BF TRGET_F ; T=0을 위해 TRGET_F로 분기한다.
NOP
NOP ; BF명령에서 분기지 어드레스 계산에
사용하는 PC의 위치
TRGET_F ; BF명령의 분기지
코드
MSB LSB
BC disp 11001100dddddddd
BF disp 11001010dddddddd
BF disp 11001000dddddddd
BRA(무조건 분기)명령
서식 BRA disp
설명 무조건의 지연 분기 명령이다. 분기지는 PC에 디스플레이스먼트를 가한 어드레스이다. PC는 본 명령의 2명령후의 선두 어드레스이다. 디스플레이스먼트는 1비트 왼쪽으로 시프트되어 13비트이므로, 분기지와의 상대 거리는 -4096에서 +4094바이트로 된다. 분기지에 도달하지 않을때는 JMP명령으로의 변경이 필요한다. 이때, 분기지 어드레스를 MOV명령로 레지스터에 전송해 둘 필요가 있다.
주의 지연 분기 명령이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령사이에 인터럽션은 접수되지 않는다. 직후의 명령이 분기 명령일때, 부당 명령으로서 인식된다.
동작
BRA(long d) /*BRA disp */
{
unsigned long temp;
long disp;
if ((d&0x800)==0 disp=(0x00000FFF & d);
else disp=(0xFFFFF000 | d);
temp=PC;
PC=PC+(disp<<1)+4;
Delay_Slot(temp+2);
}
사용예 BRA TRGET ; TRGET로 분기한다.
ADD R0, R1 ; 분기에 앞서 실행된다.
NOP ; BRA 명령에 의해 분기지 어드레스
계산에 사용하는 PC의 위치
TRGET: ; BRA 명령의 분기지
코드
MSB LSB
BRA disp 1010dddddddddddd
BRK(소프트 웨어 브레이크)명령
서식 BRK
설명 브레이크 예외 처리를 개시한다. 즉, 외부 디바이스에 아크놀리지 신호를 리틴한후, PC를 BR에 릴리이즈하고, 소정의 벡터에 따른 브레이크 인터럽션 루틴으로 분기한다. PC는 본 명령의 선두 어드레스이다. 벡터 어드레스의 계산에 VBR의 내용은 관계없다. RTB와 조합해서 브레이크 루틴콜에 사용한다.
주의 본 명령은 인터럽션을 접수하지 않는다. BR은 브레이크 단자에 의한 하드 웨어 브레이크와 공용된다. 따라서, 브레이크 처리중의 브레이크 재요구는 피해야 할 것이다. PC는 BR로 보호되지만, SR은 보호되지 않는다. 필요하면 STC명령으로 레지스터 또는 메모리로 릴리이즈하지 않으면 안된다.
동작 BRK( ) /*BRK*/
{
BR=PC-4;
PC=Read_Long(BRKVEC)+4;
}
사용예 CMP/EQ R0, R1;
BT _TRUE ; R0≠R1일때 브레이크한다.
BRK ; 브레이크 루틴에서의 리턴지이다.
BREAK:
......
MOV R0, R0 ; 브레이크 루틴의 입구
RTB ; 상기 BRK명령로 되돌아간다.
코드
MSB LSB
BRK 0000000000000000
BSR(프로시쥬어콜)명령
서식 BSR disp
설명 지정된 어드레스의 프로시쥬어로 분기한다. PC의 내용을 PR로 릴리이즈하고, PC에 디스플레이스먼트를 가한 어드레스로 분기한다. PC는 본 명령의 2명령후의 선두 어드레스이다. 디스플레이스먼트는 1비트 왼쪽으로 시프트되어 13비트이므로, 분기지와의 상대 거리는 -4096에서 +4094바이트로 된다. 분기지에 도달하지 않은 경우에는 JSR명령으로의 변경이 필요하다. 이때, 분기지 어드레스를 MOV명령으로 레지스터에 전송해 둘 필요가 있다. RTS와 조합해서 프로시쥬어콜에 사용한다.
주의 자연 분기 명령이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령사이에 인터럽션은 접수되지 않는다. 직후의 명령이 분기 명령일때, 부당 명령으로서 인식된다.
동작
BSR(long d) / *BSR disp */
{
long disp;
if ((d&0x800)==0) disp=(0x00000FFF & d);
else disp=(0xFFFFF000 | d);
PR=PC;
PC=PC+(disp<<1)+4;
Delay_Slot(PR+2);
}
사용예 BSR TRGET ; TRGET로 분기한다.
MOV R3, R4 ; 분기에 앞서서 실행된다.
ADD R0, R1 ; BSR 명령에서 분기지 어드레스
계산에 사용하는 PC의 위치 프로시
...... 쥬어에서의 리턴지이다.
......
TRGET ; 프로시쥬어의 입구
MOV R2, R3 ;
RTS ; 상기 ADD 명령으로 되돌아간다.
MOV #1, R0 ; 분기에 앞서서 실행된다.
코드 MSB LSB
BSR disp 1110dddddddddddd
CLRC(C비트 클리어)명령
서식 CLRC
설명 SR의 비트를 클리어한다.
동작 CLRC() /* CLRC*/
{
C=0;
PC+=2;
{
사용예 CLRC ; 실행전 C=1
; 실행후 C=0
코드 MSB LSB
CLRC 0000000000101001
CLRT(T비트 클리어)명령
서식 CLRT
설명 SR의 T비트를 클리어한다.
동작 CLRT() /*CLRT*/
{
T=0;
PC+=2;
}
사용예 CLRT ; 실행전 T=1
; 실행후 T=0
코드 MSB LSB
CLRT 0000000000101000
CMP/cond(오퍼런드 비교)명령
서식 CMP/cond Rm, Rn
설명 범용 레지스터Rn과 Rm을 비교하고, 그 결과, 지정된 조건(cond)가 성립하고 있으면 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 어느것인가의 바이트가 같을때
동작
CMPEQ(long m, long n) /*CMP_EQ Rm, Rn */
{
if (R[n]==R[m]) T=1; else T=0;
PC+=2;
}
CMPGE(long m, long n) /*CMP_GE Rm, Rn */
{
if ((long)R[n]>=(long)(R[m]) T=1; else T=0;
PC+=2;
}
CMPGT(lon m, long n) /*CMP_GT Rm, Rn */
{
if ((long)R[n]>(long)R[m]) T=1; else T=0;
PC+=2;
}
CMPHI(long m, long n) /*CMP_HI, Rm, Rn */
{
if ((unsigned long)R[n]>
(unsigned long)R[m]) T=1;
else T=0;
PC+=2;
}
CMPHS(long m, long n) /* CMP_HS Rm, Rn */
{
if((unsigned long) R[n]>=
(unsigned long) R[m]) T=1;
else T=0;
PC+=2;
}
CMPPL(long n) /* CMP_PL Rn */
{
if ((long)R[n]>0) T=1; else T=0;
PC+=2;
}
CMPPZ(long n) /* CMP_PZ Rn */
{
if ((logn)R[n]>=0) T=1; else T=0;
PC+=2;
}
CMPSTR(long m, long n) /* CMP_STR Rm, Rn */
{
unsigned long temp;
long HH, HL, LH, LL;
temp=R[n]^R[m];
HH=(temp&0xFF000000)>>12;
HL=(temp&0x00FF0000)>>8;
LH=(temp&0x0000FF00)>>4;
LL=temp&0x000000FF;
HH=HH&&HL&&LH&&LL;
if (HH==0) T=1; else T=0;
PC+=2;
}
사용예 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/SRT R2, R3 ; R2="ABCD", R3="XYCZ"
BT TRGET_T ; T=1 등이므로, 분기한다.
코드 MSB LSB
CMP/EQ r, R 0001RRRRrrrr0000
CMP/GE r, R 0001RRRRrrrr0011
CMP/GT r, R 0001RRRRrrrr0111
CMP/HI r, R 0001RRRRrrrr0110
CMP/HS r, R 0001RRRRrrrr0010
CMP/PL R 0100RRRR00011101
CMP/PZ R 0100RRRR00011001
CMP/STR r, R 0010RRRRrrrr1100
DIVOS/DIVOU/DIVI(스텝 제산) 명령
서식
DIV1 Rm, Rn
DIVOS Rm, Rn
DIVOU
설명 범용 레지스터 Rn의 내용 32비트를 Rm의 내용에서 1스텝 제산하고, 결과의 1비트를 SR의 C비트에 저장한다. DIVOS는 부호화 제산용의 초기화 명령에서 피제수(Rn)의 MSB를 Q비트에, 제수(Rm)의 MSB를 M비트에, M비트와 Q비트의 EOR을 C비트에 저장한다. DIVOU는 부호 없음 제산용의 초기화 명령으로 M/Q, C비트를 0에 클리어한다. DIV1을(필요하면 ROTCL과 조합해서)제수의 비트수분 반복하는 것에 의해서 몫을 얻는다. 이 반복중은 지정한 레지스터와 SR의 M/Q/C비트에 중간 결과가 저장된다. 이들을 불필요하게 소프트웨어에 의해 라이트하면 연산 결과는 보증되지 않는다. 제산의 시퀀스는 다음 사용예를 참조로 할 수가 있다. 제로 제산과 오버플로우의 검출 및 잉여의 연산은 준비되어 있지 않다.
동작
DIVOU() /*DIVOU*/
{
M=Q=C=0;
PC+=2
}
DIVOS(long m, long n) /*DIVOS Rm, Rn*/
{
if ((R[n] & 0x80000000)==0) Q=0;
else Q=1;
if ((R[m] & 0x80000000)==0) M=0;
else M=1;
C=! (M==Q);
PC+=2
}
DIV1(long m, long n) /*DIV1 Rm, Rn*/
{
unsigned long tmp0;
unsigned char old_q. tmp1;
old_q=0;
Q=(unsigned char)((0x80000000 & R[n])!=0);
R[n]<<=1;
R[n]|=(unsigned long)C;
switch (old_q){
case 0:
switch (M) {
case 0:
tmp0=R[n];
R[n]-=R[m];
tmp1=(R[n]>tmp0);
switch (Q){
case 0:
Q=tmp1;
break:
case 1;
Q=(unsigned char)(tmp1==0);
break;
}
break;
case 1;
tmp0=R[n];
R[n]+=R[m];
tmp1=(R[n]<tmp0);
switch (Q){
case 0:
Q=(unsigned char)(tmp1==0);
break;
case 1;
Q=tmp1;
break;
}
break;
}
break;
case 1;
switch(M){
case 0:
tmp0=R[n];
R[n]+=R[m];
tmp1=(R[n]<tmp0)>;
switch (Q){
case 0:
Q=tmp1;
break;
case 1;
Q=(unsigned char)(tmp1==0);
break;
}
break;
case 1;
tmp0=R[n];
R[n]-=R[m];
tmp1=(R[n]>tmp0)>;
switch (Q){
case 0:
Q=(unsigned char)(tmp1==0);
break;
case 1;
Q=tmp1;
break;
}
break;
}
break;
}
C=(Q==M);
PC+=2;
}
사용예1 R1(32bits)÷R0(16bits)=R0(16bits);부호 없음
SL16 R0 ; 제수를 상위 16bit, 하위 16bit를 0으로 설정
TEST R0, R0 ; 제로 제산 체크
BT ZERO_DIV ;
CMP/HS R0, R1 ; 오버플로우 체크
BT OVER_DIV ;
DIVOU ; 플래그의 초기화
.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 ;
DIVOU ; 플래그의 초기화
.arepeat 32 ;
ROTCL R2 ; 32회 반복
DIV1 RO, R1 ;
.aendr ;
ROTCL R2 ; R2=몫
사용예3 R1(16bits)÷R0(16bits)=R1(16bits);부호화
SL16 R0 ; 제수를 상위 16bit, 하위16bit를 0으로 설정
EXTS. W R1, R1 ; 피제수는 부호 확장해서 32bit
EOR R2, R2 ; R2=0
MOV R1, R3 ;
ROTCL R3 ;
SUBC R2, R1 ; 피제수가 부일때, -1 한다.
DIVOS 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)=R2(32bits) ; 부호화
EOR R3, R3 ;
MOV R2, R4 ;
ROTCL R4 ;
SUBC R1, R1 ; 피제수는 부호 확장해서 64bit
(R1 : R2)
SUBC R3, R2 ; 피제수가 부일때, -1한다.
DIVOS R0, R1 ; 플래그의 초기화
.arepeat 32 ;
ROTCL R2 ; 32회 반복
DIV1 R0, R1 ;
.aendr ;
ROTCL R2 ; R2=몫 (1의 보수 표현)
ADDC R3, R2 ; 몫의 MSB가 1일때, +1에서 2의 보수
표현으로 변환
; R2=몫 (2의 보수 표현)
코드
MSB LSB
DIV1 r.R 0001RRRRrrrr1100
DIVOS r.R 0001RRRRrrrr1101
DIVOU 0000000000101010
EOR(배타적 논리곱) 명령
서식
EOR Rm, Rn
EOR #imm, R0
EOR.B #imm, @R1
설명 범용 레지스터Rn의 내용과 Rm의 배타적 논리합을 취하고, 결과를 Rn에 저장한다. 특수형으로서 범용 레지스터R0과 제로 확장한 8비트 이미디어트 데이타와의 배타적 논리합 또는 R1상대에서 8비트 메모리와 8비트 이미디어트 데이타와의 배타적 논리합이 가능하다.
동작
EOR(long m, long n) /* EOR Rm, Rn */
{
R[n]^=R[m];
PC+=2;
}
EORI(long i) /* EOR #imm, R0 */
{
R[0]^=(0x000000FF & (long)i);
PC+=2;
}
EORM(long i) /* EOR.B #imm,@R1 */
{
long temp;
temp(long)Read_Byte(R[1]);
temp^=(0x000000FF & (long)i);
Write_Byte(R[1], temp);
PC+=2;
}
사용예 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
코드 MSB LSB
EOR r.R 0001RRRRrrrr1010
EOR #imm, R0 10001010iiiiiiii
EOR. B #imm, @R1 10000010iiiiiiii
EXTS(부호 확장)명령
서식
EXTS.B Rm, Rn
EXTS. W Rm, Rn
설명 범용 레지스터Rm의 내용을 부호확장해서, 결과를 Rn에 저장한다. 바이트 지정일때, Rm의 비트(7)의 내용을 비트8에서 비트(31)로 카피한다. 워드 지정일때, Rm의 비트(15)의 내용을 비트16에서 비트31로 카피한다.
동작
EXTSB(long m, long n) /*EXTS. B Rm, Rn */
{
R[n]=R[m];
if ((R[m]&0x00000080)==0) R[n]&=0x000000FF;
else R[n] | =0xFFFFFF00;
PC+=2;
}
EXTSW(long m, long n) /*EXTS. W Rm, Rn */
{
R[n]=R[m];
if ((R[m]&0x00008000)==0) R[n]&=0x0000FFFF;
else R[n] | =0xFFFF0000;
PC+=2;
}
사용예 EXTS.B R0, R1 ; 실행전 R0=H'00000080
; 실행후 R1=H'FFFFFF80
EXTS. W R0, R1 ; 실행전 R0=H'00008000
; 실행후 R1=H'FFFF8000
코드 MSB LSB
EXTS. B r,R 0110RRRRrrrr0010
EXTS.W r,R 0110RRRRrrrr0011
EXTU(제로 확장) 명령
서식
EXTU. B Rm, Rn
EXTU. W Rm, Rn
설명 범용 레지스터Rm의 내용을 제로 확장해서 결과를 Rn에 저장한다. 바이트 지정일때, Rn의 비트8에서 비트31로 0이 들어간다. 워드 지정일때, Rn의 비트16에서 비트31로 0이 들어간다.
동작
EXTUB(long m, long n) /*EXTU.B Rm, Rn */
{
R[n]=R[m];
R[n]&0x000000FF;
PC+=2;
}
EXTUW(long m, long n) /*EXTU.W Rm, Rn */
{
R[n]=R[m];
R[n]&0x0000FFFF;
PC+=2;
}
사용예 EXTU.B R0, R1 ; 실행전 R0=H'FFFFFF80
; 실행후 R1=H'00000080
EXTU. W R0, R1 ; 실행전 R0=H'FFFF8000
; 실행후 R1=H'00008000
코드 MSB LSB
EXTU. B r,R 0110RRRRrrrr0000
EXTU.W r,R 0110RRRRrrrr0001
JMP(무조건 점프) 명령
서식 JMP @Rn
설명 지정된 어드레스에 무조건적으로 지연 분기한다. 분기지는 범용 레지스터Rn의 내용의 32비트 데이타로 표시되는 어드레스이다.
주의 지연 분기 명령이므로, 본 명령의 직후의 명령이 분기에 앞서서 실행된다. 본 명령과 직후의 명령사이에 인터럽션은 접수되지 않는다. 직후의 명령이 분기 명령일때 부당 명령으로서 인식된다.
동작 JMP(long n) /* JMP @Rn */
{
unsigned long temp;
temp=Pc;
PC=R[n]+4;
Delay_Slot(temp+2);
}
사용예 .align 4
JMP_TABLE: .data.1 TRGET ; 점프 테이블
MOV JMP_TABLE, R0 ; R0=TRGET의 어드레스
JMP @R0 ; TRGET로 분기한다.
MOV R0, R1 ; 분기에 앞서서 실행된다.
.........
TRGET: ADD #1, R1 ; 분기지
코드 MSB LSB
JMP @R 0100RRRR00001010
JSR(프로시쥬어콜)명령
서식 JSR @Rn
설명 지정된 어드레스의 프로시쥬어로 분기한다. PC의 내용을 PR로 릴리이즈하고, 범용 레지스터Rn의 내용의 32비트 데이타로 표시되는 어드레스로 분기한다. PC는 본 명령의 2명령후의 선두 어드레스이다. RTS와 조합해서 프로시쥬어콜에 사용한다.
주의 지연 분기 명령이므로, 본 명령 직후의 명령이 분기에 앞서서 실행된다. 본 명령과 직후의 명령사이에 인터럽션은 접수되지 않는다. 직후의 명령이 분기 명령일때, 부당 명령으로서 인식된다.
동작
JSR(long n) /* JSR @Rn */
{
PR=PC;
PC=R[n]+4;
Delay_Slot(PR+2);
}
사용예 .align 4
JSR_TABLE: .data.1 TRGET ; 점프 테이블
MOV JSR_TABLE, R0 ; RO=TRGET의 어드레스
JSR @R0 ; TRGET로 분기한다.
EOR R1, R1 ; 분기에 앞서서 실행된다.
ADD R0, R1 ; 프로시쥬어에서의 리턴지이다.
...........
TRGET: NOP ; 프로시쥬어의 입구
MOV R2, R3 ;
RTS ; 상기 ADD 명령으로 되돌아간다.
MOV #70, R1 ; 분기에 앞서서 실행된다.
코드 MSB LSB
JMP @R 0100RRRR00001011
LDC(CR전송)명령
서식
LDC Rm, CRn
LDC.L @Rm+, CRn
설명 소스, 오퍼런드를 컨트롤 레지스터CRn에 저장한다.
주의 본 명령은 인터럽션을 접수하지 않는다.
동작
LDC(long m, long n) /* LDC Rm, CRn */
{
switch (n) {
case 0 : SR=R[m]; PC+=2; break;
case 1 : PR=R[m]; PC+=2; break;
case 2 : GBR=R[m]; PC+=2; break;
default:Error("Illegal CR number.");
break;
}
}
LDCM((long m, long n) /* LDC. L @Rm, CRn */
{
switch (n) {
case 0 :SR=Read_Long(R[m]) ; R[m]+=4;
PC+=2; break;
case 1 : PR=Read_Long(R[m]) ; R[m]+=4;
PC+=2; break;
case 2 : GBR=Read_Long(R[m]); R[m]+=4;
PC+=2; break;
default:Error("Illegal CR number.");
break;
}
}
사용예 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
코드 MSB LSB
LDC R,cr 0100RRRRrrrr0010
LDC. L @ R+, cr 0100RRRRrrrr0001
LDBR(BR전송)명령
서식 LDBR
설명 범용 레지스터R0의 내용을 컨트롤 레지스터 VBR에 저장한다.
주의 본 명령은 인터럽션을 접수하지 않는다.
동작 LDBR() /* LDBR */
{
BR=R[0]
PC+=2;
}
사용예 LDBR ; 실행전 R0=H'12345678, BR=H'00000000
; 실행후 BR=H'12345678
코드 MSB LSB
LDBR 0000000000100001
LDVR(VBR전송) 명령
서식 LDVR
설명 범용 레지스터R0의 내용을 컨트롤 레지스터 VBR에 저장한다.
주의 본 명령은 인터럽션을 접수하지 않는다.
동작 LDVR() /* LDVR */
{
VBR=R[0]
PC+=2;
}
사용예 LDVR ; 실행전 R0=H'FFFFFFFF,VBR=H'00000000
; 실행후 VBR=H'FFFFFFFF
코드 MSB LSB
LDVR 0000000000001011
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로 된다. 본 명령의 테이블 액세스는 명령 캐시의 대상으로 된다.
동작 MOV1(long i, long n) /* MOV #imm, Rn */
{
if ((i&0x80)==0) R[n]=(0x000000FF & (long)i);
else R[n]=(0xFFFFFF00 | (long)i);
PC+=2;
}
MOVWI (long m, long n) /* MOV.W @(disp, PC), Rn*/
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
R[n]=(long) Read_Word((PC+(disp<<1));
if ((R[n]&Ox8000)==0) R[n]&=Ox0000FFFF;
else R[n]|=(0xFFFF0000;
PC+=2;
}
MOVLI(long d, long n) /* MOV.L @(disp,PC),Rn */
{
long disp;
if ((d&0x80==0) disp=(0x000000FF & (long)d;
else disp=(0xFFFFFF00 | (long)d);
R[n]=Read_Long((PC&0xFFFFFFFC)+(disp<<2));
PC+=2;
}
사용예 어드레스
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의 위치
.align 4 ;
100C IMM: .data.1 H'12345678
1010 .data.w H'9ABC
코드 MSB LSB
MOV #imm.R 1101RRRRiiiiiiii
MOV.W @(disp.PC)R 1001RRRRdddddddd
MOV.L @(disp, PC)R 1011RRRRdddddddd
MOV(스택 데이타 전송)명령
서식
MOV.L @(disp, Rm), Rn
MOV.L Rm, @(disp, Rn)
설명 소스 오퍼런드를 디스티네이션으로 전송한다. 메모리 오퍼런드는 스택 프레임에 존재하므로 데이타 사이즈는 롱워드로 한정된다. 따라서 디스플레이스먼트는 2비트 왼쪽으로 시프트 되어 6비트이므로, -32에서 +28바이트를 지정할 수 있다. 메모리 오퍼런드에 도달하지 않을때는 일반적인 MOV명령을 사용한다. 단, 사용하는 레지스터가 고정되어 있는등의 제한이 있다.
동작
MOVL4(long m, long d, long n)
/* MOV.L @(disp,Rm), Rn */
{
long disp;
if ((d&0x8==0) disp=(0x0000000F & (long)d;
else disp=(0xFFFFFFF0 | (long)d);
R[n]=Read_Long(R[m]+(disp<<2));
PC+=2;
}
MOVS4(long m, long d, long n)
/* MOV.L @(disp,Rn) */
{
long disp;
if ((d&0x8==0) disp=(0x0000000F & (long)d;
else disp=(0xFFFFFFF0 | (long)d);
Write_Long)(R[n]+disp<<2),R[m]);
PC+=2;
}
사용예 MOV.L @(2, R0), R1 ; 실행전 @(R0+8)=H'12345670
; 실행후 R1=@H'12345670
MOV.L R0, @(-1, R1) ; 실행전 R0=H'FFFF7F80
; 실행후 @(R1-4)=H'FFFF7F80
코드 MSB LSB
MOV.L @(disp, r), R 0111RRRRrrrrdddd
MOV.L r,@(disp, R) 0011RRRRrrrrdddd
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을 참조하고자 하여도 로드 명령의 실행 완료까지 대기 된다.
다음의 ①②에서 대응되도록 명령의 순서 변화에 의한 최적화가 필요하다.
MOV.B @(12,GBR),R0 MOV.B @(12,GBR),R0
AND #80,R0 →② ① → ADD #20,R1
ADD #20,R1 →① ② → AND #80,R0
동작
MOVBLG(long d) /* MOV.B @(disp,GBR),R0 */
{
long disp;
if ((d&0x08==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
R[0]=(long) Read_Byte(GBR+disp);
if ((R[0]&0x80)==0) R[0]&=0x000000FF;
else R[0] | 0xFFFFFF00;
PC+=2;
}
MOVWLG(long d) /* MOV.W @(disp,GBR),R0 */
{
long disp;
if ((d&0x80==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
R[0]=(long) Read_Byte(GBR+(disp<<1));
if ((R[0]&0x8000)==0) R[0]&=0x0000FFFF;
else R[0]1=0xFFFF0000;
PC+=2;
}
MOVLLG(long d) /* MOV.L @(disp,GBR),R0 */
{
long disp;
if ((d&0x80==0) disp=(0x000000FF & (long)d;
else disp=(0xFFFFFF00 | (long)d);
R[0]=Read_Long(GBR+(disp<<2));
PC+=2;
}
MOVBSG(long d) /* MOV.B R0, @(disp,GBR) */
{
long disp;
if ((d&0x80==0) disp=(0x000000FF & (long)d;
else disp=(0xFFFFFF00 | (long)d);
Write_Byte(GBR+disp, R[0]);
PC+=2;
}
MOVWSG(long d) /* MOV.W R0, @(disp,GBR) */
{
long disp;
if ((d&0x80==0) disp=(0x000000FF & (long)d;
else disp=(0xFFFFFF00 | (long)d);
Write_Byte(GBR+disp<<1, R[0]);
PC+=2;
}
MOVLSG(long d) /* MOV.L R0, @(disp,GBR) */
{
long disp;
if ((d&0x80==0) disp=(0x000000FF & (long)d;
else disp=(0xFFFFFF00 | (long)d);
Write_Word(GBR+disp<<2), R[0]);
PC+=2;
}
사용예 MOV.L @(2,GBR),R0 ; 실행전 @(GBR+8)=H'12345670
; 실행후 R0=@H'12345670
MOV.B R0,@(-1,GBR) ; 실행전 R0=H'FFFF7F80
; 실행후 @(GBR-1)H'FFFF7F80
코드 MSB LSB
MOV @(disp,GBR),RO 110011SSdddddddd
MOV R0,@(disp,GBR) 100011SSdddddddd
사이즈
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데이타 전송 명령과 마찬가지로 다음의 ①②에서 대응되도록 명령의 순서 변화에 의해서 최적화가 가
능하다.
MOV.B @(12,R1),R0 MOV.B @(12,R1),R0
AND #80,R0 →② ① → ADD #20,R1
ADD #20,R1 →① ② → AND #80,R0
동작
MOV(long m, long n) /* MOV Rm, Rn */
{
R[n]=R[m];
PC+=2;
}
MOVBL(long m, long n) /* MOV.B @Rm, Rn */
{
R[n]=(long)Read_Byte(R[m]);
if ((R[n]&0x80==0) R[n]&=0x000000FF;
else R[n] | =0xFFFFFF00;
PC+=2;
}
MOVWL(long m, long n) /* MOV.W @Rm, Rn */
{
R[n]=(long)Read_Word(R[m]);
if ((R[n]&0x8000)==0) R[n]&=0x0000FFFF;
else R[n] | =0xFFFF0000;
PC+=2;
}
MOVLL(long m, long n) /* MOV.L @Rm, Rn */
{
R[n]=(long)Read_Long(R[m]);
PC+=2;
}
MOVBS(long m, long n) /* MOV.B Rm, @Rn */
{
Write_Byte(R[n], R[m]);
PC+=2;
}
MOVWS(long m, long n) /* MOV.W Rm, @Rn */
{
Write_Word(R[n], R[m]);
PC+=2;
}
MOVLS(long m, long n) /* MOV.L Rm, @Rn */
{
Write_Long(R[n], R[m]);
PC+=2;
}
MOVBP (long m, long n) /* MOV.B @Rm+,Rn */
{
R[n]=(long)Read_Byte(R[m]);
if ((R[n]&0x80)==0) R[n]&=0x000000FF;
else R[n] | =0xFFFFFF00;
if (n!=m) R[m]+=1;
PC+=2;
}
MOVWP (long m, long n) /* MOV.W @Rm+,Rn */
{
R[n]=(long)Read_Word(R[m]);
if ((R[n]&0x8000)==0) R[n]&=0x0000FFFF;
else R[n] | =0xFFFF0000;
if (n!=m) R[m]+=2;
PC+=2;
}
MOVLP (long m, long n) /* MOV.L @Rm+,Rn */
{
R[n]=(long)Read_Long(R[m]);
if (n!=m) R[m]+=4;
PC+=2;
}
MOVBM (long m, long n) /* MOV.B Rm,@-Rn */
{
Write_Byte(R[n]-1,R[m]);
R[n]-=1;
PC+=2;
}
MOVWM (long m, long n) /* MOV.W Rm,@-Rn */
{
Write_Word(R[n]-2,R[m]);
R[n]-=2;
PC+=2;
}
MOVLM (long m, long n) /* MOV.L Rm,@-Rn */
{
Write_Long(R[n]-4,R[m]);
R[n]-=4;
PC+=2;
}
MOVBL8 (long d) /* MOV.B @(disp, R1), R0 */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
R[0]=(long)Read_Byte(R[1]+disp);
if ((R[0]&0x80)==0) R[0]&=0x000000FF;
else R[0] | =0xFFFFFF00;
PC+=2;
}
MOVWL8 (long d) /* MOV.W @(disp, R1), R0 */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
R[0]=(long)Read_Word(R[1]+disp);
if ((R[0]&0x8000)==0) R[0]&=0x0000FFFF;
else R[0] | =0xFFFF0000;
PC+=2;
}
MOVLL8 (long d) /* MOV.L @(disp, R1), R0 */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
R[0]=Read_Long(R[1]+disp<<2);
PC+=2;
}
MOVBS8 (long d) /* MOV.B RO,@(disp,R1) */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
Write_Byte(R[1]+disp,R[0]);
PC+=2;
}
MOVWS8 (long d) /* MOV.W @(disp, R1) */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
Write_Word(R[1]+(disp<<1), R[0]);
PC+=2;
}
MOVLS8 (long d) /* MOV.L Ro,@(disp, R1) */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
Write_Long(R[1]+(disp<<2), R[0]);
PC+=2;
}
MOVBL1(long m, long n) /* MOV.B @(Rm, R1),Rn */
{
R[n]=(long)Read_Byte(R[m]+R[1]);
if ((R[n]&0x80)==0) R[n]&=0x000000FF;
else R[n] | =0xFFFFFF00;
PC+=2;
}
MOVWL1(long m, long n) /* MOV.W @(Rm, R1),Rn */
{
R[n]=(long)Read_Word(R[m]+R[1]);
if ((R[n]&0x8000)==0) R[n]&=0x0000FFFF;
else R[n] | =0xFFFF0000;
PC+=2;
}
MOVLL1(long m, long n) /* MOV.L @(Rm, R1), Rn */
{
R[n]=(long)Read_Long(R[m]+R[1]);
PC+=2;
}
MOVBS1(long m, long n) /* MOV.B Rm,@(Rn, R1) */
{
Write_Byte(R[n]+R[1],R[m]);
PC+=2;
}
MOVWS1(long m, long n) /* MOV.W Rm.@(Rn, R1) */
{
Write_Word(R[n]+R[1],R[m]);
PC+=2;
}
MOVLS1(long m, long n) /* MOV.L Rm.@(Rn, R1) */
{
Write_Long(R[n]+R[1],R[m]);
PC+=2;
}
사용예 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 ; 실행전 R0=H'00000004,R1=H'10000000.
; 실행후 R0=@H'10000004
MOV.W @(H'04,R1), R0 ; 실행전 R1=H'10000000
; 실행후 R0=H'10000004
코드 MSB LSB
MOV r,R 0110RRRRrrrr1000
MOV @r,R 0110RRRRrrrr10SS
MOV r,@R 0010RRRRrrrr10SS
MOV @r+,R 0110RRRRrrrr11SS
MOV r,@-R 0010RRRRrrrr11SS
MOV @(r,R1),R 0000RRRRrrrr01SS
MOV r,@(R,R1) 0000RRRRrrrr11SS
MOV @(disp,R1),R0 110001SSdddddddd
MOV R0,@(disp,R1) 100001SSdddddddd
단, SS는 사이즈이며, 01=바이트,
10=워드,
11=롱워드이다.
MOVA(실효 어드레스 데이타 전송)명령
서식 MOVA @ (disp,PC),R1
설명 범용 레지스터R1에 소스 오퍼런드의 실효 어드레스를 저장한다. 디스플레이스먼트는 2비트 왼쪽으로 시프트되어 10비트이므로, 오퍼런드와의 상대 거리는 -512에서 +508바이트로 된다. PC는 본 명령의 2명령후의 선두 어드레스이지만, PC의 하위 2비트는 B'00로 보정된다. 따라서, 소스 오퍼런드는 4바이트 경계에 배치할 필요가 있다.
주의 본 명령이 지연 분기 명령의 직후에 배치되어 있을때, PC는 분기지의 선두 어드레스+2로 된다.
동작
MOVA(long d) /* MOVA @(disp,PC),R1 */
{
long disp;
if ((d&0x80)==0) disp=(0x000000FF & (long)d);
else disp=(0xFFFFFF00 | (long)d);
R[1]=(PC&0xFFFFFFFC)+(disp<<2);
PC+=2;
}
사용예 어드레스 .align 4
1000 STR:.sdata "XYZP12"
1006 MOVA STR,R1;STR의 어드레스←R1
1008 MOV.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에 저장되어야할 어드레스
코드 MSB LSB
MOVA @(disp,PC),R1 11001011dddddddd
MULS(부호의 승산)명령
서식MULS Rm, Rn
설명 범용 레지스터Rn내용과 Rm을 16비트로 승산하고, 결과의 32비트를 Rn에 저장한다. 연산은 부호화 산술연산으로 실행한다.
동작 MULS(long m, long n) /* MULS Rm, Rn */
{
R[n]=((long)(short)R[n]*(long)(short)R[m]);
PC+=2;
}
사용예 MULS R0,R1 ; 실행전 R0=H'FFFFFFFE,R1=H'00005555
; 실행후 R1=H'FFFF5556
코드 MSB LSB
MULS r,R 0001RRRRrrrr1111
MULU(부호 없음 승산)명령
서식 MULU Rm, Rn
설명 범용 레지스터Rn의 내용과 Rm을 16비트로 승산하고, 결과의 32비트를 Rn에 저장한다. 연산은 부호없음 산술 연산으로 실행한다.
동작 MULU(long m, long n) /* MULU Rm,Rn */
R[n]=((unsigned long)(unsigned short)R[n]*
(unsigned long)(unsigned short)R[m]);
PC+=2;
}
사용예 MULU R0,R1 ; 실행전 R0=H'00000002, R1=H'FFFFAAAA
; 실행후 R1=H'00015554
코드 MSB LSB
MULU r,R 0001RRRRrrrr1110
NEG(부호 반전)명령
서식 NEG Rm, Rn
설명 범용 레지스터Rm의 내용의 2의 보수를 취하고, 결과를 Rn에 저장한다. 0에서 Rm을 감산하고,결과를 Rn에 저장한다.
동작 NEG(long m, long n) /* NEG Rm,Rn */
{
R[n]=0-R[m];
PC+=2;
}
사용예 NEG R0,R1 ; 실행전 R0=H'00000001
; 실행후 R1=H'FFFFFFFF
코드 MSB LSB
MULU r,R 0110RRRRrrrr0110
NEGC(캐리를 갖는 부호 반전)명령
서식 NEGC Rm, Rn
설명 0에서 범용 레지스터 Rm의 내용과 C비트를 감산하고, 결과를 Rn에 저장한다. 연산의 결과에 의해 빌림수가 C비트에 반영된다.
동작
NEGC(long m, long n) /* NEGC Rm,Rn */
{
unsigned long temp;
temp=R[n];
R[n]=0-R[m]-C;
if (temp<R[n]) C=1; else C=0;
PC+=2;
}
사용예 NEGC R0,R1 ; 실행전 R0=H'00000001, C=0
; 실행후 R1=H'FFFFFFFF, C=1
NEGC R2,R3 ; 실행전 R2=H'00000000, C=0
; 실행후 R3=H'FFFFFFFF, C=1
코드 MSB LSB
NEGC r,R 0110RRRRrrrr0111
NOP(무조작)명령
서식 NOP
설명 PC의 증가만을 실행하고, 다음의 명령으로 실행이 이행한다.
동작
NOP() /* NOP*/
{
PC+=2;
}
사용예 NOP ; 1사이클의 시간이 지난다.
코드 MSB LSB
NOP 0000000000000010
NOT(논리 부정)명령
서식 NOT Rm, Rn
설명 범용 레지스터Rm의 내용의 1의 보수를 취하고, 결과를 Rn에 저장한다.
동작 NOT(long m, long n) /* NOT Rm,Rn */
{
R[n]=-R[m];
PC+=2;
}
사용예 NOT R0,R1 ; 실행전 R0=H'AAAAAAAA
; 실행후 R1=H'55555555
코드 MSB LSB
NOT r,R 0110RRRRrrrr1100
OR(논리합)명령
서식
OR Rm,Rn
OR #imm,R0
OR,B #imm, @R1
설명 범용 레지스터Rn 내용과 Rm의 논리합을 취하고, 결과를 Rn에 저장한다. 특수형으로서 범용 레지스터R0 과 제로 확장한 8비트 이미디어트 데이타의 논리합 또는 R1상대에서 8비트 메모리와 8비트 이미디어트 데이타의 논리합도 가능하다.
동작
OR(long m, long n) /* OR Rm,Rn */
{
R[n] | =R[m];
PC+=2;
}
ORI(long i) /* OR #imm, R0 */
{
R[0] |=(0x000000FF & (long)i);
PC+=2;
}
ORM(long i) /* OR.B #imm.@R1 */
{
long temp;
temp=(long)Read_Byte(R[1]);
Temp | =(0x000000FF & (long)i);
Write_Byte(R[1],temp);
PC+=2;
}
사용예 OR R0,R1 ; 실행전 R0=H'AAAA5555,R1=H'55550000
; 실행후 R1=H'FFFF5555
OR #H'F0,R0 ; 실행전 R0=H'00000008
; 실행후 R0=H'000000F8
OR.B #H'50,@R1 ; 실행후 @R1=H'A5
; 실행후 @R1=H'F5
코드 MSB LSB
OR r,R 0001RRRRrrrr1011
OR #imm,R0 10001011iiiiiiii
OR.B #imm,@R1 10000011iiiiiiii
PASS(통과 확인)명령
서식 PASS #imm
설명 D비트를 참조하는 조건을 갖는 소프트 웨어 인터럽션 명령이다. D=1일때 디버그 인터럽션을 발생한다. 반대로 D=0일때, PC의 증가만을 실행한다. 디버그 인터럽션이 발생하면, PC와 SR을 스택으로 릴리이즈하여 소정의 벡터 어드레스의 내용에 의해 나타내는 어드레스로 분기한다. PC는 본 명령의 다음 명령의 선두 어드레스이다. 프로그램 작성시에 루틴의 선두에 본 명령을 매입해 두고, 필요할 때에 D=1로 하는 것에 의해서 디버그 인터럽션에 의해 통과 확인을 실행하는 것이 가능하다. 또, 미리 정의하는 디버그 인터럽션 루틴으로 imm코드를 참조하는 것에 의해서 디버그 대상 루틴의 판별이 가능하다. imm코드는 스택상의 PC를 (-1)한 어드레스의 바이트 데이타이다.
주의 본 명령을 분기 명령의 직후에 배치하면, D비트의 값에 관계없이 부당 명령으로서 인식된다.
동작
PASS() /* PASS #imm */
{
if (D==1) PC=Read_Long(VBR+PASSVEC)+4;
else PC+=2;
}
사용예
..............
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 ; R0= # _TASK1
RTE ; 상기SUB명령으로 되돌아간다.
NOP ; RTE에 앞서서 실행된다.
코드 MSB LSB
PASS #imm 11001001iiiiiiii
ROTL/ROTR(회전)
서식 ROTL Rn
ROTR Rn
설명 범용 레지스터Rn의 내용을 좌/우 방향으로 1비트 회전하고, 결과를 Rn에 저장한다. 회전해서 오퍼런드의 외부로 나와 버린 비트는 C비트로 전송된다.
MSB LSB
ROTC
MSB LSB
ROTR
동작 ROTL(long n) /* ROTL Rn */
{
if ((R[n]&80000000)==0) C=0; else C=1;
R[n]<<=1;
if (C==1) R[n] | =0x00000001; else
R[n]&=0xFFFFFFFE;
PC+=2;
}
ROTR(long n) /* ROTR Rn */
{
if ((R[n]&Ox00000001)==0) C=0; else C=1;
R[n]>>=1;
if (C==1) R[n] | =0x80000000; else
R[n]&0x7FFFFFFF;
PC+=2;
}
사용예 ROTL R0 ; 실행전 R0=H'80000000, C=0
; 실행후 R0=H'00000001, C=1
ROTR R0 ; 실행전 R0=H'00000001, C=0
; 실행후 R0=H'80000000, C=1
코드 MSB LSB
ROTL R 0100RRRR00101001
ROTR R 0100RRRR00101000
ROTCL/ROTCR(캐리 비트를 갖는 회전)명령
서식 ROTCL Rn
ROTCR Rn
설명 범용 레지스터Rn의 내용을 좌/우 방향으로 C비트를 포함해서 1비트 회전하고, 결과를 Rn에 저장한다. 회전해서 오퍼런드의 외부로 나와버린 비트는 C비트로 전송된다.
MSB LSB
ROTCL
MSB LSB
ROTCR
동작
ROTCL(long n) /* ROTCL Rn */
{
long temp;
if ((R[n]&0x80000000)==0) temp=0;
else temp=1;
R[n]<<=1;
if (C==1) R[n] | 0x00000001;
else R[n]&=0xFFFFFFFE;
if (temp==1) C=1 ; else C=0;
PC+=2;
}
ROTCR(long n) /* ROTCR Rn */
{
long temp;
if ((R[n]&0x00000001)==0) temp=0;
else temp=1;
R[n]>>=1;
if (C==1) R[n] | 0x80000000;
else R[n]&=0x7FFFFFFF;
if (temp==1) C=1 ; else C=0;
PC+=2;
사용예 ROTCL R0 ; 실행전 R0=H'80000000, C=0
; 실행후 R0=H'00000000, C=1
ROTCR R0 ; 실행전 R0=H'00000001, C=0
; 실행후 R0=H'80000000, C=1
코드 MSB LSB
ROTCL R 0100RRRR00101011
ROTCR R 0100RRRR00101010
RTB(브레이크에서의 리턴)명령
서식 RTB
설명 브레이크 예외 처리 루틴에서 복귀한다. 즉, PC를 BR에서 복귀한후, 외부 디바이스에 아크놀로지 신호를 리턴하고, 복귀한 PC가 나타내는 어드레스에서 처리가 속행된다.
주의 본 명령과 분기지 명령사이의 인터럽션의 접수는 RTBMSK신호에 의해 제어할 수 있다. RTBMSK신호가 입력되어 있으면, NMI/IRQ등의 외부 인터럽션은 접수되지 않는다(어드레스 에러등은 접수된다).
동작
RTB() /* RTB */
{
PC=BR+4;
}
사용예 MOV R0,R9;
ADD #-1,R1;←RTB의 분기지(BR로 릴리이즈된PC)
TEST R1,R1 ;
............
RTB ;
NOP ; RTBMSK가 입력되어 있으면, 반드시 상기
ADD를
; 실행한다. 입력되어 있지 않으면 인터럽션ㅇ르
접수하고,
; 이때 상기 ADD는 실행되지 않는다.
코드 MSB LSB
RTB 0000000000000001
RTE(예외 처리에서의 리턴)명령
서식 RTE
설명 인터럽션 루틴에서 복귀한다. 즉, PC와 SR을 스택에서 복귀한다. 복귀한 PC가 나타내는 어드레스에서 처리가 속행된다.
주의 지연 분기 명령이므로, 본 명령의 직후의 명령이 분기에 앞서서 실행된다. 본 명령과 직후의 명령사이에 인터럽션은 접수되지 않는다. 직후의 명령이 분기 명령일때, 부당 명령으로서 인식된다. 메모리에서 R15로의 로드 명령의 직후에 연속해서 배치하지 않는 것이 필요하다. 로드전의 오래된 R15를 잘못해서 참조하게 된다. 다음의 ①②에서 대응되도록 명령의 순서 변화가 필요하다.
MOV #0,R0 →① ② → MOV.L @R15+,R15
MOV.L @R15+,R15 →② ① → MOV #0,R0
RTE RTE
ADD #8,R15 ADD #8,R15
동작
RTE() /* RTE */
{
unsigned long temp;
temp=PC;
PC=Read_Long(R[15])+4;
R[15]+=4;
SR=Read_Long(R[15]);
R[15]+=4;
Delay_Slot(temp+2);
}
사용예 RTE ; 기본 루틴으로 복귀한다.
ADD #8,R15 ; 분기에 앞서서 실행된다.
코드 MSB LSB
RTE 0000000000010000
RTS(프로시쥬어에서의 리턴)명령
서식 RTS
설명 프로시쥬어에서 복귀한다. 즉, PC를 PR에서 복귀한다. 복귀한 PC가 나타내는 어드레스에서 처리가 속행된다. 본 명령에 의해서 BSR 및 JSR명령에 의해 콜된 프로시쥬어에서 콜본래로 리턴할 수가 있다.
주의 지연 분기 명령이므로, 본 명령의 직후의 명령이 분기에 앞서서 실행된다. 본 명령과 직후의 명령사이에 인터럽션은 접수되지 않는다. 직후의 명령이 분기 명령일때, 부당 명령으로서 인식된다.
동작
RTS() /* RTS */
{
unsigned long temp;
temp=PC;
PC=PR+4;
Delay_Slot(tmep+2);
}
사용예 TABEL: .data.1 TRGET ; 점프 테이블
MOV.L TABLE,R3 ; R3=TRGET의 어드레스
JSR @R3 ; TRGET로 분기한다.
NOP ; 분기에 앞서서 실행된다.
ADD R0,R1 ; PR이 유지하고 있는 어드레스
.......... 프로시쥬어에서의 리턴지이다.
..........
TRGET: MOV R1,R0 ; 프로시쥬어의 입구
RTS ; PR의 내용->PC
MOV #12,R0 ; 분기에 앞서서 실행된다.
코드 MSB LSB
RTS 0000000000010001
SETC(C비트 셋트)명령
서식 SETC
설명 SR의 C비트를 셋트한다.
동작 SETC() /* SETC */
{
C=1;
PC+=2;
}
사용예 SETC ; 실행전 T=0
; 실행후 T=1
코드 MSB LSB
SETT 0000000000011001
SETT(T비트 셋트)명령
서식 SETT
설명 SR의 T비트를 셋트한다.
동작 SETT() /* SETT */
{
T=1;
PC+=2;
}
사용예 SETT ; 실행전 T=0
; 실행후 T=1
코드
MSB LSB
SETT 0000000000011000
SHAL/SHAR(산술 시프트)명령
서식 SHAL Rn
SHAR Rn
설명 범용 레지스터 Rn의 내용을 좌/우 방향으로 산술적으로 1비트 시프트하고, 결과를 Rn에 저장한다. 시프트해서 오퍼런드의 외부로 나와버린 비트는 C비트로 전송된다.
MSB LSB
SHAL
MSB LSB
SHAR
동작 SHAL(long n) /* Same as SHLL */
SHAR(long n) /* SHAR Rn */
{
long temp;
if ((R[n]&0x00000001==0) C=0; else; C=1
if ((R[n]&0x80000000)==0) temp=0; else temp=1;
R[n]>>=1;
if (temp==1) R[n]| =0x80000000;
else (R[n]&0x7FFFFFFF);
PC+=2;
}
사용예 SHAL R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'00000002, C=1
SHAR R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'C0000000, C=1
코드 MSB LSB
SHAL R 0100RRRR00011011
SHAR R 0100RRRR00011000
SHLL/SHLR(논리 시프트)명령
서식 SHLL Rn
SHLR Rn
설명 범용 시프터 레지스터 Rn의 내용을 좌/우 방향으로 논리적으로 1비트 시프트하고, 결과를 Rn에 저장한다. 시프트해서 오퍼런드의 외부로 나와버린 비트는 C비트에 전송된다.
MSB LSB
SHLL
MSB LSB
SHLR
동작 SHLL(long n) /* SHLL Rn (Same as SHAL) */
{
if ((R[n]&0x80000000)==0) C=0; else C=1;
R[n]<<=1;
PC+=2;
}
SHLR(long n) /* SHLR Rn */
{
if ((R[n]&0x00000001)==0) C=0; else C=1;
R[n]<<=1;
R[n]&=0x7FFFFFFF;
PC+=2;
}
사용예 SHLL R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'00000002, C=1
SHLR R0 ; 실행전 R0=H'80000001, C=0
; 실행후 R0=H'40000000, C=1
코드 MSB LSB
SHLL R 0100RRRR00011011
SHLR R 0100RRRR00011010
SLn/SRn(멀티 비트 시프트) 명령
서식
SL2 Rn
SR2 Rn
SL8 Rn
SR8 Rn
SL16 Rn
SR16 Rn
설명 범용 레지스터Rn의 내용을 좌/우 방향으로 논리적으로 2/8/16비트 시프트하고, 결과를 Rn에 저장한다. 시프트해서 오퍼런드의 외부로 나와버린 비트는 버려진다.
SL2 SR2
MSB LSB MSB LSB
SL8 SR8
MSB LSB MSB LSB
SL16 SR16
MSB LSB MSB LSB
동작
SL2(long n) /* SL2 Rn*/
{
R[n]<<=2;
PC+=2;
}
SR2(long n) /* SR2 Rn*/
{
R[n]>>=2;
R[n]&=0x3FFFFFFF;
PC+=2;
}
SL8(long n) /* SL8 Rn*/
{
R[n]<<=8;
PC+=2;
}
SR8(long n) /* SR8 Rn*/
{
R[n]>>=8;
R[n]&==0x00FFFFFF;
PC+=2;
}
SL16(long n) /* SL16 Rn*/
{
R[n]<<=16;
PC+=2;
}
SR16(long n) /* SR16 Rn*/
{
R[n]>>=16;
R[n]&=0x0000FFFF;
PC+=2;
}
사용예 RL2 R0 ; 실행전 R0=H'12345678
; 실행후 R0=H'48D159E0
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
코드 MSB LSB
SL2 R 0100RRRR00001111
SR2 R 0100RRRR00001110
SL8 R 0100RRRR00011111
SR8 R 0100RRRR00011110
SL16 R 0100RRRR00101111
SR16 R 0100RRRR00101110
SLP(슬립)명령
서식 SLP
설명 CPU를 저소비 전력 모드로 한다. 저소비전력 모드에서는 CPU의 내부 상태는 유지되고, 직후의 명령의 실행을 정지하고, 인터럽션 요구의 발행을 기다린다. 요구가 발생하면, 저소비 전력 모드에서 나와서 예외 처리를 개시한다. 즉, SR와 PC를 스택에 릴리이즈하고, 소정의 벡터에 따른 인터럽션 루틴으로 분기한다. PC는 본 명령의 직후의 명령의 선두 어드레스이다.
동작
SLP() /* SLP */
{
PC-=2;
Error("Sleep Mode.");
}
사용예 SLP ; 저소비전력 모드로의 천이
코드 MSB LSB
SLP 0000000000001000
STC(CR전송)명령
서식 STC CRm, Rn
STC.L CRm,@-Rn
설명 컨트롤 레지스터 CRm을 디스티네이션에 저장한다.
주의 본 명령은 인터럽션을 접수하지 않는다.
동작 STC(long m, long n) /* STC CRm, Rn */
{
switch (m) {
case 0: R[n]=SR; PC+=2; break;
case 1: R[n]=PR; PC+=2; break;
case 2: R[n]=GBR; PC+=2; break;
difault:Error("Illegal CR number."); break;
}
}
STCM(long m, long n) /*STC.L CRm, @-Rn */
{
switch (m) {
case 0: R[n]-=4; Write_long(R[n].SR);
PC+=2; break;
case 1: R[n]-=4; Write_long(R[n].PR);
PC+=2; break;
case 2: R[n]-=4; Write_long(R[n].GBR);
PC+=2; break;
default:Error("Illegal CR number."); break;
}
}
사용예 STC SR,R0 ; 실행전 R0=H'FFFFFFFF, SR=H'00000000
; 실행후 R0=H'00000000
STC.L PR,@-R15 ; 실행전 R15=H'10000004
; 실행후 R15=H'00000000,@R15=PR
코드 MSB LSB
STC cr,R 0000RRRRrrrr0011
STC,L cr,@-R 0100RRRRrrrr0000
STBR(BR전송)명령
서식 STBR
설명 컨트롤 레지스터BR의 내용을 범용 레지스터R0에 저장한다.
주의 본 명령은 인터럽션을 접수하지 않는다.
동작 STBR() /* STBR */
{
R[0]=BR;
PC+=2;
}
사용예 STBR ; 실행전 R0=H'FFFFFFFF,BR=H'12345678
; 실행후 R0=H'12345678
코드 MSB LSB
STBR 0000000000100000
STVR(VBR전송)명령
서식 STVR
설명 컨트롤 레지스터VBR의 내용을 범용 레지스터R0에 저장한다.
주의 본 명령은 인터럽션을 접수하지 않는다.
동작 STVR() /* STVR */
{
R[0]=VBR;
PC+=2;
}
사용예 STVR ; 실행전 R0=H'FFFFFFFF,VBR=H'00000000
; 실행후 R0=H'00000000
코드 MSB LSB
STVR 0000000000001010
SUB(감산)명령
서식 SUB Rm,Rn
설명 범용 레지스터Rn의 내용에서 Rm을 감산하고, 결과를 Rn에 저장한다. 이미디어트 데이타의 감산은 ADD#imm,Rn으로 대용한다.
동작 SUB(long m, long n) /* SUB Rm,Rn */
{
R[n]-=R[m]
PC+=2;
}
사용예 SUB R0,R1 ; 실행전 R0=H'00000001,R1=H'800000000
; 실행후 R1=H'7FFFFFFF
코드 MSB LSB
SUB r,R 0010RRRRrrrr0100
SUBC(캐리를 갖는 감산)명령
서식 SUBC Rm,Rn
설명 범용 레지스터Rn의 내용에서 Rm과 C비트를 감산하고, 결과를 Rn에 저장한다. 연산의 결과에 의해 빌림수가 C비트에 반영된다.
동작 SUBC(long m, long n) /* SUBC Rm,Rn */
{
unsigned long temp;
temp=R[n];
R[n]-=(R[m]+C);
if (temp<R[n]) C=1; else C=0;
PC+=2;
}
사용예 SUBC R0,R1 ; 실행전 C=1,R0=H'00000001,
R1=H'000000001
; 실행후 C=1,R1=H'FFFFFFFF
SUBC R2,R3 ; 실행전 C=0,R2=H'00000002,
R3=H'00000001
; 실행후 C=1,R3=H'FFFFFFFF
코드 MSB LSB
SUBC r,R 0010RRRRrrrr0110
SUBS (포화 기능을 갖는 감산)명령
서식 SUBS Rm, Rn
설명 범용 레지스터Rn의 내용에서 Rm을 감산하고, 결과를 Rn에 저장한다. 언더플로우가 발생해도 결과는 H'7FFFFFFF~H'80000000의 범위로 제한된다. 이때, C비트가 셋트된다.
동작 SUBS(long m, long n) /* SUBS Rm, Rn */
{
long dest,src,ans;
if ((long)R[n]>=0) dest=0; else dest=1;
if ((long)R[m]>=0) src=0; else src=1;
src+=dest;
R[n]-=R[m];
if ((long)R[n]>=0) ans=0; else ans=1;
ans+=dest;
if ((src==1)&&(ans==1)) {
if (dest==0) { R[n]=0x7FFFFFFF; C=1;}
else C=0;
if (dest==1) { R[n]=0x80000000; C=1;}
else C=0;
}
else C=0;
PC+=2;
}
사용예 SUBC R0,R1 ; 실행전 R0=H'00000001,R1=H'80000001
; 실행후 R1=80000000,C=0
SUBC R2,R3 ; 실행전 R2=H'00000002,R3=H'80000001
; 실행후 R3=H'80000000,C=1
코드 MSB LSB
SUBC r,R 0010RRRRrrrr0111
SUBV (언더플로우를 갖는 감산)명령
서식 SUBV Rm, Rn
설명 범용 레지스터Rn의 내용에서 Rm을 감산하고, 결과를 Rn에 저장한다. 언더플로우가 발생한 경우, C비트가 셋트된다.
동작 SUBV(long m, long n) /* SUBV Rm,Rn */
{
long dest,src,ans;
if ((long)R[n]>=0) dest=0; else dest=1;
if ((long)R[m]>=0) src=0; else src=1;
src+=dest;
R[n]-=R[m];
if ((long)R[n]>=0) ans=0; else ans=1;
ans+=dest;
if ((src==1) { if (ans==1) C=1; else C=0;}
else C=0;
PC+=2;
}
사용예 SUBV R0,R1 ; 실행전 R0=H'00000002,R1=H'80000001
; 실행후 R1=H'7FFFFFFF,C=1
SUBV R2,R3 ; 실행전 R2=H'FFFFFFFF,R3=H'7FFFFFFE
; 실행후 R3=H'80000000,C=1
코드 MSB LSB
SUBV r,R 0010RRRRrrrr0101
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비트가 교환된다.
동작 SWAP.B(long m, long n) /* SWAP.B Rm,Rn */
{
unsigned long temp0, temp1;
temp0=R[m]&0xffff0000;
temp1=(R[m]&0x000000ff)<<8;
R[n]=(R[m]&0x0000ff00)>>8;
R[n]=R[n]| temp1 | temp0;
PC+=2;
}
SWAP.W(long m, long n) /* SWAP.W Rm,Rn */
{
unsigned long temp;
temp=R[n]>>8;
R[n]=R[m]<<8;
R[n] | =temp;
PC+=2;
}
사용예 SWAP.B R0,R1 ; 실행전 R0=H'12345678
; 실행후 R1=H'12347856
SWAP.W R0,R1 ; 실행전 R0=H'12345678
; 실행후 R1=H'56781234
코드 MSB LSB
SWAP.B r,R 0110RRRRrrrr0100
SWAP.W r,R 0110RRRRrrrr0101
TAS (리드/검색/라이트)명령
서식 TAS.B @Rn
설명 범용 레지스터Rn의 내용을 어드레스로 하고, 그 어드레스가 나타내는 바이트데이타가 제로일때 T=1, 제로가 아닐때 T=0으로 한다. 그후, 비트7을 1로 세트해서 라이트한다. 이 동안, 버스권은 해방되지 않는다.
동작
TAS(long n) /* TAS.B @Rn */
{
long temp;
temp=(long)Read_Byte(R[n]); /* Bus Lock enable */
if (temp==0) T=1; else T=0;
temp |=0x00000080;
Write_Byte(R[n],temp); /* Bus Lock disable */
PC+=2;
}
사용예 _LOOP TAS.B @R7 :R7=1000
BF _LOOP ;1000번지가 제로로 될때까지
루프한다.
코드 MSB LSB
TAS.B @R 0100RRRR00001000
TEST (테스트)명령
서식 TEST Rm, Rn
TEST #imm, R0
TEST.B #imm, @R1
설명 범용 레지스터의 내용과 Rm의 논리곱을 취하고, 결과가 제로일때 T비트를 세트한다. 결과가 제로가 아닐때 T비트는 클리어된다. Rn의 내용은 변경되지 않는다. 특수형으로써 범용 레지스터R0와 제로확장된 8비트 이미디어트 데이타와의 논리곱 또는 R1상태에서 8비트 메모리와 8비트 이미디어트 데이타와의 논리곱도 가능하다. 메모리의 내용은 변경되지 않는다.
동작 TEST(long m, long n) /* TEST Rm,Rn */
{
if ((R[n]&R[m])==0) T=1; else T=0;
PC+=2;
}
TESTI(long i) /* TEST #imm, R0 */
{
long temp;
temp=R[0]&(0x000000FF & (long)i);
if (temp==0) T=1; else T=0;
PC+=2;
}
TESTM(long i) /* TEST.B #imm, R1 */
{
long temp;
temp=(long)Read_Byte(R[1]);
temp&=(0x000000FF & (long)i);
if (temp==0) T=1; else T=0;
PC+=2;
}
사용예 TEST R0,R0 ; 실행전 R0=H'00000000
; 실행후 T=1
TEST #H'80,R0 ; 실행전 R0=H'FFFFFF7F
; 실행후 T=1
TEST .B #H'A5,R1 ; 실행전 @R1=H'A5
; 실행후 T=0
코드 MSB LSB
TEST r,R 0001RRRRrrrr1000
TEST #imm,R0 10001000iiiiiiii
TEST.B #imm,@R1 10000000iiiiiiii
TRAP (소프트웨어 트랩)
서식 TRAP #imm
설명 트랩예외처리를 개시한다. 즉, PC와 SR을 스택으로 릴리이즈하고, 지정벡터의 내용으로 표시되는 어드레스로 분기한다. 벡터는 이미디어트 데이타를 2비트 왼쪽으로 시프트하여 부호확장한 메모리 어드레스 그것이다. PC는 본 명령의 2명령후의 선두어드레스이다. RTE와 조합해서 시스템콜에 사용한다.
주의 지연분기이므로, 본 명령의 직후의 명령이 분기에 앞서 실행된다. 본 명령과 직후의 명령과의 사이에 인터럽션은 접수되지 않는다. 직후의 명령이 분기명령일때, 부당한 명령으로써 인식된다. 메모리에서 R15로의 로드 명령의 직후에 연속해서 배치하지 않는 것이 필요하다. 로드전의 오래된 R15를 잘못해서 참조하게 된다. 다음 ① ②에서 대응되도록 명령의 순서변환이 필요하다.
MOV #0,R0 →① ② → MOV.L @R15+,R15
MOV.L @R15+,R15 →② ① → MOV #0,R0
TRAP #15 TRAP #15
동작
TRAP(long i) /* TRAP #imm */
{
unsigned long temp;
long imm;
if ((i&0x80)==0 imm=(0x000000FF & i);
else imm=(0xFFFFFF00 | i);
temp=PC;
R[15]-=4;
Write_Long(R[15],SR);
R[15]-=4;
Write_Long(R[15],PC);
PC=Read_Long(VBR+(imm<<2))+4;
Delay_Slot(temp+2);
}
사용예 어드레스
0010 .data 10000000 ;
.......
TRAP #H'10 ; H'10번지의 내용의 어드레스로
분기한다.
ADD R1,R7 ; 분기에 앞서 실행된다.
TEST #0,R0 ; 트랩 루틴의 리턴지
.......
10000000 MOV R0,R0 ; 트랩 루틴의 입구
10000002 RTE ; 상기 TEST명령으로 되돌아간다.
10000004 NOP ; RTE에 앞서 실행된다.
코드 MSB LSB
TRAP #imm 11000011iiiiiiii
XTRCT(추출)명령
서식 XTRCT Rm,Rn
설명 범용 레지스터Rm과 Rn을 연결한 64비트의 내용에서 중앙의 32비트를 추출하고, 결과를 Rn에 저장한다.
MSB LSB MSB LSB
동작 XTRCT(long m, long n) /* XTRCT Rm,Rn */
{
unsigned long temp;
temp=(R[m]<<16)&0xFFFF0000;
R[n]=(R[n]>>16)&0x0000FFFF;
R[n] | R[m];
PC+=2;
}
사용예 XTRCT R0,R1 실행전; R0=H'01234567,R1=H'89ABCDEF
실행후; R1=H'456789AB
코드 MSB LSB
XTRCT r,R 0010RRRRrrrr1000
다음에, 상기 실시예에서 설명한 마이크로 컴퓨터등을 사용해서 실행할 수 있는 부호화된 제산의 실시예에 대해서 설명해 간다.
[18] 부호화 제산에 있어서의 피제수에 대한 전처리의 원리
제29도에는 본 실시예에 관한 부호화 제산에 있어서의 피제수에 대한 전처리의 원리가 개념적으로 도시되어 있다. 예를들면, Y(몫) = X(피제수) ÷ (제수)로 표현되는 부호화 제산에 있어서, 피제수 X가 부일때는 피제수X에서 1을 뺀 값(X-1)을 피제수로 한다. 개념적으로는 동일도면에 도시되는 바와같이 몫 Y의 좌표축을 좌측으로 1어긋난 상태에서 제산의 처리를 실행한다. 이것에 의해서 몫을 구하는 연산처리의 도중에서 종래와 같이 부분잉여가 0인가 아닌가를 그때마다 판정하지 않더라도 끝낼수 있고, 또한 그 판정을 위한 하드웨어도 불필요하게 된다. 정확한 나머지를 구할때는 최후에 구해진 나머지를 보정한다.
[19] 부호화 제산의 원리적인 일예 처리순서
제30도에는 피제수가 부인 경우에 있어서의 부호화 제산처리의 원리적인 일예 처리순서가 도시되어 있다. 동일도면에 있어서는 -9÷-3을 일예로 한다. -9는 2의 보수표면으로 "110111"로 되고, -3은 "101"로 된다. 먼저, 피제수는 부이므로 -9에서 1을 뺀 값 "110110"이 피제수로 된다. 몫의 부호는 피제수의 부호 "1"과 제수의 부호"1"의 배타적 논리합에서 구해진다(*1). 최초의 부분잉여의 산출은 피제수"110110"과 제수의 부호비트를 상위측(좌측)으로 확장한 "1101"를 부호비트의 자리수를 맞춰서 가산 또는 감산하는 것에 의해서 실행된다. 쌍방의 부호비트의 배타적 논리합이 0이면 감산으로 되고, 1이면 가산으로 된다(*2). 이 예의 경우에는 감산으로 된다. 이것에 의해서 최초의 부분잉여 "000010"이 얻어진다. 제1의 부분잉여에 대응되는 몫은 부분잉여의 최상위 비트와 제수의 부호비트와의 배타적 논리합의 반전논리값에 의해서 부여된다(*3). 이하 마찬가지로 해서 순차적으로 몫비트가 구해진다. 정확한 나머지가 필요한 경우에는 이 예에 따르면 최후의 잉여에 1을 가산한다. 동일도면의 하측에 도시되는 바와같이 피제수를 그대로의 값"110111"로 해서 계산을 실행한 경우에는 잉여의 전체비트가 "0"으로 되는 것에 기인해서 정확한 몫비트는 그대로는 구해지지 않는다. 그를 위해서는 부분잉여의 전체 비트가 "0"인가 아닌가를 부분잉여를 산출할때마다 판정하고, 그렇게 하는 경우에는 해당 몫비트의 논리값을 반전하지 않으면 안된다. 또한, 제31도에는 부÷정의 경우에 있어서의 부호화 제산처리의 일예가 도시되고 제32도에는 정÷정의 경우 및 정÷부의 경우에 있어서의 부호화 제산 처리의 각각의 일예가 도시되어 있다.
[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는 의 보수)인 경우
사전에 피제수에서 피제수의 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가 1일때 몫비트를 1로 하고, 부분잉여의 부호비트 MSB가 0일때 몫비트를 0으로한다. 몫은 1의 보수로 된다. 다음에 기술하는 <<4>>에서 기술되지만, 몫비트가 전부 구해졌으면 최후에 2의 보수로 변환한다.
<<4>> 상기 <<3>>에서 얻어진 몫은 몫의 부호에 의해 반드시 정확한 값으로 되어 있지 않는 것이 있다. 상기 <<2>>에서 구한 몫의 부호가 1일때에는 몫은 1의 보수로 되어 있기 때문이다. 따라서, 최종적인 몫은 상기 몫의 부호와 몫비트에 따라서 결정된다. 제38도에 도시되는 바와같이 몫이 부(몫의 부호비트가 1)인 경우에는 몫은 1의 보수로 표현되어 있으므로, <<3>>에서 얻어진 몫에 1을 가산해서 2의 보수로 변환하는 보정을 실행한다. 이것에 의해서 정확한 몫이 구해진다. 또 제38도에 도시되는 바와 같이 최종 부분잉여에 대한 잉여보정을 실행한다.
[21] 부호화 제산의 구체적인 예
제39도 및 제40도에는 부호화 제산의 상기 기본적인 순서를 채용한 처리의 구체적인 일예가 도시되어 있다. 동일도면에 도시되는 예는 -8÷-3의 부호화 제산이며, 이해를 용이하게 하기 위해 6비트의 범용 레지스터를 사용한 설명으로 한다. 제40도는 제39도에 도시되는 최후의 처리에 계속해서 실행되는 처리가 도시되고 열방향의 기술의 의미는 제39도와 일치되어 있다. 각 도면에 있어서, R0~R4는 각각 6비트의 범용 레지스터를 의미하고, Q, M, T는 컨트롤 레지스터 또는 상태레지스터중의 비트플래그를 의미하고, Q는 피제수 또는 부분잉여의 부호를 저장하는 비트, M은 제수의 부호를 저장하는 비트, T는 몫비트나 캐리를 저장하는 비트이다. 도면중의 왼쪽끝에는 명령코드와 오퍼런드가 기재되고, 이것에 대응하는 열에는 범용 레지스터 및 비트플래그의 내용이 도시된다.
이 범용 레지스터 및 비트플래그의 내용을 나타내는 기술에 있어서 언더라인이 그어져 있는 내용은 대응명령의 실행에 의해서 그의 내용이 갱신된 것을 의미한다. X가 쓰여져 있는 비트는 값이 확정하고 있지 않은 비트를 의미한다. 이하, 이 항에 있어서 부호화 제산처리를 순차적으로 설명하지만, 먼저 그 설명에서 사용하는 기호에 대한 일반예를 이하에 나타낸다.
← ; 저장하는 것을 나타낸다.
MSB (Rn) ; 레지스터 Rn의 MSB(최상위 비트)를 나타낸다.
LSB (Rn) ; 레지스터 Rn의 LSB(최하위 비트)를 나타낸다.
; 배타적 논리합을 나타내는 연산자이다.
Rn<<=1 ; 레지스터 Rn의 값을 1비트 왼쪽으로 시프트하는 것을 나타낸다.
Rn>>=1 ; 레지스터 Rn의 값을 1비트 오른쪽으로 시프트하는 것을 나타낸다.
(Q : Rn) ; 레지스터 Rn의 최상위에 Q비트를 부가한 7비트의 2진수를 의미한다.
~ ; 부정(비트반전)을 의미하는 연산자이다.
(Rn : T)를 우회전 ; T비트를 레지스터 Rn의 MSB로 시프트인 하면서 레지스터 Rn의 값을 오른쪽으로 시프트하고, 시프트아우트된 값의 LSB을 T비트에 저장하는 것을 나타낸다.
(Rn : T) 를 좌회전 ; T비트를 레지스터 Rn의 LSB로 시프트인 하면서 레지스터 Rn의 값을 왼쪽으로 시프트하고, 시프트아우트된 값의 MSB를 T비트에 저장하는 것을 나타낸다.
(1) EOR RO, RO
RO←0. 즉, 레지스터 R0의 값을 전체비트0으로 한다.
(2) SL3 R1
레지스터 R1의 하위 3비트(제수)를 상위 3비트로 왼쪽으로 시프트한다.
(3) DIVOS R0, R2
Q←MSB(R2), M←MSB(R0) = 0, T←Q^M=Q^0=Q,
따라서, T비트에는 피제수의 부호가 저장된다.
(4) MOVT R3
R3←T. 즉, 피제수의 부호를 LSB(R3)에 저장한다. 이 피제수의 부호는 나머지를 구할 때에 필요하게 된다.
(5) SUBC R0, R2
R2←(R2-T). 즉, 2의 보수를 1의 보수로 변환하고 있다. 환언하면, 피제수가 부인 경우에 R2가 유지하는 피제수에서 1을 빼고 있는 것과 등가이다. 이 처리에 있어서 실제로는 피제수에서 피제수의 부호비트 MSB의 값을 감산하고 있는 것으로 되므로, 피제수가 정인가 부인가를 일체 검출할 필요는 없고, 어느 경우에도 동일한 명령을 실행해서 대응할수 있다. 즉, 피제수가 부인 경우에만 분기해서 1을 빼는 연산을 실행하는 처리플로우는 불필요하게 된다.
(6) DIVOS 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에 의해 R2의 피제수를 1비트 왼쪽으로 시프트하고, LSB(R2)←T에 의해 R2의 LSB에 T비트 (이때는 몫의 부호로 되어 있다)를 저장하고,
(Q : R2) ← (Q : R2) ± (M : R1)에 의해서 가감산명령에 따라서 연산을 실행하고,
T←~(Q ^ M) 에 의해서 몫비트를 T비트에 저장한다.
명령 DIV1을 3회 실행하는 것에 의해 Q비트에는 최후의 부분잉여의 부호가 들어가 있으며, T비트에는 몫의 최하위 비트가 들어가 있고, R2의 상위 3비트에는 최후의 부분잉여가 들어가 있고, 그의 하위 3비트에는 몫이 들어가 있다. 하위에서 3비트째에는
(6) DIV0S R1, R2에서 T비트에 취득한 몫의 부호가 들어가 있다.
(8) MOV R2, R4
R2를 R4에 카피한다. R4를 이용해서 나머지를 구하기 위함이다.
(9) EXTS. W R2, R2
R2의 하위에서 3비트째를 상위 3비트측으로 부호확장한다. 이 부호는 몫의 부호를 나타내고 있다.
(10) ROTCL R2
(R2: T)를 좌회전, 즉 T비트를 레지스터 R2의 LSB로 시프트인하면서 레지스터 R2의 값을 왼쪽으로 시프트하고, 시프트아우트된 값의 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) DIVOS 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) DIVOS 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에 의해 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도에 도시되는 범용 레지스터부 GRB 및 연산부 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)로의 입력을 선택하는 선택회로(11)과 연산회로(9)로의 입력을 선택하는 선택회로(13)과의 어느쪽인가를 선택해서 출력하는 선택회로이다. (16)은 제어레지스터(3)의 출력을 산술논리 연산회로(8) 또는 선택회로(14)에 공급하는 선택회로이다. (17)은 산술논리 연산회로(8)의 B포트에 입력이 접속된 부호확장회로이다. 이 회로는 제로 확장도 실행할수가 있다.
제52도에는 제51도에 도시되는 산술논리 연산회로(8), 연산회로(9), 연산회로(10) 및 연산제어회로(7)의 일예가 도시되어 있다. 상기 연산제어회로(7)은 동일도면의(B)에 도시되어 있는 바와같이 2입력형의 배타적 논리합회로와 그의 출력과 제어신호를 2입력으로 하는 배타적 논리합회로에 의해서 구성된다. 제어신호가 0일때 연산회로(10)은 전자의 배타적 논리합회로의 출력을 그대로 출력하고, 제어신호가 1일때 연산회로(10)은 전자 배타적 논리합회로의 출력을 부정(반전)해서 출력한다. 연산회로(10)은 제 52도의 (D)에 도시되는 바와같이 2입력형의 배타적 논리합회로, 그의 출력과 제어신호를 2입력으로 하는 배타적 논리합회로에 의해서 구성된다. 제어신호가 0일때 연산회로(10)은 전자의 배타적 논리합회로의 출력을 그대로 출력하고, 제어신호가 1일때 연산회로(10)은 전자의 배타적 논리합회로의 출력을 부정(반전)해서 출력한다. 제52도의 (A)에 있어서 산술논리연산회로(8)은 가감산을 위한 논리가 대표적으로 도시되고, 32비트의 풀가산기를 구비한다. B00~B31은 B포트 입력, A00~A31은 A포트 입력, C/B는 캐리/빌림수이며, SUB는 연산제어회로(7)의 출력이다.
[23] 부호화 제산에 있어서의 연산유니트의 동작예
제53도에는 부호화 제산을 위한 명령예의 일예가 도시되어 있다. 동일도면에 도시되는 기술은 제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도 및 제57도에 도시되는 바와같이 이 명령의 실행에 의해서 작업용 레지스터 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) DIVOS 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)은 각 비트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) DIVOS R1, R2
제59도 및 제76도에 도시되는 바와같이 이 명령에 의해 레지스터 R2에 저장되어 있는 피제수의 MSB(부호비트)를 Q비트에, 레지스터 R1에 저장되어 있는 제수의 MSB(부호비트)를 M비트에 저장하고, Q비트와 M비트의 배타적 논리합을 채택하고, 이것을 몫의 부호로써 T비트에 저장한다. 이 동작은 하나전의 SUBC R0, R2의 실행에서 오버 플로우하지 않을때에 보증된다. 이 때, 시프터(4)는 32비트입력의 MSB를 출력한다. 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리연산회로(8)은 B포트입력의 MSB을 출력한다. 배타적 논리합연산은 연산회로 (10)이 실행한다. 이 DIVOS명령에 의해 3개의 제어비트 레지스터의 초기화가 실행된다. DIVOS명령의 제1의 오퍼런드에 제수레지스터 R1을 설정하고, 제2의 오퍼런드에 피제수 레지스터 R2인 R2를 설정하고 있다. DIVOS명령은 제1의 오퍼런드를 산술논리연산회로 (8)에 입력하고, 제1의 오퍼런드의 MSB를 제어비트 레지스터(6)에 저장한다. 그의 처리와 병행해서 DIVOS명령은 제2의 오퍼런드의 MSB를 시프터(4)에 의해 시프트아우트하고, 선택회로(15) 및 선택회로(11)을 경유해서 제어비트 레지스터(5)에 저장한다. 제어비트 레지스터(5)와 제어비트 레지스터(6)의 값은 DIVOS명령 종료후에도 유지해 둔다. 제어비트 레지스터(5)의 값은 선택회로(13)을 경유해서 연산회로(10)의 입력값으로 된다. 제어비트 레지스터(6)의 값은 연산회로(10)의 입력값으로 된다. 연산회로(10)은 상기 2개의 입력의 배타적 논리합을 계산하고, 결과를 선택회로(12)를 경유해서 제어비트 레지스터(3)에 저장한다. 제어비트 레지스터(3)의 값은 DIVOS명령 종료후도 유지해 둔다. 제1의 오퍼런드의 R1과 제2의 오퍼런드의 R2는 리라이트하지 않는다.
이 DIVOS명령은 피제수의 부호비트를 제어비트 레지스터(5)에 저장하고, 제수의 부호비트를 제어비트 레지스터(6)에 저장하고 제어비트 레지스터(5)와 제어비트 레지스터(6)의 배타적 논리합을 제어비트 레지스터(3)에 저장하고 있다. 제어비트 레지스터(5)와 제어비트 레지스터(6)의 값은 다음의 제산의 최초의 스텝에서 가산을 실행하는가 감산을 실행하는가의 판단을 이용한다. 제어비트 레지스터(6)은 다음의 제산에서 제수의 부호확장부로써 이용한다. 제어비트 레지스터(3)의 값은 몫의 부호를 나타내고 있다. 몫이 부인 경우, 몫은 한번에 1의 보수에서 구하고 있으므로, 2의 보수로 변환된다. 16비트 부호화2의 보수의 최소값이 몫으로 되는 경우, 1의 보수표현에서는 17비트가 필요하게 된다. 그 17비트의 1의 보수의 부호비트로 되는 것이 본 DIVOS명령종료 직후의 제어비트 레지스터(3)의 값이다.
피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우, 1을 빼는 상기 보정에 의해 피제수 레지스터 R2는 정의 최대값으로 되어 있으므로, DIVOS명령종료 직후의 제어비트 레지스터(5)의 값은 0으로 된다. 본래대로 라면, 제어비트 레지스터(5)에는 피제수의 부호비트가 들어가 있으므로 제어비트 레지스터(5)의 값은 1로 되어야 할것이다. 이 때문에 피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우, 제어순서가 본래의 의도와는 다르게 된다. 그러나, 조금전에 주의한 바와같이 피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우는 몫이 반드시 오버 플로우하지만, 오버 플로우가 발생하는 경우를 사전에 검출해서 제어해 두면 좋다. 이하, 피제수가 32비트 부호화2의 보수의 최소값을 취하는 경우에 대해서 특별한 주의는 하지 않는다.
(7) DIV1 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의 최상위에 제어비트 레지스터를 부가한 33비트를 가산 또는 감산한다. (i)에서 가산명령이 있었던 경우는 가산, (i)에서 감산명령이 있었던 경우는 감산을 실행한다. 시프터(4)의 32비트의 출력과 제수레지스터 R1의 값의 가감산은 산술논리 연산회로 (8)에서 실행한다. 그 결과, 산술논리연산회로 (8)에서 발생한 캐리 또는 빌림수를 선택회로(12)를 거쳐서 연산회로(9)로 보낸다. 산술논리연산회로 (8)에서 발생한 32비트의 연산결과는 피제수 레지스터 R2에 저장한다. 제어비트 레지스터(5)와 제어비트 레지스터(6)의 가감산은 산술논리연산회로 (8)에서 조금전에 발생한 캐리 또는 빌림수를 갖는 연산회로(9)에서 실행한다. 연산회로(9)의 결과는 부분잉여의 부호비트로 된다. 이 부분잉여의 부호는 한편으로 선택회로(11)로 보내져서 제어비트 레지스터(5)에 저장되고, 또 한편으로는 연산회로(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
상기 DIVOS명령에서 출력한 몫의 부호가 상기 DIV1명령을 16회 반복하는 것에 의해 레지스터 R2의 하위 16비트의 부호비트의 위치로 가고 있다. EXT.W R2, R2는 제62도 및 제77도에 도시되는 바와같이 그의 하위 16비트의 부호비트를 상위 16비트로 부호확장한다. 이 처리에 있어서 제62도의 부호확장회로(17)은 하위 16비트를 32비트로 부호확장한다. 산술논리연산회로 (8)은 입력을 스루로 출력한다. 즉, EXTX.W 명령에서 피제수 레지스터 R2의 하위 16비트의 부호를 상위 16비트로 확장하고 있다. 피제수 레지스터 R2의 하위16비트의 부호비트에는 상기 처리(6)의 DIVOS 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인 레지스터 R0과 제어비트 레지스터(3)을 가산하고 있다. 제어비트 레지스터(3)의 값이 0인 경우는 피제수 레지스터 R2의 값은 ADDC명령 실행전과 변함이 없고, 제어비트 레지스터(3)의 값이 1인 경우는 피제수 레지스터 R2에 저장된 몫을 1의 보수에서 2의 보수로 변환한 것으로 된다. 이 결과, 정확한 몫을 얻을수가 있다.
제53도에 있어서 상기 명령 ADDC의 이하에 기술된 명령 DIV0S~명령EXTS. W는 나머지를 구할때에 필요한 처리로 된다.
(12) DIVOS 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비트로써 출력한다. 연산회로(10)은 2입력의 배타적 논리합을 채택해서 출력한다.
(13) MOVT R0
이 명령은 제66도 및 제79도에 도시되는 바와같이 T비트의 값(보정전의 나머지의 부호)를 레지스터 R0에 저장한다. 이러한 처리에 있어서 산술논리연산회로 (8)은 전체비트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으로 되어 있다. 명령 ROTCR R0은 제68도 및 제79도에 도시되어 있는 바와같이 그와같은 레지스터 R0의 LSB를 T비트에 저장하는 처리를 실행한다. 이 처리에 있어서 시프터(4)는 MSB로 T비트를 시프트인하면서 레지스터 R0의 값을 오른쪽으로 시프트하고, 시프트아우트된 LSB를 T비트에 저장한다. 산술논리 연산회로 (8)은 A포트입력을 스루로 출력한다.
(16) BF L1
이 명령은 T비트의 값이 0일때에 라벨L1이 붙은 명령으로 분기하는 것을 지시하고, T비트의 값이 1일때에는 이 BF명령의 다음의 명령 DIVOS를 실행하는 것을 지시한다.
(17) DIVOS R1, R4
이 명령은 이것에 계속해서 실행되는 명령 ROTCR 및 명령 DIV1과 함께 나머지의 보정을 실행한다. 이때, 레지스터 R4의 상위 16비트에는 보정전의 나머지가 저장되어 있으며, 레지스터 R1의 상위 16비트에는 제수가 저장되어 있다. 양자의 부호가 다를때는 가산, 일치할때에는 감산을 실행하게 된다. 이 때문에 해당 DIVOS명령에서는 제69도 및 제80도에 도시되는 바와같이 Q비트에 나머지(보정전)의 부호, M비트에 제수의 부호를 저장하고, 후기 명령DIV1에 있어서의 가감산의 판정에 공급된다. T비트에는 Q비트와 M비트의 배타적 논리합의 결과가 저장된다. 이 처리에 있어서, 시프터(4)는 입력의 MSB를 Q비트에 출력한다. 부호확장회로(17)은 입력을 스루로 출력한다. 산술논리 연산회로 (8)은 B포트입력의 MSB(부호비트)를 출력한다. 연산회로(10)은 2입력의 배타적 논리합을 채택해서 출력한다.
(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의 전에 명령 R0, TCL 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] DIVS0/DIVOU/DIV1(스텝제산)명령
여기서, 상기 설명에서 사용한 DIVOS명령 및 DIV1명령의 동작예와 사용예에 대해서 설명한다. 이하에 나타내는 내용은 상기항목[17]의 명령 일람에 있어서의 전제조건을 공통으로 한다. 그 항목에 포함되는 DIV1명령등이라 함은 C언어로 표기된 동작예에 있어서 그의 세세한 부분에서 상위하다.
서식 DIV1 Rm, Rn
DIVOS Rm, Rn
DIVOU
설명 범용 레지스터Rn의 내용 32비트를 Rm의 내용에서 1스텝제산하고, 결과의 1비트를 T비트에 저장한다. DIVOS는 부호화 제산용의 초기화명령에서 피제수(Rn)의 MSB를 Q비트에, 제수(Rm)의 MSB를 M비트에, M비트와 Q비트의 EOR을 T비트에 저장한다. DIVOU는 부호없음 제산용의 초기화명령에서 M/Q/T비트를 0으로 클리어한다. DIV1을(필요하다면 ROTCL과 조합해서)제수의 비트수 분만큼 반복하는 것에 의해 몫을 얻는다. 이 반복중에는 지정한 레지스터와 M/Q/T 비트에 중간결과를 저장하고 있다. 이들을 불필요하게 소프트웨어로 리라이트하면, 연산결과를 보증할수 없게 된다.
제로제산과 오버 플로우의 검출 및 잉여의 연산은 준비하지 않고 있다. 제산의 시퀀스는 하기 사용예를 참고로 할 수 있다.
동작 extern unsigned char Q,M,T;
extern unsigned long PC,R[16]
DIVOU() /* DIVOU */
{
M=Q=T=0;
PC+=2;
}
DIVOS(long m, long n) /* DIVOS Rm,Rn */
{
if ((R[n] & 0x80000000)==0) Q=0;
else Q=1;
if ((R[m] & 0x80000000)==0) M=0;
else M=1;
T=!(M==Q);
PC+=2;
}
DIV1(long m, long n) /* DIV1 Rm,Rn */
{
unsiagned long tmp0;
unsigned char old_q, tmp1;
old_q=Q;
Q=(unsigned char)((0x80000000 & R[n])!=0);
R[n]<<=1;
R[n] | = (unsigned long)T;
switch(old_q){
case 0;
switch(M){
case0;
tmp0=R[n];
R[n]-=R[m];
tmp1=(R[n]>tmp0);
switch(Q){
case 0;
Q=tmp1;
break;
case 1;
Q=(unsigned char)(tmp1==0);
break;
}
break;
case 1;
tmp0=R[n];
R[n]+=R[m];
tmp1=(R[n]<tmp0);
switch(Q){
case 0;
Q=(unsigned char)(tmp1==0);
break;
case 1;
Q=tmp1;
break;
}
break;
}
break;
case 1;
switch(M){
case0;
tmp0=R[n];
R[n]+=R[m];
tmp1=(R[n]<tmp0);
switch(Q){
case 0;
Q=tmp1;
break;
case 1;
Q=(unsigned char)(tmp1==0);
break;
}
break;
case 1;
tmp0=R[n];
R[n]-=R[m];
tmp1=(R[n]>tmp0);
switch(Q){
case 0;
Q=(unsigned char)(tmp1==0);
break;
case 1;
Q=tmp1;
break;
}
break;
}
break;
}
T=(Q==M);
PC+=2;
}
사용예1 R1(32bit)÷R0(16bit)=R1(16bit):부호없음
SL16 R0 ; 제수를 상위16비트, 하위16비트를 0으로 설정
TEST R0,R0 ; 제로제산 체크를 실행한다. TEST R0, R0는 R0와 R0 논리곱이 0일때 T비트를 1로하고, 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):부호없음
TESTR 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(32bit)÷R0(16bit)=R1(16bit):부호화
SL16 R0 ; 제수를 상위16비트, 하위16비트를 0으로 설정
EXTS R1,R1 ; 피제수는 부호확장해서 32비트
EOR R2,R2 ; R2=0
DIVOS R2,R1 ;
SUBC R2,R1 ; 피제수가 부일때 -1한다.
DIVOS 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(32bit)÷R0(16bit)=R2(16bit):부호화
EOR R3,R3 ;
DIVOS R3,R2 ;
SUBC R1,R1 ; 피제수는 부호확장해서 64비트(R1 : R2)
SUBC R3,R2 ; 피제수가 부일때 -1한다.
DIVOS 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 (96)

1개의 반도체칩상에 형성된 마이크로컴퓨터로서, 여러개의 32비트 범용 레지스터를 갖는 CPU;
ROM 및;
상기 CPU와 상기 ROM에 결합된 데이타버스를 갖고,
상기 ROM에 저장된 각각의 명령은 16비트로 고정길이인 것을 특징으로 하는 마이크로컴퓨터.
제1항에 있어서,
상기 데이타버스에 결합된 캐시메모리를 더 같는 것을 특징으로 하는 마이크로컴퓨터.
제1항에 있어서,
상기 데이타버스에 결합된 다이렉트 메모리 액세스 컨트롤러(DMAC)를 더 갖는 것을 특징으로 하는 마이크로컴퓨터.
제1항에 있어서,
상기 데이타버스에 결합된 랜덤 액세스 메모리(RAM)을 더 갖는 것을 특징으로 하는 마이크로컴퓨터.
제1항에 있어서,
상기 CPU는 32비트의 프로그램 카운터 레지스터를 더 갖는 것을 특징으로 하는 마이크로컴퓨터.
제1항에 있어서,
상기 CPU는 32비트 길이의 프로그램 카운터를 더 갖고,
상기 데이타버스는 32비트 폭인 것을 특징으로 하는 마이크로컴퓨터.
제2항에 있어서,
상기 데이타버스는 32비트 폭인 것을 특징으로 하는 마이크로컴퓨터.
제3항에 있어서,
상기 데이타버스는 32비트 폭인 것을 특징으로 하는 마이크로컴퓨터.
제4항에 있어서,
상기 데이타버스는 32비트 폭인 것을 특징으로 하는 마이크로컴퓨터.
1개의 반도체칩상에 형성되고,
여러개의 범용레지스터를 갖고,
상기 여러개의 범용레지스터의 각각은 32비트 길이이고,
16비트 고정길이 명령 포맷의 명령세트로부터의 명령만을 처리할 수 있는 것을 특징으로 하는 중앙처리장치.
제10항에 있어서,
상기 범용레지스터의 수는 16인 것을 특징으로 하는 중앙처리장치.
제10항에 있어서,
상기 중앙처리장치에 의해서 처리될 상기 명령중의 소정의 명령은 상기 여러개의 범용 레지스터에서 2개의 범용 레지스터를 지정하기 위한 영역을 갖는 것을 특징으로 하는 중앙처리장치.
제10항에 있어서,
32비트 길이의 프로그램 카운터 레지스터를 더 갖는 것을 특징으로 하는 중앙처리장치.
제11항에 있어서,
상기 범용 레지스터의 수는 16이고,
상기 중앙처리장치에 의해서 처리될 상기 명령중의 소정의 명령은 상기 여러개의 범용 레지스터에서 2개의 범용 레지스터를 지정하기 위한 영역을 갖는 것을 특징으로 하는 중앙처리장치.
제11항에 있어서,
상기 중앙처리장치에 의해서 처리될 상기 명령중의 소정의 명령은 상기 여러개의 범용 레지스터에서 2개의 범용 레지스터를 지정하기 위한 영역을 갖는 것을 특징으로 하는 중앙처리장치.
여러개의 32비트 범용 레지스터 및;
16비트 고정길이 명령 포맷의 명령세트로부터의 명령만을 처리하는 수단을 갖는 CPU를 갖는 RISC형 마이크로 프로세서.
제16항에 있어서,
32비트 길이의 프로그램 카운터 레지스터를 더 갖는 것을 특징으로 하는 RISC형 마이크로 프로세서.
제17항에 있어서,
1개의 반도체칩상에 형성되는 것을 특징으로 하는 RISC형 마이크로 프로세서.
명령세트내의 명령을 처리할 수 있는 CPU로서,
여러개의 32비트 범용 레지스터;
32비트 프로그램 카운터;
베이스 어드레스 저장하는 32비트 베이스 레지스터 및;
서브루틴 처리로부터의 리턴 어드레스를 저장하는 32비트 처리 레지스터를 갖고,
상기 CPU에 의해서 처리될 상기 명령세트내의 상기 명령의 각각은 16비트 고정길이인 것을 특징으로 하는 CPU.
제19항에 있어서,
1개의 반도체칩상에 형성되는 것을 특징으로 하는 CPU.
32비트 범용 레지스터와 32비트 프로그램 카운터를 갖는 CPU;
캐시메모리 및;
상기 CPU와 상기 캐시메모리에 결합된 데이타버스를 갖고,
상기 캐시메모리에 저장된 각각의 명령은 16비트 고정길이인 1개의 반도체칩상에 형성된 것을 특징으로 하는 마이크로컴퓨터.
제21항에 있어서,
상기 데이타버스는 32비트 폭인 것을 특징으로 하는 마이크로컴퓨터.
32비트 범용 레지스터와 32비트 프로그램 카운터를 갖는 CPU;
상기 CPU에 공급될 명령을 저장하는 메모리 및;
상기 CPU와 상기 메모리에 결합된 데이타버스를 갖고,
상기 데이타버스는 32비트 폭이고,
상기 메모리에 저장된 각각의 명령은 16비트 고정길이인 것을 특징으로 하는 마이크로컴퓨터.
제23항에 있어서,
1개의 반도체칩상에 형성되는 것을 특징으로 하는 마이크로컴퓨터.
제24항에 있어서,
상기 메모리는 ROM인 것을 특징으로 하는 마이크로컴퓨터.
제24항에 있어서,
상기 메모리는 캐시메모리인 것을 특징으로 하는 마이크로컴퓨터.
명령세트내의 명령을 처리할 수 있는 CPU로서,
여러개의 32비트 범용 레지스터 ALC;
프로그램 카운터 레지스터를 갖고,
상기 CPU에 의해서 처리될 상기 명령세트내의 상기 명령의 각각은 16비트 고정길이이고,
상기 프로그램 카운터 레지스터의 비트 길이는 각각의 상기 명령의 비트 길이보다 큰 것을 특징으로 하는 CPU.
제27항에 있어서,
상기 프로그램 카운터 레지스터의 상기 비트 길이는 32비트인 것을 특징으로 하는 CPU.
제28항에 있어서,
1개의 반도체칩상에 형성되는 것을 특징으로 하는 CPU.
16비트 고정길이 명령 포맷의 명령세트로부터의 명령만을 처리하고, 여러개의 32비트 범용 레지스터를 갖는 프로세서 및;
상기 프로세서에 공급될 명령을 저장하는 메모리를 갖는 1개의 반도체칩상에 형성된 것을 특징으로 하는 마이크로컴퓨터.
제30항에 있어서,
상기 프로세서와 상기 메모리에 결합된 32비트 폭의 데이타버스를 더 갖는 것을 특징으로 하는 마이크로컴퓨터.
제31항에 있어서,
상기 메모리는 캐시메모리인 것을 특징으로 하는 마이크로컴퓨터.
제31항에 있어서,
상기 메모리는 ROM인 것을 특징으로 하는 마이크로컴퓨터.
1개의 반도체칩에 형성되고,
여러개의 32비트 길이의 범용 레지스터와 32비트 길이의 명령레지스터를 갖고,
16비트 고정길이 명령이 처리되는 것인 것을 특징으로 하는 RISC형 중앙처리장치.
제34항에 있어서,
상기 명령레지스터는 2개의 상기 16비트 고정길이 명령을 페치하는 것인것을 특징으로 하는 RISC형 중앙처리장치.
제35항에 있어서,
상기 중앙처리장치는 상기 명령레지스터에서 공급된 상기 16비트 고정길이 명령을 디코드하는 16비트 길이의 명령디코더를 더 갖는 것을 특징으로 하는 RISC형 중앙처리장치.
제36항에 있어서,
상기 중앙처리장치는 32비트 길이의 프로그램 카운터를 더 갖는 것인 것을 특징으로 하는 RISC형 중앙처리장치.
제37항에 있어서,
상기 16비트 고정길이 명령으로서 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되는 것을 특징으로 하는 RISC형 중앙처리장치.
제38항에 있어서,
상기 프로그램 카운터는 상기 명령레지스터에 페치된 명령의 어드레스를 저장하는 것인 것을 특징으로 하는 RISC형 중앙처리장치.
제39항에 있어서,
상기 중앙처리장치는 파이프라인 처리를 실행하고,
상기 파이프라인 처리에 있어서 사용되는 상기 범용 레지스터의 경합을 체크하는 회로를 더 갖는 것인 것을 특징으로 하는 RISC형 중앙처리장치.
1개의 반도체칩에 형성되고,
여러개의 32비트 길이의 범용 레지스터와 32비트 길이의 명령레지스터를 갖고,
16비트 고정길이 명령 포맷의 명령세트의 명령을 처리하는 것인 것을 특징으로 하는 중앙처리장치.
제41항에 있어서,
상기 명령레지스터는 2개의 16비트 고정길이 명령을 페치하는 것인 것을 특징으로 하는 중앙처리장치.
제42항에 있어서,
상기 중앙처리장치는 상기 명령레지스터에 공급된 상기 16비트 고정길이 명령을 디코드하는 16비트 길이의 명령디코더를 더 갖는 것인 것을 특징으로 하는 중앙처리장치.
제43항에 있어서,
상기 중앙처리장치 32비트 길이의 프로그램 카운터를 더 갖는 것인 것을 특징으로 하는 중앙처리장치.
제44항에 있어서,
상기 명령세트에는 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되어 있는 것을 특징으로 하는 중앙처리장치.
제45항에 있어서,
상기 프로그램 카운터는 상기 명령레지스터에 페치된 명령의 어드레스를 저장하는 것인 것을 특징으로 하는 중앙처리장치.
제46항에 있어서,
상기 중앙처리장치는 파이프라인 처리를 실행하고,
상기 파이프라인 처리에 있어서 사용되는 상기 범용 레지스터의 경합을 체크하는 회로를 더 갖는 것인 것을 특징으로 하는 중앙처리장치.
1개의 반도체칩상에 형성되고, 16비트 고정길이 명령이 처리되는 RISC형 중앙처리장치로서,
여러개의 32비트 길이의 범용 레지스터와 32비트 길이의 프로그램 카운터를 갖고,
상기 16비트 고정길이 명령으로서 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되는 것을 특징으로 하는 RISC형 중앙처리장치.
제48항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 이미디어트값을 이용해서 연산할 수 있는 것을 특징으로 하는 RISC형 중앙처리장치.
제48항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 데이타는 점프지를 지정하는 어드레스인 것을 특징으로 하는 RISC형 중앙처리장치.
제48항에 있어서,
상기 중앙처리장치는 상기 명령을 페치하기 위한 32비트 길이의 명령레지스터를 더 갖고,
상기 프로그램 카운터는 상기 명령레지스터에 페치된 명령의 어드레스를 저장하는 것인 것을 특징으로 하는 RISC형 중앙처리장치.
제51항에 있어서,
상기 명령레지스터에는 16비트 고정길이 명령이 2개 페치되는 것을 특징으로 하는 RISC형 중앙처리장치.
제52항에 있어서,
상기 명령레지스터에는 32비트 데이타버스를 거쳐서 2개의 16비트 고정길이 명령이 공급되는 것을 특징으로 하는 RISC형 중앙처리장치.
여러개의 32비트 길이의 범용 레지스터와 32비트 길이의 프로그램 카운터를 갖고,
16비트 고정길이 명령 포맷의 명령세트의 명령을 처리하고,
1개의 반도체칩상에 형성된 중앙처리장치로서,
상기 명령세트에는 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되어 있는 것을 특징으로 하는 중앙처리장치.
제54항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 이미디어트값을 이용해서 연산할 수 있는 것을 특징으로 하는 중앙처리장치.
제54항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 데이타는 점프지를 지정하는 어드레스인 것을 특징으로 하는 중앙처리장치.
제54항에 있어서,
상기 중앙처리장치는 상기 명령을 페치하기 위한 32비트 길이 명령레지스터를 더 갖고,
상기 프로그램 카운터는 상기 명령레지스터에 페치된 명령의 어드레스를 저장하는 것인 것을 특징으로 하는 중앙처리장치.
제57항에 있어서,
상기 명령레지스터에는 16비트 고정길이 명령이 2개 페치되는 것인 것을 특징으로 하는 중앙처리장치.
제58항에 있어서,
상기 명령레지스터에는 32비트의 데이타버스를 거쳐서 2개의 16비트 고정길이 명령이 공급되는 것인 것을 특징으로 하는 중앙처리장치.
1개의 반도체칩상에 형성되고, 16비트 고정길이 명령이 처리되는 RISC형 중앙처리장치로서,
여러개의 32비트 길이의 범용 레지스터, 명령을 페치하기 위한 32비트 길이의 명령레지스터 및 32비트 길이의 프로그램 카운터를 갖고,
상기 16비트 고정길이 명령으로서 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되는 것을 특징으로 하는 중앙처리장치.
제60항에 있어서,
상기 중앙처리장치는 상기 명령레지스터에 페치된 2개의 명령중의 1개를 디코드하는 16비트 길이의 명령디코더를 더 갖는 것인 것을 특징으로 하는 중앙처리장치.
제60항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 이미디어트값을 이용해서 연산할 수 있는 것인 것을 특징으로 하는 중앙처리장치.
제60항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 데이타는 점프지를 지정하는 어드레스인 것을 특징으로 하는 중앙처리장치.
여러개의 32비트 길이의 범용 레지스터, 명령을 페치하기 위한 32비트 길이의 명령레지스터 및 32비트 길이의 프로그램 카운터를 갖고,
16비트 고정길이 명령포맷의 명령세트의 명령을 처리하고,
1개의 반도체칩상에 형성된 중앙처리장치로서,
상기 명령세트에는 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되는 것을 특징으로 하는 중앙처리장치.
제64항에 있어서,
상기 중앙처리장치는 상기 명령레지스터에 페치된 2개의 명령중의 1개를 디코드하는 16비트 길이우ㅏ 명령디코더를 더 갖는 것인 것을 특징으로 하는 중앙처리장치.
제64항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 이미디어트값을 이용해서 연산할 수 있는 것인 것을 특징으로 하는 중앙처리장치.
제64항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 제2 어드레스에 저장되어 있는 데이타는 점프지를 지정하는 어드레스인 것을 특징으로 하는 중앙처리장치.
제64항에 있어서,
상기 16비트 고정길이 명령으로서
상기 디스플레이스먼트와 데이타길이를 나타내는 정보를 갖고,
또 상기 데이타길이를 나타내는 정보가 16비트를 나타낼 때에 상기 디스플레이스먼트를 1비트 시프트시키고, 상기 프로그램 카운터에 저장되어 있는 어드레스에 상기 시프트된 디스플레이스먼트를 부가한 어드레스에 저장되어 있는 데이타를 지정하는 명령이 포함되는 것을 특징으로 하는 중앙처리장치.
제64항에 있어서,
상기 16비트 고정길이 명령으로서
상기 디스플레이스먼트와 데이타길이를 나타내는 정보를 갖고,
또 상기 데이타길이를 나타내는 정보가 16비트를 나타낼 때에 상기 디스플레이스먼트를 2비트 시프트시키고, 상기 프로그램 카운터에 저장되어 있는 어드레스에 상기 시프트된 디스플레이스먼트를 부가한 어드레스에 저장되어 있는 데이타를 지정하는 명령이 포함되는 것을 특징으로 하는 중앙처리장치.
명령을 저장한 명령메모리, 상기 명령을 처리하는 중앙처리장치 및 상기 중앙처리장치와 상기 명령메모리에 결합된 데이타버스를 1개의 반도체칩에 형성하고,
상기 중앙처리장치는 여러개의 32비트 범용 레지스터와 32비트 명령레지스터를 갖고,
상기 명령메모리에는 16비트 고정길이 명령이 저장되어 이루어지는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제70항에 있어서,
상기 명령레지스터는 2개의 상기 16비트 고정길이 명령을 페치하는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제71항에 있어서,
상기 중앙처리장치는 상기 명령레지스터에서 공급된 1개의 상기 16비트 고정길이 명령을 디코드하는 16비트 길이의 명령디코더를 더 갖는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제71항에 있어서,
상기 중앙처리장치는 32비트 길이의 프로그램 카운터를 더 갖는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제73항에 있어서,
상기 16비트 고정길이 명령으로서 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되는 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제74항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 이미디어트값을 이용해서 연산할 수 있는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제74항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 데이타는 점프지를 지정하는 어드레스인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제73항에 있어서,
상기 16비트 고정길이 명령으로서
상기 디스플레이스먼트와 데이타길이를 나타내는 정보를 갖고,
또 상기 데이타길이를 나타내는 정보가 16비트를 나타낼 때에 상기 디스플레이스먼트를 1비트 시프트시키고, 상기 프로그램 카운터에 저장되어 있는 어드레스에 상기 시프트된 디스플레이스먼트를 부가한 어드레스에 저장되어 있는 데이타를 지정하는 명령이 포함되는 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제73항에 있어서,
상기 16비트 고정길이 명령으로서
상기 디스플레이스먼트와 데이타길이를 나타내는 정보를 갖고,
또 상기 데이타길이를 나타내는 정보가 32비트를 나타낼 때에 상기 디스플레이스먼트를 2비트 시프트시키고, 상기 프로그램 카운터에 저장되어 있는 어드레스에 상기 시프트된 디스플레이스먼트를 부가한 어드레스에 저장되어 있는 데이타를 지정하는 명령이 포함되는 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제74항에 있어서,
상기 프로그램 카운터는 상기 명령레지스터에 페치된 명령의 어드레스를 저장하는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제79항에 있어서,
상기 중앙처리장치는 파이프라인 처리를 실행하고,
상기 파이프라인 처리에 있어서 사용되는 상기 범용 레지스터의 경합을 체크하는 회로를 더 갖는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제71항에 있어서,
상기 데이타버스에 결합된 캐시메모리를 더 갖는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제81항에 있어서,
상기 데이타버스에 결합된 다이렉트 메모리 액세스 컨트롤러를 더 갖는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제82항에 있어서,
상기 데이타버스에 결합된 랜덤 액세스 메모리를 더 갖는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제82항에 있어서,
상기 데이타버스는 32비트 폭인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제84항에 있어서,
상기 데이타버스를 거쳐서 명령메모리에 저장된 상기 16비트 고정길이 명령이 상기 명령레지스터에 공급되는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제85항에 있어서,
상기 데이타버스를 거쳐서 상기 16비트 고정길이 명령중의 2개의 명령이 상기 명령레지스터에 공급되는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
16비트 고정길이 명령을 저장한 명령메모리, 상기 명령을 처리하는 중앙처리장치 및 상기 중앙처리장치와 상기 명령메모리에 결합된 데이타버스를 1개의 반도체칩상에 형성하고,
상기 중앙처리장치는 여러개의 32비트 길이의 범용 레지스터와 어드레스를 저장하는 32비트 길이의 프로그램 카운터를 갖고,
상기 16비트 고정길이 명령으로서 상기 프로그램 카운터내의 제1 어드레스에 가산해서 제2 어드레스를 나타내기 위한 디스플레이스먼트를 갖는 명령이 포함되는 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제87항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 이미디어트값을 이용해서 연산할 수 있는 것인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제87항에 있어서,
상기 프로그램 카운터에 저장되어 있는 상기 제1 어드레스에 상기 디스플레이스먼트를 부가한 상기 제2 어드레스에 저장되어 있는 데이타는 점프지를 지정하는 어드레스인 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제87항에 있어서,
상기 16비트 고정길이 명령으로서
상기 디스플레이스먼트와 데이타길이를 나타내는 정보를 갖고,
또 상기 데이타길이를 나타내는 정보가 16비트를 나타낼 때에 상기 디스플레이스먼트를 1비트 시프트시키고, 상기 프로그램 카운터에 저장되어 있는 어드레스에 상기 시프트된 디스플레이스먼트를 부가한 어드레스에 저장되어 있는 데이타를 지정하는 명령이 포함되는 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
제87항에 있어서,
상기 16비트 고정길이 명령으로서
상기 디스플레이스먼트와 데이타길이를 나타내는 정보를 갖고,
또 상기 데이타길이를 나타내는 정보가 16비트를 나타낼 때에 상기 디스플레이스먼트를 2비트 시프트시키고, 상기 프로그램 카운터에 저장되어 있는 어드레스에 상기 시프트된 디스플레이스먼트를 부가한 어드레스에 저장되어 있는 데이타를 지정하는 명령이 포함되는 것을 특징으로 하는 RISC형 마이크로 컴퓨터.
1개의 반도체칩상에 형성되고, 명령세트내의 명령을 처리할 수 있는 CPU로서,
상기 CPU는
상기 CPU에 의해서 처리될 상기 명령세트내의 상기 명령을 저장하는 명령메모리에서 명령을 페치하는 명령레지스터;
각각이 32비트 길이인 여러개의 범용 레지스터 및;
상기 명령레지스터내에 페치된 상기 명령이 공급되고, 상기 명령레지스터에서 공급된 상기 명령을 디코드하는 디코드수단을 구비하고,
상기 CPU에 의해서 처리될 상기 명령세트내의 명령의 각각의 명령길이는 16비트 고정길이이고,
상기 명령레지스터에서 상기 디코드수단으로 공급된 상기 명령의 비트길이는 16비트인 것을 특징으로 하는 CPU.
제92항에 있어서,
상기 명령레지스터에 페치될 명령의 어드레스를 저장하는 프로그램 카운터를 더 갖는 것을 특징으로 하는 CPU.
제93항에 있어서,
데이타의 처리를 실행하는 실행유닛을 더 갖고,
상기 여러개의 범용 레지스터의 각각은 상기 디코드수단의 디코드결과에 따라서 선택되고,
상기 여러개의 범용 레지스터 중의 적어도 1개를 이용하고 있는 동안에, 상기 CPU는 파이프라인처리를 소정의 스테이지순으로 실행하는 것에 의해서 1개의 명령을 실행하고,
상기 CPU가 연속적으로 적어도 2개의 명령을 실행할 때에, 상기 CPU는 파이프라인처리에 있어서의 소정의 스테이지를 실행하고,
상기 CPU는 상기 파이프라인처리에 있어서 사용되고 있는 범용 레지스터의 경합을 체크하는 레지스터경합 체크회로를 더 갖는 것을 특징으로 하는 CPU.
제94항에 있어서,
상기 명령세트내의 소정의 명령은 디스플레이스먼트를 갖고, 상기 실행유닛이 16비트 이상의 이미디어트값 데이타의 처리를 실행할 때에, 상기 프로그램 카운터내의 어드레스에 상기 디스플레이스먼트의 값을 부가하는 것에 의해서 나타내어진 어드레스에 저장된 데이타가 상기 실행유닛으로 공급되는 것을 특징으로 하는 CPU.
제94항에 있어서,
상기 명령세트내의 명령은 상기 여러개의 범용 레지스터 중에서 2개의 범용레지스터를 지정하는 영역을 갖는 것을 특징으로 하는 CPU.
KR1019920010873A 1991-06-24 1992-06-23 마이크로컴퓨터및제산회로 KR100294559B1 (ko)

Priority Applications (1)

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

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP91-178739 1991-06-24
JP17873991 1991-06-24
JP92-016434 1992-05-21
JP4154525A JP2984463B2 (ja) 1991-06-24 1992-05-21 マイクロコンピュータ

Related Child Applications (2)

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

Publications (2)

Publication Number Publication Date
KR930001056A KR930001056A (ko) 1993-01-16
KR100294559B1 true KR100294559B1 (ko) 2001-09-17

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 After (2)

Application Number Title Priority Date Filing Date
KR1019970026157A KR100294560B1 (ko) 1991-06-24 1997-06-20 마이크로컴퓨터및제산회로
KR1019970026158A KR100268635B1 (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

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0427245A2 (en) * 1989-11-08 1991-05-15 Hitachi, Ltd. Data processor capable of simultaneously executing two instructions

Family Cites Families (53)

* 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
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0427245A2 (en) * 1989-11-08 1991-05-15 Hitachi, Ltd. Data processor capable of simultaneously executing two instructions

Also Published As

Publication number Publication date
HK1039661B (zh) 2005-02-25
DE69233361D1 (de) 2004-07-08
DE69233412D1 (de) 2004-10-21
US20050251651A1 (en) 2005-11-10
KR100294560B1 (ko) 2001-09-17
KR100268635B1 (ko) 2000-10-16
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
KR100294559B1 (ko) 마이크로컴퓨터및제산회로
US6560697B2 (en) Data processor having repeat instruction processing using executed instruction number counter
US5901301A (en) Data processor and method of processing data
US7487338B2 (en) Data processor for modifying and executing operation of instruction code according to the indication of other instruction code
US20070174596A1 (en) Data processor
US6484253B1 (en) Data processor
US5924114A (en) Circular buffer with two different step sizes
JPS6014338A (ja) 計算機システムにおける分岐機構
JP3105197B2 (ja) 除算回路及び除算方法
JP3215085B2 (ja) 中央処理装置及びマイクロコンピュータ
JP3539914B2 (ja) マイクロコンピュータ
JP3205544B2 (ja) 中央処理装置
JPH1173314A (ja) マイクロプロセッサ

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
G170 Re-publication after modification of scope of protection [patent]
FPAY Annual fee payment

Payment date: 20120322

Year of fee payment: 12

EXPY Expiration of term