CN1286004C - 支持程序编码长度减小的微处理器 - Google Patents
支持程序编码长度减小的微处理器 Download PDFInfo
- Publication number
- CN1286004C CN1286004C CNB021574936A CN02157493A CN1286004C CN 1286004 C CN1286004 C CN 1286004C CN B021574936 A CNB021574936 A CN B021574936A CN 02157493 A CN02157493 A CN 02157493A CN 1286004 C CN1286004 C CN 1286004C
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- code
- stored
- impact damper
- Prior art date
- Legal status (The legal status 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 status listed.)
- Expired - Lifetime
Links
- 238000003860 storage Methods 0.000 claims abstract description 152
- 239000000872 buffer Substances 0.000 claims abstract description 59
- 230000005055 memory storage Effects 0.000 claims description 33
- 238000000034 method Methods 0.000 claims description 28
- 238000001514 detection method Methods 0.000 claims description 18
- 230000008569 process Effects 0.000 claims description 17
- 238000006073 displacement reaction Methods 0.000 claims description 5
- 238000011084 recovery Methods 0.000 claims description 3
- 108091063445 miR-13 stem-loop Proteins 0.000 description 33
- 238000012546 transfer Methods 0.000 description 24
- 101100490563 Caenorhabditis elegans adr-1 gene Proteins 0.000 description 15
- 101100388220 Caenorhabditis elegans adr-2 gene Proteins 0.000 description 12
- 101100122529 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) GON7 gene Proteins 0.000 description 11
- 238000012545 processing Methods 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 6
- 238000004321 preservation Methods 0.000 description 6
- 238000012856 packing Methods 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 101100508919 Arabidopsis thaliana IPT6 gene Proteins 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 239000000654 additive Substances 0.000 description 2
- 230000000996 additive effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30156—Special purpose encoding of instructions, e.g. Gray coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
提供一台支持对编码长度减小的微处理器,其中指令从一个基本的一字代码以0.5字为单位扩展。从外部存储器取出的指令的一个字经由以半字为单位运行的指令缓冲器和选择器转移到译码寄存器,然后被译码器译码。一个存储单元存储指令缓冲器中存储的一条指令的状态。一个控制单元根据译码器的指示和存储单元中存储的状态控制选择器,因而指令以半字为单位从指令缓冲器转移到译码寄存器。
Description
技术领域
本发明有关根据程序中的指示处理数据的一个微处理器,详细地说,涉及一个用来支持程序编码长度减小的微处理器。
背景技术
对于新的微处理器嵌入式产品,人们目前都希望具有高性能。为了实现这种高性能产品,微处理器的程序变得越来越长。然而,在微处理器嵌入式产品中,程序应该被存储在一个或多个ROM中,如果程序中采用的编码长度增大,一个ROM的容量和/或ROM的数量也要增加,这是研制廉价产品的一个障碍。因此,在研制这种产品时,需要尽可能地压缩编码长度。
压缩编码长度的一种常规技术对微处理器执行的每条指令的编码长度进行压缩(例如NEC的V800系列和日立的SH7000系列)。这种技术的微处理器执行的指令长度比数据总线、算术逻辑单元(ALU)或寄存器的长度(以下称为ALU长度)短。例如,微处理器执行16位指令,而ALU长度为32位。
该技术允许用16位指令来替代32位指令,从而排除了不必要的位,并有效压缩了程序的总编码长度。
然而,这种第一常规技术有下面所述的问题。
虽然指令长度比ALU长度要短,但指令长度应该等于或N倍于微处理器的指令译码器的长度(N是整数)。也就是说,一条指令以8位为单位扩展。例如,如果译码器为8位长,指令长度应该是8位、16位、24位、32位、...中的一个。该扩展单位不能减少到8位以下。因此,即使不需要8位来代表一个数值,也必须用8位。这就造成了编码长度的浪费。
图1示出了用于常规微处理器中的一条指令的格式。指令“add #4,d0”指示微处理器将立即值“4”加到寄存器d0中存储的一个值中。该指令共采用16位,其中8位用于指示操作码“add #4,d0”,8位用于指定立即值“#n”,在该例中为“4”。然而,用8位来表示“4”太多。从“-8”到“+7”的一个整数只需4位来表示。这就是说,对于只需12位的指令用了16位,从而造成了编码长度的浪费。
压缩编码长度的第二种常规技术是从/向一个存储器有效地读出/写入数据的方法。这通过例如改进一条数据转移指令中采用的寻址模式来实现。
图2A和图2B都是从/向存储器读出/写入数据的程序,都指示微处理器读出储存在存储器中的一个值,对该值进行计算,并将计算结果存入存储器。
图2A中的指令a1是一条装入指令,用该指令将存储在用一个绝对地址指定的存储器存储单元中的一个数据读到寄存器D0中。指令a2是一条加指令,用该指令将存储在寄存器D1中的一个值与寄存器D0中的一个值相加,并将结果存入寄存器D0中。指令a3是一条存储指令,用该指令将存储在寄存器D0中的一个值存储在用一个绝对地址指定的存储器存储单元中。这些指令的基本部分长度为8位。一个绝对地址的长度是16位。因此,图2A的程序的总编码长度为7个字节,也就是说,要用7个字节来完成从/向存储器的数据读出/写入。
在图2A的程序中,对于两个存储器存取的每一个均用了16位的绝对地址。在图2B的程序中,采用一个地址寄存器来进行存储器存取。
图2B的程序与图2A的不同之处在于:第一,它将存储器的一个绝对地址转移到一个地址寄存器中(指令b1),第二,它通过指定地址寄存器将数据从存储器转移到寄存器D0中(指令b2),第三,它通过指定地址寄存器将计算结果存储在存储器中(指令b4)。
虽然图2B的程序另外还包括一条将绝对地址转移到地址寄存器中的指令,但只有指令b1包括一个绝对地址。因此,与图2A的程序相比,总编码长度被减小了一个字节。
如果一组存储器存取所用的编码长度被减小,那么在微处理器中可以缩小大量的程序空间。
然而,第二常规技术的问题是地址寄存器当它们被用于指定存储器的绝对地址时被占用,因此,具有较少地址寄存器的处理器不可能总能采用这种方法。另外,由于微处理器,特别是内置式微处理器,常常从/向存储器读出/写入数据,地址寄存器不可能用于其它操作。
发明内容
因此,本发明的第一个目的是提供一台执行被有效减小的指令的微处理器,减小指令是通过解除指令长度应该等于或N倍于微处理器的指令译码器的长度(N是整数)的限制,从而使得产生的程序比具有同样内容的常规程序的编码长度要短。
本发明的第二个目的是提供一台不占用地址寄存器就能使得编码长度减小的微处理器。
第一个目的通过支持编码长度减小的一种微处理器来实现,该微处理器包括:一个用于译码指令的译码器,该指令长度为“w”,用表达式w=a+nb表示,其中“a”表示由所述译码器译码的指令的最小长度,“n”是0或大于0的整数,“b”是一个小于“a”的正整数,其中,一条指令被分为一个或多个代码,并且其中所述的指令至少包括长度为“a”的一条指令和长度为“(a+b)”的一条指令;一个执行装置,用于根据从由所述译码器译码的所述指令中得到的信息对数据进行处理,由所述微处理器译码和执行的程序包括长度为“a”的一条指令和长度为“(a+b)”的一条指令。
这个微处理器扩展指令时不必受到指令长度应该等于或n倍于微处理器的指令译码器的长度的限制(n为整数)。这就是说,微处理器以小于“a”的“b”为单位扩展指令,从而本发明减少了指令编码中包括的不必要的位,缩短了总程序长度。
在上述微处理器中,“a”的长度可能等于一个字,“b”的长度可能等于半个字,其中字和半个字是长度单位。
这个微处理器以半个字为单位扩展指令,这样指令长度“w”将是a、1.5a、2a、2.5a、3a、...中的任何一个。在这种情况下,由一条指令指定的信息量增加较少的位。例如,指令可以用更多的信息定义,并且数据可以用更多的信息指定。
微处理器可能进一步包括:一个用于保持一条预取指令的指令缓冲器;一个用于对每半个字存储保持在指令缓冲器中的指令一个状态的信息的存储装置;一个第一判断装置,用于根据译码装置译码的指令所获得的信息判断接下来要被译码的一个代码长度是否是半个字或一个字;和一个控制装置,用于根据第一判断装置判断的长度和存储在存储装置中的状态来控制指令缓冲器,使得存储在指令缓冲器中的指令的代码被转移到译码器,并且用于更新存储在指令缓冲器中的状态。
该微处理器在指令缓冲器中存储一条预取指令,并且对每半个字将预取指令的状态信息存储在存储器中和更新该信息。此外微处理器判断下一个代码长度是一个字还是半个字,这使得微处理器能判断下一个代码在指令缓冲器中以半个字为单位如何被定位。
微处理器的译码器可以包括:一个高位译码寄存器,用于存储一个代码的高位半个字;一个低位译码寄存器,用于存储此一代码的低位半个字;其中指令缓冲器包括:一个第一寄存器,用于存储最后取出的一个字代码;一个第二寄存器,用于存储比第一寄存器中存储的代码优先的一个字代码;一个选择装置,用于根据控制装置的指示,有选择的转移一个代码到译码器;其中第一寄存器包括:一个第一高位寄存器,用于存储一个代码的高位半个字;一个第一低位寄存器,用于存储此一代码的低位半个字;其中第二寄存器包括:一个第二高位寄存器,用于存储一个代码的高位半个字;一个第二低位寄存器,用于存储此一代码的低位半个字;其中选择装置包括:一个高位选择装置,用于从第二高位寄存器、第二低位寄存器和低位译码寄存器中的任一个有选择的转移一个代码到高位译码寄存器;一个低位选择装置,用于从第二高位寄存器、第二低位寄存器和第一低位寄存器中的任一个有选择地转移一个代码到低位译码寄存器;其中存储装置存储任何一个下面所述的内容:指示第二高位寄存器和第二低位寄存器都没有存储代码的一个第一状态,指示第二高位寄存器存储一个代码而第二低位寄存器没有存储代码的一个第二状态,和指示第二高位寄存器和第二低位寄存器都存储一个代码的一个第三状态。
该微处理器取出1-字代码,并将它们分成半字代码之后存储在指令缓冲器中。一个选定的代码被以半字为单位独立地转移到译码寄存器。存储装置存储代码如何在指令缓冲器中定位的状态,该代码将在下一周期转移到译码寄存器。这使得微处理器能在指令缓冲器中存储必要的代码,并且将它们以半个字为单位独立地转移到译码寄存器来进行译码。
微处理器的控制装置可以控制选择装置,因而如果存储装置存储第二状态,而且第一判断装置判断接下来要被译码的一个代码长度为一个字,则高位选择装置将一个代码从第二高位寄存器转移到高位译码寄存器,以及低位选择装置将一个代码从第一低位寄存器转移到低位译码寄存器。
微处理器将存储在两个以上寄存器中的一个1-字代码转移到译码寄存器进行译码,这使得微处理器能够正确地译码和执行由两个地址指定的外存中两个以上存储单元内存储的一个1-字代码,并使得微处理器不受外存中定位代码的字定位限制。
微处理器的控制装置可以控制选择装置,因而如果存储装置存储第三状态,并且第一判断装置判断接下来要被译码的一个代码长度为半个字,那么高位选择装置将一个代码从低位译码寄存器转移到高位译码寄存器和低位选择装置将一个代码从第二低位寄存器转移到低位译码寄存器,并且将存储在存储装置中的信息从第三状态更新为第二状态。
微处理器只将一个半字代码从第二低位寄存器转移到译码寄存器,并用先前被译码的另一个半字代码对其进行译码,且对二者予以执行。这使得微处理器能够正确地译码和执行一个半字代码,即使该半字代码存储在外存中的一个低位位置。
微处理器的控制装置可以控制选择装置,因而如果存储装置存储第二状态,并且第一判断装置判断接下来要被译码的一个代码长度为半个字,则高位选择装置将一个代码从低位译码寄存器转移到高位译码寄存器和低位选择装置将一个代码从第二高位寄存器转移到低位译码寄存器,并且将存储在存储装置中的信息从第二状态更新为第三状态。
微处理器只将一个半字代码从第二高位寄存器转移到译码寄存器,并用先前被译码的另一个半字代码对其进行译码,并对二者予以执行。这使得微处理器能够正确地译码和执行一个半字代码,即使该半字代码存储在外存中的一个高位位置。
该微处理器可以进一步包括:一个第二判断装置,用于根据存储存储装置中的信息和从译码指令得到的信息,判断由译码器译码的一条指令是否是一条存储在外存储器中在半字位置结束的一个存储单元中的转移子程序指令,其中如果第二判断装置判断由译码器译码的一条指令是一条存储在外存储器中在半字位置结束的一个存储单元中的转移子程序指令,则当指定了一个子程序的一个返回地址后,该执行装置执行该子程序,该返回地址是通过将半个字加到半字位置得到的。
采用这样一种结构,即使一条转移子程序指令存储在外存中从一个半字边界开始的存储单元中,该转移子程序指令通常通过保存一个返回地址来予以执行,该返回地址与在一个字边界结束的转移子程序指令的地址具有相同的长度。结果,对堆栈的存取次数被减小,并阻止了对堆栈的不必要使用,从而改进了微处理器的吞吐量。
本发明的第二个目的是由支持代码长度减小的一种微处理器实现的,它包括:一个操作数地址缓冲器,用于保持目标存储器存取地址,其中操作数地址缓冲器与一个外部存储器相连;一个用于取指令的取指装置;一个指令检测装置,用于检测已被取指装置取出并准备访问外部存储器的一条指令;一个判断装置,用于判断由指令检测装置检测的指令是否指定存储在操作数地址缓冲器中的目标存储器存取地址;一个第一控制装置,用于控制操作数地址缓冲器,因而如果判断装置判定由指令检测装置检测的指令指定目标存储器存取地址,则操作数地址缓冲器中存储的地址被输出到外部存储器;一个第二控制装置,用于将从指令检测装置检测的指令的一个操作数中得到的地址存入操作数地址缓冲器,并且控制操作数地址缓冲器,因而如果判断装置判定指令不指定存储在操作数地址缓冲器中的目标存储器存取地址,则所存储的地址被输出到外部存储器。
这个微处理器可以访问一个存储器而不必指定任何绝对地址,并且也不必采用地址寄存器,这是因为如果该地址被指定为目标存储器存取地址,那么存储在一个操作数地址缓冲器中的地址被输出到该存储器。
另外,即使在存储器映象I/O中有许多对I/O端口的I/O存取,如同在内置式微处理器中那样,地址寄存器也不会占用。因此该微处理器可以有效地利用地址寄存器。
此外,当同一I/O端口在每个确定的周期被监控,并且I/O端口的一个值被重复装入时,或者当***设备通过一个I/O端口被控制,并且I/O端口的一个值在每个确定的周期被重写时,通过将存储在操作数地址缓冲器中的地址指定为目标存储器存取地址,地址寄存器能得到有效的使用。
地址寄存器增大的使用效率有助微处理器大大地减小编码长度,原因是较少绝对地址被转移到地址寄存器,较少数据从/向地址寄存器恢复/保存,并且地址寄存器可以用于许多其它目的。
该微处理器不仅成功地减小了编码长度,并且成功地加快了执行时间。其原因是,如果一地址被指定为一个目标存储器存取地址,由于存储在一个操作数地址缓冲器中的该地址被输出到存储器,计算地址的次数被减少,因此数据转移到ALU的次数被减少,并且计算的地址被较少转移到操作数地址缓冲器。
本发明的第二个目的也可以通过一种支持编码长度减小的微处理器来实现,它包括:一个用于包括对n个操作数地址缓冲器重复使用的缓冲器阵列,这些缓冲器分别将从一个立即处理的目标存储器存取地址至n倍于在过去对所述外部存储器的先前存取中使用的目标存储地址的地址存储起来,其中n是2或大于2的整数,并且其中所述缓冲器阵列与一个外部存储器相连接;一个用于取指令的取指装置;一个指令检测装置,用于检测已被所述取指装置取出并准备访问所述外部存储器的一条指令;一个判断装置,用于判断由所述指令检测装置检测的所述指令是否指定任何一个所述操作数地址缓冲器;一个第一控制装置,用于控制所述缓冲器阵列,使得如果所述判断装置断定由所述指令检测装置检测的所述指令指定所述操作数地址缓冲器,则所述地址缓冲器被输出到所述外部存储器;一个第二控制装置,用于将从指令检测装置检测的所述指令的一个操作数中得到的地址存入任何一个所述操作数地址缓冲器,并且控制所述缓冲器阵列,使得如果所述判断装置判定所述指令不指定任何一个操作数地址缓冲器,则所述存储地址被输出到所述外部存储器。
采用这样一种结构,微处理器通过选择存储在n个操作数地址缓冲器中的任何一个先前的目标存储器存取地址,可以从n个操作数地址缓冲器的如何一个中输出一目标存储器存取地址。这样微处理器可以访问一个存储器而不必指定任何绝对地址,并且不必采用地址寄存器,因为存储在操作数地址缓冲器中的地址被作为目标存储器存储地址被输出到存储器。
根据本发明的一种用于支持程序编码长度减小的微处理器,包括:一个用于译码指令的译码器,该指令长度为“w”,用表达式w=a+nb表示,其中“a”表示由所述译码器每次译码时的代码长度,“n”是0或大于0的整数,“b”是一个小于“a”的正整数,其中,一条指令被分为一个或多个代码,并且其中所述的指令至少包括长度为“a”的一条指令和长度为“(a+b)”的一条指令;一个执行装置,用于根据从由所述译码器译码的所述指令中得到的信息对数据进行处理;一个指令缓冲器,用于保持一条预取指令;一个存储装置,用于对每半个字存储保存在所述指令缓冲器中的所述指令的一个状态;一个第一判断装置,用于根据所述译码器译码的指令所获得的信息判断接下来要被译码的一个代码长度是否是半个字或一个字;一个控制装置,用于根据由所述第一判断装置判断的所述长度和存储在所述存储装置中的所述状态控制所述指令缓冲器,使得存储在所述指令缓冲器中的所述指令的代码被转移到所述译码器,并且用于更新存储在所述指令缓冲器中的所述状态;其中,所述译码器包括:一个高位译码寄存器,用于存储一个代码的高位半个字;一个低位译码寄存器,用于存储一个所述代码的低位半个字;所述指令缓冲器包括:一个第一寄存器,用于存储最后取出的一个字代码;一个第二寄存器,用于存储比所述第一寄存器中存储的所述代码优先的一个字代码;一个选择装置,用于根据所述控制装置的指示,有选择的转移一个代码到所述译码器;所述第一寄存器包括:一个第一高位寄存器,用于存储一个代码的高位半个字;一个第一低位寄存器,用于存储一个所述代码的低位半个字;所述第二寄存器包括:一个第二高位寄存器,用于存储一个代码的高位半个字;一个第二低位寄存器,用于存储一个所述代码的低位半个字;所述选择装置包括:一个高位选择装置,用于从所述第二高位寄存器、所述第二低位寄存器和所述低位译码寄存器中的任一个有选择的转移一个代码到所述高位译码寄存器;一个低位选择装置,用于从所述第二高位寄存器、所述第二低位寄存器和所述第一低位寄存器中的任一个有选择地转移一个代码到所述低位译码寄存器;所述存储装置存储任何一个下面所述的内容:指示所述第二高位寄存器和所述第二低位寄存器都没有存储一个代码的一个第一状态,指示所述第二高位寄存器存储一个代码而所述第二低位寄存器没有存储一个代码的一个第二状态,指示所述第二高位寄存器和所述第二低位寄存器都存储一个代码的一个第三状态。
根据本发明的一种微处理器,包括:一个译码器,用于逐条地对指令进行译码,并且输出译码的指令;和,一个执行装置,用于根据从由所述译码器译码的指令对数据进行处理,其中所述译码器包括多个译码单元,其中:(1)当一个代码指令具有等于一个最小指令长度乘以一个正整数所得到的长度时,所述译码器重复地以所述正整数的次数利用所有所述多个译码单元对所述代码指令进行译码;和,(2)当一个代码指令包括一个其长度等于所述最小指令长度乘以一个正整数所得到的长度的第一部分、并且还包括一个其长度等于所述最小指令长度乘以一个大于零且小于1的值所得到的长度的第二部分时,所述译码器重复地以所述正整数的次数利用所有所述多个译码单元对所述代码指令的所述第一部分进行译码,并且利用所述多个译码单元的一部分对所述代码指令的所述第二部分进行译码,由所述微处理器译码和执行的程序包括长度为“a”的一条指令和长度为“(a+b)”的一条指令。
附图说明
从下面结合示意本发明特定实施例的附图所作的描述,本发明的上述以及其它目的、优点和特性将变得显而易见。
图1示出了用于常规微处理器中的一条指令的格式。
图2A示出了包括两个绝对地址规格说明的一个常规程序。
图2B示出了包括采用地址寄存器的一条LOAD指令和一条STORE指令的一个常规程序。
图3是示意本发明第一实施例的一个微处理器结构的方框图。
图4是示意指令译码块100的结构的方框图。
图5示出了本发明第一实施例的一个微处理器的指令译码决100的状态。
图6示出了由本发明第一实施例的微处理器执行的两类指令格式。
图7A示出了一条包括5-半字节的指令的格式。
图7B示出了当指令存储在外存储器中从一个字节边界开始的存储单元时,图7A中所示的指令的1-半字节组成的代码是如何定位的。
图7C示出了当图7A中所示的指令被指令译码块100读出时,在每个时钟周期的指令流水线。
图8A示出了当指令存储在外部存储器中从一半字节边界开始的存储单元中时,图7A中所示的指令的一半字节组成的代码是如何定位的。
图8B示出了当图7A中所示的指令被指令译码块100读出时,在每个时钟周期的指令流水线。
图9示出了无条件转移指令“jmp”的格式。
图10的流程图示出了当指令“jsr”被执行时,本发明第一实施例的微处理器的运行。
图11A示出了存储在外存储器中起始于一个字节边界的存储单元中的指令“jsr”与返回地址的关系。
图11B示出了存储在外存储器中起始于半字节边界的存储单元中的指令“jsr”与返回地址的关系。
图12的方框图示出了本发明第二实施例的一台微处理器的结构。
图13示出了缓冲器OAB5、LDB6、STB7、IAB10和IFB11是如何用于微处理器中的。
图14A示出了用于PA寻址的LOAD指令和STORE指令的公用格式。
图14B示出了用于PA寻址的LOAD指令。
图14C示出了用于PA寻址的STORE指令。
图15A示出了用于PA寻址的一个程序段。
图15B示出了用于指定两个绝对地址的PA寻址的一个程序段。
图15C示出了用于包括采用一个地址寄存器的LOAD指令和STORE指令的PA寻址的一个程序段。
图16示出了图12中所示的每个部件的运行时序图。
图17示出了图12中所示的每个部件的运行时序图。
图18是对图12的部分放大,该区域包括OAB5。
图19A示出了在中断被处理之前的堆栈。
图19B示出了在中断处理过程中的堆栈。
图20示出了第三实施例的OAB阵列。
图21A示出了用于PA寻址的一条指令的格式。
图21B示出了用于PA寻址中的LOAD指令的助记符。
图22示出了用PA寻址的一个程序,该程序指定OAB阵列中的OAB52,以及OAB阵列是如何由程序操作的。
图23A示出了在第三实施例中在处理一个中断之前的堆栈。
图23B示出了在第三实施例中在处理一个中断的过程中的堆栈。
图24示出了第三实施例的应用。
具体实施方式
下面参考附图描述本发明的最佳实施例。
(第一实施例)
(a)结构
图3的方框图示出了本发明第一实施例的一台微处理器的结构。该微处理器包括一个16位外部地址总线212和一个8位数据总线213,它被分为数据通道块200和指令译码块100。注意,存储将要执行的指令的一个外部存储器没有示于图中,但通过上述总线与处理器相连。
用于传送数据或执行计算的数据通道块200包括选择器(SEL)201、寄存器组202、内部总线A 203、内部总线B 204、译码计数器(DECPC)205、预取计数器(PFC)206、增量器(INC)207、算术逻辑单元(ALU)208、地址缓冲器(ADB)209、存储数据缓冲器(STB)210和装入数据缓冲器(LDB)211,括号中的字符代表缩写。上述部件具有通用的功能。
构成一个保持地址信息单元的堆栈指针(SP)202a、译码计数器(DECPC)205、预取计数器(PFC)206、增量器(INC)207和地址缓冲器(ADB)209的长度都是16位。另一方面,构成一个保持数据信息单元的通用寄存器(REG)202b、存储数据缓冲器(STB)210和装入数据缓冲器(LDB)的长度都是8位。数据通路块200和指令译码块100由内部总线B 204相连。
图4的方框图示出了指令译码块100的结构。
用于将从外部存储器取出的指令进行译码的指令译码块100包括取指缓冲器(IFB)101、指令缓冲器(IB)102、指令选择器(SI)103、指令寄存器(IR)104、译码单元105、执行单元108、控制单元109和存储单元110。
IFB101是用于存储经由外部数据总线213从外部存储器取出的一个1-字代码的寄存器。
“字”是用于译码指令的单位,本装置处理一个8位的字,即一个1-字节的字。在第一实施例中,外部存储器存储1-字代码,即1-字节代码,每个代码由一个16位地址定位。
“指令”向处理器指出了指示的逻辑单元,如“add #4,d0”。另一方面,“代码”指出了一条编码指令的全部或部分。例如“0c2”和“0c”都是代码,其中“0c2”是以16进制记数法表示的指令“add #4,d0”,“0c”则是“0c2”的一部分。
IFB 101包括高位取指缓冲器(IFBH)101a和低位取指缓冲器(IFBL)101b。二者都存储一个取代码的半字节(四位)。注意数据通道块200的预取指计数器(PFC)206保持一个代码的外部存储器地址,该代码由IFB101保持,该地址经由地址总线传送。
IB102是用于存储由IFB101输出的一个代码的寄存器,它包括高位指令缓冲器(IBH)102a和低位指令缓冲器(IBL)102b。二者都存储一个半字节的代码。注意,根据从执行单元108来的指令,已由IFB101和IB102保持的一个代码经由一个选择器(图中没有示出)输出到内部总线B204,然后被传送到数据通路块200。
IR104是用于存储一个要被译码的一个1-字节代码的寄存器,它包括高位指令寄存器(IRH)104a和低位指令寄存器(IRL)104b。二者都存储一个半字节的代码。注意,数据通路块200的DECPC205存储由IR104保持的一个代码的外部存储器的地址。
IFB101、IB102和IR104构成一条指令流水线。总的来说,三个字节的代码(读出代码为两个字节,译码的代码为一个字节)被存储在这条指令流水线中。
SI103包括两个独立的部件:高位指令选择器(SIH)103a,用于将IBH102a、IBL102b和IRL104b的任意一个中存储的一个代码的半字节传送到IRH104a;低位指令选择器(SIL)103b,用于将IFBL101b、IBH102a和IBL102b的任意一个中存储的一个代码的半字节传送到IRL104b。
存储单元110存储一个数字值,该值指示代码是如何存储在IB102中的。详细地说,存储单元110存储与图5中所示的三种状态的任何一种相关的一个数字值,这三种状态是:状态S0指示在IBH102a和IBL102b中都没有存储一个半字节代码;状态S1指示在IBH102a中存储了一个半字节代码,而在IBL102b中没有;状态S2指示IBH102a和IBL102b都存储了一个半字节代码。
译码单元105访问存储单元110,并且对存储在IR104中的一个1-字节代码进行译码,然后将结果送到执行单元108和控制单元109。译码单元105的总的功能是译码,它也包括代码长度判断单元107和字定位判断单元106。
代码长度判断单元107判断接下来要被译码的一个代码是一个半字节还是1-字节代码,并将判断结果送到控制单元109。
控制单元109根据代码长度判断单元107的判断和存储单元110中存储的状态控制SI103,并且更新存储单元110中存储的状态。
字定位判断单元106判断一条被译码的指令是否是存储在外存储器中起始于一个半字节边界的存储单元中的转移到子程序指令,并将判断结果送到执行单元108。字节边界是在外存储器中两个相邻的1-字节存储单元之间的边界。半字节边界是在外存储器中一个1-字节存储单元的高位半字节和低位半字节之间的边界或中心。
执行单元108根据译码单元105的输出控制指令译码块100和数据通路块200的部件,并且进行数据传送、计算等等。注意,图3和图4没有示出从执行单元108向每个部件传送的控制信号。还要注意,包括执行单元108在内的所有部件,在每个时钟周期与图中没有示出的一个时钟信号上同步运行。
(b)指令格式
现在描述第一实施例的微处理器的指令格式。图6示出了两类指令格式。本微处理器译码和执行的所有指令都属于图6A和6B所示的格式1和格式2。
格式1中的指令具有可变的长度,并且包括一个1-字节基本指令字和一个或多个半字节扩充字。格式1中的某些指令可以没有任何扩充字。基本指令字是用于指示一条指令的一个操作码,且被译码单元105译码。扩充字指示一个数据,如位移值、立即值等等,该数据被用于由基本指令字指定的一条指令所执行的计算中。扩充字不用由译码单元105译码。
例如,指令“add #2,d0”指示微处理器将立即值2加到寄存器do中存储的一个值中,该条指令由代码“0c2”(16进制)表示。代码“0c2”包括基本指令字“0c”(16进制)和扩充字“2”。基本指令字“0c”指示“将由随后的一个半字节扩充字表示的一个值加到存储在寄存器d0中的一个值中”。对指示微处理器采用由一个半字节表示的值进行计算的一条指令的常规的微处理器共需要16位,而本微处理器只需要三个半字节,即12位,这是因为常规的微处理器以字节(表示上述扩充字“02”(16进制))为单位扩充指令。
因此,本微处理器的格式1中的指令比常规微处理器的相应指令具有较少的位。
格式2中的指令有一个3-半字节基本指令字和1-半字节扩充字,并具有可变长度。例如,指令“XOR #ff,d0”指示微处理器对立即值ff(16进制)和寄存器d0中存储的一个值执行异或运算,它由代码“208ff”(16进制)表示。代码“208ff”包括基本指令字“208”(16进制)和扩充字ff(16进制),基本指令字208指示“对由随后的两个1-半字节扩充字表示的一个值和寄存器d0中存储的一个值执行异或运算。”当这条指令被执行时,译码单元105只对基本指令字的三个半字节译码。
定义格式2的基本指令字的第一1-半字节代码是“2”或“3”,也就是说,格式2的基本指令字是“2--”(16进制)或“3--”(16进制)。通过这种安排,仅仅从第一个半字节的值就可以判断一条指令是格式1还是格式2。
用这种方法,本微处理器具有8、12、16、20、24、...位的指令,最小长度是8位,可以以4位为单元扩充。这就是说,指令可以以小于指令译码器的长度(8位)的4位为单位扩充。从而本处理器通过减小代码长度而缩短了程序。
(c)微处理器的操作
下面对本微处理器的操作进行描述。
注意,这里只对本微处理器的特征性操作而不是总的操作进行描述。因此,下面将主要对指令译码块100进行解释,而不对数据通路块200进行描述。
【译码实例1】
在这个例子中,一个存储在外存储器从一个字节边界开始的存储单元中的一个5-半字节的指令由本微处理器进行译码和执行。
图7A示出了指令的格式,它包括一个3-半字节基本指令和两个1-半字节扩充字。信号A至E分别代表构成指令的1-半字节代码。图7B示出了当指令存储在外存储器从一个字节开始的存储单元中时,图7A所示的指令的1-半字节代码是如何定位的。注意,对基本指令字的1-半字节代码的定位次序和对扩充字的那些1-半字节代码的定位次序是互不相同的。
图7C示出了当指令译码块100读出指令时,1-半字节代码是如何存储在IFB101、IB102和IR104以及在每个时钟周期上的存储单元110的状态如何。IFB101、IB102和IR104构成指令流水线。
在时钟周期1,1-半字节代码B和A被读取到IFB101中。
在时钟周期2,1-半字节代码E和C被读取到IFB101中,并且1-半字节代码B和A被转移到IB102中。注意,代码的读取和转移是根据在每个时钟周期从执行单元108送出的指示来执行的。在时钟周期2存储单元110的状态S2,因为先前的指令已经被译码。
在时钟周期3,控制单元109识别存储单元110的状态是S2,并从代码长度判断单元107接收下一个将被译码的代码有一个字节的判断。结果,控制单元109通过传送一个选择信号到SI103,指示SI103将存储在IB102中的一个1-字节代码转移到IR104,并将状态“S2”写入存储单元110。根据选择信号的指示,SIH103a将存储在IBL102b中的1-半字节代码A传送到IRH104b,SIL103b将存储在IBH102a中的1-半字节代码B传送到IRL104b。
结果,IR104存储1-半字节代码A和B,然后这些1-半字节代码被译码单元105译码。从第一1-半字节代码A的译码结果,代码长度判断单元107判断基本指令字有三个半字节,接下来要被译码的代码有一个半字节,它是基本指令字的其余部分。
在时钟周期4,控制单元109识别存储单元110的状态S2,并从代码长度判断单元107接收下一个将被译码的代码有一个半字节的判断。结果,控制单元109通过传送一个选择信号到SI103,指示SI103将存储在IBL102b中的一个1-半字节代码转移到IRL104b,并将状态“S1”写入存储单元110。根据选择信号的指示,SIH103a将存储在IRL104b中的1-半字节代码B传送到IRH104a,SIL103b将存储在IBL102b中的1-半字节代码C传送到IRL104b。
结果,IR104存储1-半字节代码B和C,然后这些1-半字节代码被译码单元105译码。根据译码结果,执行单元108经由内部总线B 204将存储在IFB101和IB102中的扩充字D和E转移到数据通路块200。然后,经过某些必要的数据处理后,指令的执行被完成。
注意,在这个例子中,限定第一个1-半字节代码A只传达基本指令字有三个半字节,还限定随后的1-半字节代码B和C有实质性的指令,例如“将一个立即值加到寄存器d0中存储的一个值中。”因此,执行单元108根据1-半字节代码B和C的译码结果执行指令,并且不需要1-半字节代码A和B的译码结果。
以这种方式,译码单元105对其输入容量的1.5倍大的一个3-半字节基本指令正确地译码。
【译码实例2】
在这个例子中,一个存储在外存储器从一个半字节边界开始的存储单元中的5-半字节的指令由本微处理器进行译码和执行。
指令的格式与译码实例1的相同。图8A示出了当指令存储在外存储器从一个半一字节开始的存储单元中时,图7A所示的指令的1-半字节代码是如何定位的。
图8B与译码实例1中的图7C一样,示出了指令流水线中的数据流。
在时钟周期1,1-半字节代码A被读取到IFB101中。
在时钟周期2,1-半字节代码B和C被读取到IFB101中,并且1-半字节代码A被转移到IB102中。在时钟周期2存储单元110的状态S1,因为前一条指令的最后1-半字节代码已经被存储在外存储器的起始于一个半-字节边界的存储单元中了。
在时钟周期3,控制单元109识别存储单元110的状态是S1,并从代码长度判断单元107接收下一个将被译码的代码有一个字节的判断。结果,控制单元109通过传送一个选择信号到SI103,指示SI103将包含存储在IFB101中的一个半字节和存储在IB102中的另一个半字节的一个1-字节代码转移到IR104,并将状态“S1”写入存储单元110。根据选择信号的指示,SIH103a将存储在IBH102a中的1-半字节代码A传送到IRH104b,SIL103b将存储在IFBL101b中的1-半字节代码B传送到IRL104b。
结果,IR104存储1-半字节代码A和B,然后这些1-半字节代码被译码单元105译码。从第一1-半字节代码A的译码结果,代码长度判断单元107判断基本指令字有三个半字节,接下来要被译码的代码有一个半字节,它是基本指令字的其余部分。
在时钟周期4,控制单元109识别存储单元110的状态是S1,并从代码长度判断单元107接收下一个将被译码的代码有一个半字节的判断。结果,控制单元109通过传送一个选择信号到SI103,指示SI103将存储在IBH102a中的一个1-半字节代码转移到IRL104b,并将状态“S2”写入存储单元110。根据选择信号的指示,SIH103a将存储在IRL104b中的1-半字节代码B传送到IRH104a,SIL103b将存储在IBH102a中的1-半字节代码C传送到IRL104b。
结果,IR104存储1-半字节代码B和C,然后这些1-半字节代码被译码单元105译码。根据译码结果,执行单元108经由内部总线B 204将存储在IB102中的扩充字D和E转移到数据通路块200。然后,经过某些必要的数据处理后,指令的执行被完成。
以这种方式,即使指令存储在外存储器从一个半-字节边界开始的存储单元中,本微处理器也能正确地译码和执行指令。
【转移实例1】
在这个例子中,描述一条转移指令的格式,以及当程序转移到外存储器从一个半-字节边界开始的存储单元中时,本微处理器的操作。
图9示出了无条件转移指令“jmp”的格式。这条指令包括一个8位的基本指令字和16位的扩充字,共计有6个1-半字节代码。
对本处理器来说,16位并不足以对一条转移指令指定一个转移目标地址,因为转移目标指令可以被存储在外存储器的起始于一个半-字节边界的存储单元中。也就是说,应该由16位地址指定程序是转移到存储单元中的一个高位半字节,还是低位半字节。基于这样的目的,可以考虑一个7-半字节指令,其中的另一个半字节用于指定一个转移目标地址。
然而,7-半字节指令会包括不必要的3位,从而增大代码长度。
因此,指令“jmp”的基本指令字的最低有效位(LSB)被用于指示一条转移目标指令是否存储在外存储器的从一个字节边界或一个半字节边界开始的存储单元中,如图9所示。也就是说,限定用包括两个字节的扩充字和基本指令字的LSB的17位来指定一个转移目标地址。采用这种限定,无条件转移指令“jmp”从7个1-半字节代码被压缩为6个1-半字节代码。这防止了代码中使用不必要的位。
下面描述当指令“jmp”执行时,本微处理器是如何运行的。
假定指令“jmp”已经从外存储器中取出并且在IFB101、IB102和IR104中存储了1-半字节代码。
译码单元105只将IR104中存储的基本指令字的LSB的信息传送到控制单元109。如果接受的信息是“1”,控制单元109将状态“S1”写入存储单元110,如果是“0”,则将状态“S2”写入存储单元110。
然后,译码单元105对存储在IR104中的基本指令字的7个高位位译码,并向执行单元108传送指令是一条无条件转移指令的判断。当接收到该判断时,执行单元108将IFB101和IB102中存储的一个16位的转移目标地址传送到数据通路块200,并将地址输出到外部地址总线212。结果,存储在经由外部地址总线212传送的一个地址所指定的外存储器的一个存储单元中存储的指令以字节为单位被读取到指令译码块100。
当指令的第一字节被传送到IB102后,根据存储单元110的状态,控制单元109控制SI103,因而在下一时钟周期要被译码的一个代码被确定。
更详细地说,如果存储单元110的状态是S2,控制单元109指示SI103将存储在IB102中的1-字节代码传送到IR104。该指示与译码实例1中时钟周期3中所示的一样,通过该指示存储在外存储器中起始于一个字节边界的存储单元中的一条指令被译码。也就是说,它等同于向该字节边界的一次转移。
另一方面,如果存储单元110的状态是S1,控制单元109指示SI103将包括存储在IFB101中的一个半字节和存储在IB102中的另一个半字节的1-字节代码传送到IR104。该指示与译码实例2中时钟周期3中所示的一样,通过该指示存储在外存储器中起始于一个半一字节边界的存储单元中的一条指令被译码。也就是说,它等同于向该半字节边界的一次转移。
以这种方式,完成了由3-字节无条件转移指令“jmp”执行的向一个字节边界或一个半字节边界的转移。
【转移实例2】
下面描述当一条转移子程序指令(下面称指令“jsr”)被执行,并且当该指令执行后存储在外存储器起始于一个半字节边界的存储单元中的一条指令应该被执行时,本微处理器的运行状况。
指令“jsr”是一条转移指令,它在转移执行之前将指令“jsr”的地址之后的一个地址保存到由堆栈指针(SP)202a指定的一个存储区域(下称栈)。该保存地址也被称为返回地址。指令“jsr”和用于指示子程序结束的一条返回指令结合使用。当指令“jsr”被执行时,一条返回指令也被执行,然后存储在栈中的返回地址被读出,并且由返回地址指定的存储单元中存储的指令被执行。
此时如转移实例1中所述,如果指令被存储在外部存储器从一个半字节边界开始的存储单元中,那么至少需要17位来指定一个返回地址。因此用于指示一个返回地址的代码需要3个字节。这意味着每次指令“jsr”或返回指令被执行时,栈被存取3次。
由于对栈的存取次数增加,微处理器的吞吐量减小。特别是由C语言写的程序频繁访问堆栈,这影响了微处理器的吞吐量。
本微处理器减小了编码代码长度。即使指令“jsr”是存储在外存储器起始于半字节边界的存储单元中,本微处理器能够只用两个字节指定一个返回地址。
指令“jsr”的格式与无条件转移指令“jmp”的一样,如图9所示。也就是说,该指令包括一个8位的基本指令字和16位的扩充字。转移地址由基本指令字的LSB和16位扩充字指定。因此不管程序转移到外存储器中的一个字节边界或一个半字节边界,执行与转移实例1相同的转移。
下面参考图10描述当指令“jsr”被执行时,本微处理器是如何执行的。
图10的流程图示出了本微处理器在执行指令“jsr”时的过程。
当指令“jsr”的基本指令字存储在IR104之后,字定位判断单元106识别指令,通过参考存储单元110的状态,判断指令是否已存储在外存储器中从一个字节边界或从一个半字节边界开始的存储单元中了,并将判断结果传送到执行单元108(步骤81)。
一旦接收到指令已经存储在起始于一个字节边界的存储单元中的判断,执行单元108识别指令的长度为6个半字节(步骤S82),在栈中保存接在指令地址之后的一个16位地址,并指定一个字节边界(步骤84)。图11A示出了存储在起始于一个字节边界的存储单元中的指令“jsr”和返回地址的关系。
另一方面,一旦接收到指令已经存储在起始于一个半字节边界的存储单元中的判断,执行单元108识别指令的长度为7个半字节(步骤S83),在栈中保存接在7-半字节指令地址之后的一个16位地址并指定该字节边界(步骤S84)。详细地说,执行单元108从DECPC205读出指令的一个地址,将该地址传送到ALU208,通过假定指令长度为7个半字节来计算一个返回地址,并且控制相关部件,因而得到的返回地址被写入堆栈。图11B示出了存储于从一个半字节边界开始的存储单元中的指令“jsr”和返回地址的关系。
当返回地址被保存到堆栈之后,该微处理器与转移实例1一样运行。执行单元108转移到由指令的低位17位指定的一个子程序(步骤S85)。
以这种方式,无论指令“jsr”是存储在外存储器起始于一个字节边界,还是半个字节边界的存储单元中,将要存储在堆栈中的一个返回地址只需要两个字节。
当一条返回指令在子程序执行结束后被执行时,执行单元108从堆栈读出返回地址,将该地址存储在ADB209,并且指示相关的部件执行由返回地址指定的外存储器存储单元中存储的一条指令。
为了实现上述操作,指令“jsr”和下一条指令必须根据上述操作被定位在外存储器中。也就是说,当指令“jsr”被存储在外存储器起始于一个半字节边界的存储单元中时,它应该被认为有7个半字节。这由一个被称之为一个连接程序的地址分配程序进行。连接程序的运行在此不作描述,因为它与本发明的主题不相关。
由上述描述可以理解,无论指令是存储在起始于一个字节边界,还是一个半字节边界的外存储器存储单元中,本微处理器存储只有两个字节的一个返回地址。因此,处理时间被缩短。
注意,由本实施例限定的单元可以被致变。例如一个字可以有12位而不是8位。在这种情况下,指令译码块100和数据通路块200的部件将都被调节为处理12位,代码也作相同的调节。
还要注意到,存储单元110除了存储IB102状态之外,还可以存储其它信息,例如存储单元110可以存储IFB101和IB102的状态。通过这种安排,可以实现更特定的控制。
还要注意,指令流水线的级数不限于“3”,这在带有级IFB101、IB102和IR104的本实施例中示出。
【第二实施例】
(a)结构
图12的方框图示出了本发明第二实施例的微处理器的结构。
该微处理器包括指令缓冲器1、指令寄存器2、驱动器3、ALU4、操作数地址缓冲器5、装入缓冲器6、存储缓冲器7、驱动器8、驱动器9、指令地址缓冲器10、指令读取缓冲器11、译码器12、微指令寄存器13、状态寄存器14、预取计数器15、增量器16、译码程序计数器17、执行程序计数器18、寄存器组19、程序状态字20、中断接收单元21、选择器23、选择器24、选择器25、内部总线30、内部总线31、内部总线32、地址总线33、数据总线34、ROM35、RAM36、***电路37、通路41、通路42、通路43和通路44。
图12中,ROM35和RAM36分别存储指令和数据。另外,***电路37包括I/O设备,如记时器、串行端口等等。每个I/O设备被分配一个存储器地址(被称之为存储变换I/O)。
指令缓冲器1(下称IB1,如图中所示)在一条指令被执行之前,预存储从ROM 35中取出的该指令。
指令寄存器2(下称IR2,如图中所示)存储将要由译码器12译码的一条指令。
驱动器3是用于将存储在IB1中的数据输出到B2 BUS32的一个3态驱动器,详细地说,如果绝对地址或操作数的值被存储在IB1中,数据在微指令寄存器13的控制下被输出。
由译码器12控制的ALU4执行普通运算、地址运算等等。例如在地址计算中,如果带有位移的一个间接地址由指令中的一个操作数指定,则ALU4用存储在寄存器组19的一个地址寄存器中的值和存储在IB1中的位移值计算目标存储地址,并将计算的地址输出到操作数地址缓冲器5。如果绝对地址由一条指令中的操作数指定,则ALU4将绝对地址从IB1传送到操作数地址缓冲器5。
操作数地址缓冲器5(下称OAB5)是用于存储一个目标存储地址的一个16位缓冲器。将被存取的存储器是ROM35、RAM36和***电路37。
装入缓冲器6(下称LDB6)是用于存储在OAB5中的目标存储器地址的存储数据的一个16位缓冲器。
存储缓冲器7(下称STB7)是一个16位缓冲器,用于存储将要写入到由OAB5中存储的地址指定的存储器存贮单元中的数据。
驱动器8是一个3态驱动器,用于当处理中断时,在译码器12和MIR13的控制下,把存储在OAB5中的数据传送到A总线30。
驱动器9是一个3态驱动器,用于当访问存储器时,在译码器12和MIR13的控制下,将存储在OAB5中的数据输出到地址总线33。也就是说,存储在OAB5中的一个值被作为存储器地址传送到ROM35、RAM36和***电路37。
指令地址缓冲器10(下称IAB10)存储ROM35中的一个存储单元的16位地址,在该存储单元存储了将要读取的一条指令。
指令读取缓冲器11(下称IFB11)存储从ROM 35取出的一条16位指令。
译码器12将存储在IR2中的指令和状态寄存器14中的数据进行译码,并输出一条微指令来执行该指令。
微指令寄存器13(下称MIR13)相应于从译码器12来的一条微指令输出,传送一个控制信号。
状态寄存器14(下称SR14)存储用于译码指令的状态标志位。
预取计数器15(下称PFC15)和增量器16构成所谓的程序计数器,该计数器在译码器12的控制下,有序地产生将要读取的指令的地址。
译码程序计数器17(下称DECPC17)存储处于指令译码阶段的一条指令的地址。
执行程序计数器18(下称EXPC18)存储处于指令执行阶段的一条指令的地址。
寄存器组19包括4个数据寄存器D0~D3、4个地址寄存器A0~A3和一个堆栈指针,每个都有16位。
程序状态字20(下称PSW20)存储用于指示微处理器内部状态的标志位。
中断接收单元21接收中断信号IPT0~IPT6,并根据接收的中断信号的级输出中断级信号。中断信号IPT0~IPT6表达从外部I/O设备传来的中断请求。具有任何优先级IRQ0~IRQ6的一个中断级信号请求译码器12根据该中断级处理一个中断。当接收到一个不可屏蔽中断(下称NMI)时,中断接收单元照原样输出NMI到译码器12。NMI是比中断信号IPT0~IPT6优先的一个中断,并且不指被软件屏蔽。
选择器23有选择地从内部总线30、内部总线32和ALU4的任何一个传送数据到ALU4的一个输入端口。
选择器24有选择地从内部总线31和内部总线32的任何一个传送数据到ALU4的另一个输入端口。
内部总线30(下称ABUS30)、内部总线31(下称B1BUS31)和内部总线32(下称B2BUS32)是微处理器的内部总线。
下面解释各个缓冲器的功能。图13示出了缓冲器OAB5、LDB6、STB7、IAB10和IFB11是如何用于微处理器中的。
如图中所示,OAB5保持了一个目标RAM36地址,如箭头j1所示。LDB6保持了由该目标地址所指定的RAM36的存储单元中读出的数据,如箭头j3所示。STB7保持了将要写入RAM36的同一存储单元中的数据,如箭头j2所示。
另一方面,IAB10保持了一个目标ROM35地址,如箭头j4所示,以及IFB11保持了由该目标地址所指定的ROM35中从存储单元中读出的数据,如箭头j5所示。
当程序计数器被更新时,存储在IAB10中的值也被更新,如虚框矩形j6和j7所示,也就是说,该值随程序计数器的每次更新而更新。另一方面,当计算出一个地址时,或者当指定一个绝对地址时,如虚框矩形j8和j9所示,存储在OAB5中的值被更新。也就是说,除非计算出一个地址或者指定一个绝对地址,否则该值不会被更新。
(b)PA寻址
本微处理器使用将存储在OAB中的值指定为目标存储地址的指令,在该文献中这样一种寻址方法被称为先前地址(PA)寻址。
图14A示出了用于PA寻址的LOAD指令和STORE指令的通用格式。
通过对指令中的操作数指定“(PA)”(助记符)完成对目标存储地址的说明。
如图14A所示,LOAD/STORE指令的格式包括指示指令类型(LOAD指令、STORE指令等等)的字段d1、确定对机器语言码的PA寻址的一位字段d2、用于确定寄存器组19的任何一个数据寄存器d0~d3的两位字段d3。
字段d1确定指令是LOAD还是STORE,操作是否是加、减、乘、除或移位,以及指令是采用8位数据还是16位数据。
字段d2指示是否采用了PA寻址:“1”表示“是”,“0”表示“否”。
字段d3指示其值被用作一个操作数的一个寄存器:“00”代表寄存器D0,“01”代表D1,“10”代表D2,“11”代码D3。
图14B示出了PA寻址的LOAD指令,图14C示出了STORE指令。
图中的“LD(PA),Dn”指示了用于PA寻址的一条LOAD指令,尽管一条通用的LOAD指令从存储器读出数据,并将该数据存储到寄存器,但进行PA寻址的一条LOAD指令以存储在操作数地址缓冲器中的一个地址从存储器的存储单元读出数据。
例如,在同一图中,地址“0043”被存储在操作数地址缓冲器中。如果操作数(PA)在LOAD指令中被确定,那么存储在地址“0043”处的存储单元中的数据被读出,并被传送到数据寄存器Dn,如虚线箭头所示。
图14C中的“STDn,(PA)”表示PA寻址的一条TORE指令。一条通用的STORE从寄存器读出数据,并将该数据存储到存储器的存储单元中。而PA寻址的一条STORE指令将数据存储到由OAB中存储的一个地址指定的存储器存储单元中。
例如,在图14C中,地址“0043”被存储在OAB中。如果操作数(PA)在STORE指令中被指定,存储在数据寄存器Dn中的数据被传送到由地址“0043”确定的一个存储器的存储单元中,如虚线箭头所示。
在图15A和15B中,一个PA寻址程序(图15A)与常规技术的程序(图15B)进行比较,后者取自图2A和2B。注意这些程序指示微处理器读出存储在存储器中的一个值,对该值进行计算,并将该计算结果存入该存储器。
图15A示出了用PA寻址从/向一个存储器读出/写入数据的一个程序,图15B示出了用两个绝对地址达到同样目的的一个程序,图15C示出了采用一个地址寄存器达到同样目的的一个程序。
图15A的程序通过指定一个绝对地址,将数据从存储器转移到寄存器。到目前为止,它与图15B程序(指令a1和a2)是一样的,然而,图15B的程序又指定了一个绝对地址来将数据从寄存器转移到存储器(指令a3),图15A的程序指定先前地址(PA)(指令a4)。因此,显然当程序由PA寻址编码时,由虚线矩形a5所示的绝对地址的指定是不需要的。
下面对图15A和图15C进行比较。图15C的程序包括将一个绝对地址转移到一个地址寄存器的指令b1、采用该地址寄存器的指令b2(它是一条LOAD指令),以及采用该地址寄存器的指令b4(它是一条STORE指令)。与此相反,图15A的程序不包括采用地址寄存器的任何指令。
下面就代码长度对这些指令进行比较。图15A的程序比图15B的程序少两个字节,比图15C的程序少一个字节。因此,显然大量的从/向存储器、***电路等的数据读/写可用较少的代码长度来完成。
(c)运行
下面描述第二实施例的微处理器的运行。假定运行程序包括下面所示的指令,其中指令(2)~(4)与图15A的程序的三条指令一样。
(1)LD(d8,An),Dn
(2)LD(abs16),Dn
(3)ADD Dm,Dn
(4)ST Dn,(PA)
(c)-1
图16和17的时序图示出了图12所示的部件的运行情况,假定指令“LD(An),Dn”在时间t1之前已经被执行。
在时间t1,OAB 5保存存储在地址寄存器An中的一个值“An”,它是包括在指令“LD(An),Dn”的源操作数中的一个地址值。另外,在时间t1,指令“LD(d8,An),Dn”的一个操作码被从IB1传送到IR2。该操作码被译码器12译码。
在时间t2,一旦接收到被译码的操作码,MIR13就送出一个控制信号,以便执行地址计算“adr.calc”。MIR13将存储在寄存器组19的一个地址寄存器中的值“An”输出到ABUS 30(箭头y1)。MIR13指示驱动器3将存储在IB1中的一个位移值(disp8)输出到B2BUS 32(箭头y2)。
在时间t3,值“An”出现在ABUS30,并且B2BUS32有一个8位的位移值(disp8)。MIR13送出一个控制信号,使得一个选择器(23或24)被切换到另一个选择器,并且ALU4采用存储在地址寄存器中的值和一个8位位移值(disp8)做加法运算。
在时间t4,MIR13送出一个控制信号,以便进行“装入”。然后加法运算的结果“An+disp8”从ALU4传送到OAB5(箭头y3)。
在时间t1到时间t4的过程中,OAB5保持先前的目标存储地址“An”,然后在时间t5保持“An+disp8”。
在时间t6,MIR13送出一个控制信号,以使得驱动器9将值“An+disp8”从OAB5转移到地址总线33。MIR13还输出一个控制信号,使得数据从RAM36装入(箭头y6)。结果由地址“An+disp8”指定的RAM36的存储单元中存储的数据,经由数据总线34被传送到LDB6。然后该数据经由选择器25从LDB6传送到寄存器组19的数据寄存器Dn中(箭头y7)。
(c)-2
在时间t5,指令“LD(abs16),Dn”的一个操作码从IB1传送到IR2,该操作码被译码器12译码。
在时间t6,一旦接收到被译码的操作码,MIR13送出一个控制信号以便执行地址计算“adr.calc”。MIR13送出一个控制信号,使得驱动器3将一个16位的绝对地址(abs16)从IB1传送到B2BUS32(箭头y4)。结果该绝对地址经由B2BUS32通过ALU4传送到OAB5(箭头y5)。
在时间t5到时间t8的过程中,OAB5保持指令“LD(d8,An),Dn”的目标存储地址“An+disp8”,然后在时间t9保持“abs16”。
在时间t9,MIR13送出一个控制信号,使得驱动器3将值“abs16”从OAB5转移到地址总线33。MIR13还输出一个控制信号,使得数据从RAM36装入(箭头y8)。结果由地址“abs16”指定的RAM 36的存储单元中存储的数据,经由数据总线34被传送到LDB6,然后该数据经由选择器25从LDB6传送到寄存器组19的数据寄存器Dn中(箭头y9)。
(c)-3
在时间t9,指令“ADDDm,Dn”的操作码从IB1被传送到IR2,该操作码被译码器12译码。MIR13送出一个控制信号,使得数据从数据寄存器Dn被传送到ABUS30和B2BUS32,然后ALU4采用该数据执行一个运算。其结果经由ABUS30被传送到寄存器组19的数据寄存器Dn中(箭头y10和y11)。
注意,在时间t9到时间t11,OAB5仍然保持“abs16”,因为在此期间存储器没有被存取。
(c)-4
在时间t11,指令“STDn,(PA)”的一个操作码从IB1被送到IR2,该操作码被译码器12译码。此时指令“STDn,(PA)”的PA寻址位是“1”。一旦检测到PA寻址位为“1”,译码器12指示MIR13送出一个控制信号,使得一个值被从寄存器Dn传送到具有PA寻址的一个存储器中。
在时间t13,MIR13送出一个控制信号,使得一个值从寄存器组19的寄存器Dn被经由ABUS30传送到STB7。然后MIR13送出一个控制信号,使得驱动器9从OAB5传送一个值“abs16”到地址总线33(箭头y12),但是不执行地址计算。MIR13传送一个控制信号,使得该数据被存储在RAM36中。结果存储在STB7中的一个值,被存储在RAM36中由存储在OAB5中的一个地址,即“abs16”指定的一个存储单元中。
以这种方式,先前的目标存储地址被用在PA寻址方法中。
(d)中断
前面(c)中所作的描述是基于这样的假设,即存储在OAB5中的值没有被破坏。然而在实际运行中,这些值可能会被中断破坏。本实施例对此准备了防范措施,即图18中所示的一条保存通路。
图18是图12的放大部分,该部分包括OAB5。如图中的虚线所示,通路41、42、43、44和ABUS30构成了保路,该通路用于将OAB5中的一个值保存到存储器中。当驱动器8被启动时,该值通过保存通道被保存在存储器的堆栈中。
下面参考图19描OAB5中存储的值是如何被译码器12和MIR13通过保存通路保存到堆栈中的。图19A示出了中断被处理之前的堆栈。图19B示出了中断处理过程中的堆栈。
(d)-1:NMI中断
当中断接收单元21接收一个NMI中断时,译码器12指示MIR13送出一个控制信号,使得寄存器组19中的一个堆栈指针被更新(SP-6→SP)。更新之后,译码器12指示MIR13送出一个控制信号,使得驱动器没定保存通路。然后通过该保存通路把存储在OAB5中的一个值被传送到由堆栈指针指定的堆栈中的一个存储单元(OAB5→(SP+4))。存储在EXPC18中的一个值被送到堆栈(EXPC→(SP+2)),接下来是存储在PSW20中的一个值送堆栈(PSW→(SP))。
图19B示出了通过上述三个步骤将数据保存之后的堆栈。
由于已经存储了数据来处理中断,因此NMI中断的起始地址被保存在IAB10和PFC15中。
下面描述被保存的数据是如何恢复的。
首先,存储在堆栈的第一存储单元的值被传送到PSW20((SP)→PSW)。然后存储在第二存储单元中的值被传送到程序计数器18((SP+2)→EXPC)。最后存储在第三存储单元中的值,经由ABUS30和ALU4被传送到OAB5((SP+4)→OAB5)。
(d)-2:IRQn中断
IRQn中断的处理与NMI中断的处理大致一样,只有以下两点不同:(1)中断级被写入PSW20的IMSK字段;(2)基于IRQn的级n得到一个中断目标地址。
从上面的描述,很显然,具有PA寻址的第二实施例的微处理器在没有绝对寻址的情况下,访问一个存储器,并且能够在不采用地址寄存器的情况下从/向存储器读出/写入数据。另外,即使对存储变换I/O中的I/O端口有许多次I/O访问,地址寄存器也不会被占据。因此,第二实施例的微处理器可以有效地使用地址寄存器。
【第三实施例】
第三实施例与包括若干操作数地址缓冲器(OAB)的微处理器相关。包括这些OAB的块被称为OAB阵列。
图20示出了第三实施例的OAB阵列。该OAB阵列包OAB50~54,以及输入选择器60。图20中的OAB50与OAB5的构造相同,其后跟随的4个缓冲器(OAB51~54)与OAB5的构造也相同。这5个缓冲器分别存储先前的目标存储地址,达到以前地址的五倍。
输入选择器60根据接收的OABSEL信号63有选择地输出存储在OAB50~54中的一个值。
OABSFT信号61是用于移位存储在OAB阵列中的数据的一个控制信号。当该控制信号被输出时,存储在OAB50~54中的值被向下移位到下一个OAB。然后存储在最后的OAB54中的值被废除。当译码器12对一条LOAD指令或一条STORE指令译码时,OABSFT信号61被MIR13输出。因此,每次译码器12译码一条LOAD指令或STORE指令,存储在OAB阵列中的数据就被移位一次。
OABW信号62是用于将数据从ALU4传送到OAB50的一个控制信号。当先前的数据通过输出OABSFT信号61被移位到OAB51后,每当OAB50接收OABW信号62时,它就保持从ALU4输出的一个目标存储地址。
OABSEL信号63包括指定OAB50~54中的任意一个的信息。选择器60从指定的OAB输出一个值。
在第三实施例中,采用一个操作码来确定OAB阵列中的一个OAB。下面参考图21A和21B来描述第三实施例的PA寻址。图21A示出了用于PA寻址的指令的格式。图21B示出了用于PA寻址的STORE指令的助记符。
如图21A所示,用于PA寻址的指令包括指示指令类型(LOAD指令、STORE指令等等)的字段d1、确定机器语言代码的PA寻址的字段d2(1位)、在寄存器组19的D0~D3中确定一个数据寄存器的两位字段d3、用“0”和“1”指定OAB50或OAB51至54中的任意一个的字d4(1位)、确定OAB51至54中的任意一个的字段d5(2位)。
字段d4用“0”指定OAB50,用“1”指定OAB51至54中的任意一个。
字段d5用“00”指定OAB51,用“01”指定OAB52,用“10”指定OAB53,用“11”指定OAB54。
如图21B所示,在助记符中,“(PA)”说明示PA寻址,“(PA1)”说明PA寻址并且指示存储在OAB51中的一个值被用作目标存储地址。与此类似,“(PA2)”相关于OAB52,“(PA3)”相关于OAB53,“(PA4)”相关于OAB54。
图22示出了采用PA寻址的一个程序,该PA寻址确定了OAB阵列的一个OAB,并且还示出了程序对OAB阵列的操作。
(1)指令“LD(adr1),D0”
IB1存储“LD(adr1),D0”。“LD(adr1),D0”的操作码从IB 1被传送到IR2,并进一步到译码器12。译码器12对该操作码译码。由于操作码指示一条LOAD指令,因此译码器12指示MIR13输出OABSFT信号61。一旦接收到OABSFT信号61,OAB阵列就对数据移位,并且MIR13将“adr1”输出到OAB50。地址“adr1”是指令“LD(adr1),D0”的一个源操作数,它被经由ALU 4传送到OAB50。MIR13输出OABSEL信号63并且地址“adr1”被输出到地址总线33。然后允许从RAM36装入数据。存储在地址“adr1”中的一个值被经由数据总线34从RAM36装载到LDB6。然后该值被存储在寄存器组19的数据寄存器Dn中。
(2)指令“STD0,(adr2)”
IB 1存储“STD0,(adr2)”。“STD0,(adr2)”的操作码从IB1被传送到IR2,并进一步到译码器12。译码器12对该操作码译码。由于操作码指示一条STORE指令,因此译码器12指示MIR13输出OABSFT信号61。一旦接收到OABSFT信号61,OAB阵列就对数据移位,并且地址“adr1”被从OAB50移位到OAB51。地址“adr2”是指令“STD0,(adr2)”的一个目地操作数,它被经由ALU4传送到OAB50。由于指令的操作数没有确定PA寻址,因此“adr2”被OABSEL信号63从OAB50输出到地址总线33。由于这是一条STORE指令,存储在寄存器组19的数据寄存器Dn中的一个值被通过B2BUS32传送到STB7。当该值被存储在STB7中之后,MIR13发出一个控制信号到RAM36,以允许向RAM36存储数据。然后该值被从STB7传送到RAM36中由地址“adr2”指定的一个存储单元。
(3)指令“LD(adr3),D0”
IB1存储“LD(adr3),D0”。“LD(adr3),D0”的操作码从IB1被传送到IR2,并进一步到译码器12。译码器12对该操作码译码。由于操作码指示一条LOAD指令,因此译码器12指示MIR13输出OABSFT信号61。
一旦接收到OABSFT信号61,OAB阵列就对数据移位。地址“adr1”从OAB51被移位到OAB52,并且地址“adr2”从OAB50被移位到OAB51。地址“adr3”是指令“LD(adr3),D0”的一个源操作数,它被经由ALU4传送到OAB50。由于指令的操作数并不指定PA寻址,“adr3”被OABSEL信号63从OAB50输出到地址总线33。MIR13送出一个控制信号,允许从RAM36装入数据。然后存储在RAM36中由地址“adr3”指定的存储单元中的一个值被经由数据总线34装载到LDB6。该值被存储在寄存器组19的数据寄存器Dn中。
(4)指令“ADDD0,D1”
IB 1存储“ADDD0,D1”。“ADDD0,D1”的一个操作码被从IB1传送到IR2,再进一步到译码器12。译码器12对该操作码译码。由于该操作码表示ADD操作,因此译码器12不命令MIR13输出OABSFT信号61。
译码器12命令ALU4采用存储在寄存器D0和D1中的值,即“adr1”和“adr3”执行一个运算。由于寄存器D1在指令“ADDD0,D1”中被确定为一个目的地,因此译码器12将运行结果存在寄存器1中。
(5)指令“STD1,(PA2)”
“STD1,(PA2)”的一个操作码被存储在IR2。译码器12对该操作码进行译码。由于该操作码确定PA寻址以及OAB52。译码器12将OABSEL信号63传送到选择器60,使得输出目的地从OAB50改变到OAB52。由于这是一条STORE指令,一个值被从寄存器组19中的数据寄存器D1经由B2BUS32传送到STB7。当该值被存储在STB7中之后,MIR13输出一个控制信号到RAM36,以允许向RAM36存储数据。然后该值被从STB7传送到由地址“adr2”确定的RAM36的一个存储单元中,该地址被存储在OAB52(图22中的阴影框)中,如虚线箭头所示。
(6)中断
与第二实施例一样,存储在OAB50~54中的数据在中断发生时应该被保存起来。下面参考图23描述数据是如何保存的。图23A示出了在第三实施例中处理中断之前的堆栈。图23B示出了在第三实施例中处理中断过程中的堆栈。
当中断接收单元21接收一个NMI中断时,译码器12更新中断指针(SP-14→SP)。
更新之后,译码器12启动驱动器8为OAB50设置保存通路。译码器12向输入选择器60发送指定0AB50的OABSEL信号63,以使得存储在OAB50中的一个值被输出,该值经由ABUS30传送到STB 7,然后传送到堆栈。
当数据从OAB50输出之后,译码器12向输入选择器60送出指定OAB51的OABSFT信号61,以使得存储在OAB51中的值被输出。该值被类似的经由驱动器9-ABUS30-STB7的保存通路被传送到堆栈。然后译码器12按次序向输入选择器60传送指定OAB52、53和54的控制信号,以使得存储在OAB中的值被传送到堆栈。
当存储在OAB阵列中的数据被保存之后,存储在EXPC18的数据也被保存(EXPC→(SP+2)),存储在PSW20中的数据也被保存(PSW→(SP)),并且控制移到中断目标地址。当上述处理结束后,如图23A所示的堆栈的内容被改变到如图23B所示的内容。IRQn中断的处理与NMI中断的处理基本相同,但有以下区别:(1)中断级被写入PSW20的IMSK字段;(2)根据IRQn的级n得到一个中断目标地址。
反过来进行上述步骤,即可将保存的数据恢复。
从上面的描述,很显然第三实施例的微处理器有选择地采用先前的存储器存取,并且减小了地址寄存器被占用的几率以及代码长度。
(7)第三实施例的应用
在第三实施例中,存储在OAB阵列中的数据,在每次执行一条LOAD指令或STORE指令时被移位。然而这种安排对STORE指令的执行可能是不需要,因为很少会将数据重复存储在同一个存储单元。
下面参考图24描述第三实施例对这样一种情况的应用。
在第三实施例的上述例子中,当指令“STD0,(adr2)”被执行时,地址“adr1”从OAB50移位到OAB51。然而,当指令“STD0,(adr2)”被译码时,OABSEL信号63没有被输出。因此,当指令“STD0,(adr2)”被执行后,OAB50仍然保持地址“adr1”。当指令“LD(adr3),D1”被执行时,地址“adr1”从OAB50移位到OAB51。然后OAB50保持地址“adr3”。
指令“ADDD0,D1”被执行后,指令“STD1,(PA1)”的操作码被保存。由于该操作码指定PA寻址,译码器12将OABSEL信号63传送到输入选择器60,以使得数据输出目标从OAB50切换到OAB51。由于OAB51存储地址“adr1”,该地址被输出到地址总线33。MIR13传送一个控制信号以允许从RAM36装载数据。结果,由存储在OAB51中的地址指定的RAM36的存储单元中存储的值被经由数据总线34装载到LDB6。然后,该数据被传送到寄存器组19的数据寄存器Dn中。
只要保持其内在特征,本发明可以有多种形式的应用。例如指令可以向OAB中存储的一个值指定一个相对地址。
另外,加、减或移位运算指令的操作数可以指定存储在OAB中的一个值。
在第三实施例中串行连接的OAB50~54可以并行连接。OAB阵列中的OAB数量例如也可以增加到9,10,...,等等,或者减小到2,3,或4。
虽然本发明是结合附图以实例的形式来描述的,但对本领域的技术人员来说,可以作各种改进和变化。因此,只要这些改进和变化不偏离本发明的范围,它们应该被包括在本发明中。
Claims (5)
1.一种用于支持代码长度减小的微处理器,包括:
一个操作数地址缓冲器,用于保持目标存储器存取地址,其中所述操作数地址缓冲器与一个外部存储器相连;
一个存储装置,用于只要执行装载指令或存储指令时就将所述执行的装载或存储指令的操作数地址作为用于另一个指令的目标存储器存取地址而存入所述操作数地址缓冲器;
一个用于取指令的取指装置;
一个指令检测装置,用于检测已被所述取指装置取出并准备访问所述外部存储器的一条指令;
一个判断装置,用于判断由所述指令检测装置检测的所述指令是否指定存储在所述操作数地址缓冲器中的所述目标存储器存取地址;
一个第一控制装置,用于控制所述操作数地址缓冲器,使得如果当所述判断装置判定由所述指令检测装置检测的所述指令指定所述目标存储器存取地址,则所述地址缓冲器被输出到所述外部存储器;
一个第二控制装置,用于控制所述操作数地址缓冲器,使得如果所述判断装置判定所述指令不指定存储在所述操作数地址缓冲器中的所述目标存储器存取地址,则所述被存储的地址被输出到所述外部存储器。
2.根据权利要求1所述的微处理器,其特征在于,进一步包括:
一个中断检测装置,用于检测一个中断处理的开始和结束;
一个保存装置,用于当所述中断检测装置检测到一个中断处理的开始时,从所述操作数地址缓冲器保存一个地址到一个堆栈;
一个恢复装置,用于当所述中断检测装置检测到所述中断处理的结束时,从所述堆栈恢复所述地址到所述操作数地址缓冲器。
3.一种用于支持编码长度减小的微处理器,包括:
一个用于包括对n个操作数地址缓冲器重复使用的缓冲器阵列,这些缓冲器分别将从一个立即处理的目标存储器存取地址至n倍于在过去对所述外部存储器的先前存取中使用的目标存储地址的地址存储起来,其中n是2或大于2的整数,并且其中所述缓冲器阵列与一个外部存储器相连接;
一个用于取指令的取指装置;
一个指令检测装置,用于检测已被所述取指装置取出并准备访问所述外部存储器的一条指令;
一个判断装置,用于判断由所述指令检测装置检测的所述指令是否指定任何一个所述操作数地址缓冲器;
一个第一控制装置,用于控制所述缓冲器阵列,使得如果所述判断装置断定由所述指令检测装置检测的所述指令指定所述操作数地址缓冲器,则所述地址缓冲器被输出到所述外部存储器;
一个第二控制装置,用于将从指令检测装置检测的所述指令的一个操作数中得到的地址存入任何一个所述操作数地址缓冲器,并且控制所述缓冲器阵列,使得如果所述判断装置判定所述指令不指定任何一个操作数地址缓冲器,则所述存储地址被输出到所述外部存储器。
4.根据权利要求3所述的微处理器,其特征在于,所述第二控制装置包括:
一个第一子控制装置,用于控制所述缓冲器阵列,使得所述指令检测装置每次监测到一条指令,存储在每个操作数地址缓冲器中的每个地址被移位到下一个操作数地址缓冲器;
一个第二子控制装置,用于控制所述缓冲器阵列,使得在所述第一子控制装置的所述地址移位完成之后,从由所述取指装置取出的一条指令的一个操作数中得到的一个地址被存储在第一操作数地址缓冲器中;
一个第三子控制装置,用于控制所述缓冲器阵列,使得由所述第二子控制装置存储的所述地址被输出到所述外部存储器。
5.根据权利要求4所述的微处理器,其特征在于,进一步包括:
一个中断检测装置,用于检测一个中断处理的开始和结束;
一个保存装置,用于当所述中断检测装置检测到一个中断处理的开始时,从所述n个操作数地址缓冲器保存所述n个地址到一个堆栈;
一个恢复装置,用于当所述中断检测装置检测到一个所述中断处理的结束时,从所述堆栈恢复所述n个地址到所述n个操作数地址缓冲器。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP133281/1995 | 1995-05-31 | ||
JP13328195A JP3199603B2 (ja) | 1995-05-31 | 1995-05-31 | コードサイズ縮小化マイクロプロセッサ |
JP134078/95 | 1995-05-31 | ||
JP133281/95 | 1995-05-31 | ||
JP13407895A JP3199604B2 (ja) | 1995-05-31 | 1995-05-31 | プロセッサ |
JP134078/1995 | 1995-05-31 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN96107762A Division CN1114153C (zh) | 1995-05-31 | 1996-05-31 | 支持程序编码长度减小的微处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1492318A CN1492318A (zh) | 2004-04-28 |
CN1286004C true CN1286004C (zh) | 2006-11-22 |
Family
ID=26467675
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN96107762A Expired - Lifetime CN1114153C (zh) | 1995-05-31 | 1996-05-31 | 支持程序编码长度减小的微处理器 |
CNB021574936A Expired - Lifetime CN1286004C (zh) | 1995-05-31 | 1996-05-31 | 支持程序编码长度减小的微处理器 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN96107762A Expired - Lifetime CN1114153C (zh) | 1995-05-31 | 1996-05-31 | 支持程序编码长度减小的微处理器 |
Country Status (5)
Country | Link |
---|---|
US (2) | US5966514A (zh) |
EP (2) | EP0745932B1 (zh) |
KR (1) | KR100436015B1 (zh) |
CN (2) | CN1114153C (zh) |
DE (2) | DE69632970T2 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6219779B1 (en) * | 1997-06-16 | 2001-04-17 | Matsushita Electric Industrial Co., Ltd. | Constant reconstructing processor which supports reductions in code size |
DE69823642T2 (de) * | 1998-03-27 | 2005-04-21 | Motorola Inc | System und Verfahren zur Umwandlung von Befehlen |
FR2777370B1 (fr) * | 1998-04-09 | 2000-06-23 | Sgs Thomson Microelectronics | Architecture de dsp optimisee pour les acces memoire |
US6178496B1 (en) | 1999-02-17 | 2001-01-23 | Motorola, Inc. | System for converting instructions, and method therefore |
KR100308211B1 (ko) | 1999-03-27 | 2001-10-29 | 윤종용 | 압축 명령을 갖는 마이크로 컴퓨터 시스템 |
KR100619682B1 (ko) * | 1999-12-22 | 2006-09-08 | 엘지전자 주식회사 | 이아이에스씨 프로세서 |
US6721875B1 (en) * | 2000-02-22 | 2004-04-13 | Hewlett-Packard Development Company, L.P. | Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form |
KR100353814B1 (ko) * | 2000-08-18 | 2002-09-27 | 주식회사 하이닉스반도체 | 확장된 램 억세스 명령어를 억세스하는 시간을 향상시킨램 억세스 장치 |
US6934936B2 (en) * | 2001-02-01 | 2005-08-23 | International Business Machines Corporation | Apparatus and method for adaptive address-based historical utilization recording |
JP2005050208A (ja) * | 2003-07-30 | 2005-02-24 | Matsushita Electric Ind Co Ltd | マルチタスクシステムにおけるメモリ管理方式およびタスク制御装置 |
WO2010084379A1 (en) * | 2009-01-21 | 2010-07-29 | Freescale Semiconductor, Inc. | Microprocessor architecture and method of instruction decoding |
CN113138800B (zh) * | 2021-03-25 | 2023-05-09 | 沐曦集成电路(上海)有限公司 | 定长指令集的编解码方法及计算*** |
CN115878187B (zh) * | 2023-01-16 | 2023-05-02 | 北京微核芯科技有限公司 | 支持压缩指令的处理器指令处理装置和方法 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS54122043A (en) * | 1978-03-15 | 1979-09-21 | Toshiba Corp | Electronic computer |
US4245304A (en) * | 1978-12-11 | 1981-01-13 | Honeywell Information Systems Inc. | Cache arrangement utilizing a split cycle mode of operation |
US4336602A (en) * | 1979-09-24 | 1982-06-22 | Control Data Corporation | Network for generating modified microcode addresses |
AU553416B2 (en) * | 1984-02-24 | 1986-07-17 | Fujitsu Limited | Pipeline processing |
JPS61138333A (ja) * | 1984-12-10 | 1986-06-25 | Nec Corp | 演算モジユ−ル |
JPS61282932A (ja) * | 1985-06-07 | 1986-12-13 | Fujitsu Ltd | アドレスカウンタ制御方式 |
JPS63245522A (ja) * | 1987-03-31 | 1988-10-12 | Toshiba Corp | マイクロプロセツサ |
US5101483A (en) * | 1988-01-27 | 1992-03-31 | Oki Electric Industry Co., Ltd. | Instruction decoder simplification by reuse of bits to produce the same control states for different instructions |
US5249273A (en) * | 1989-01-17 | 1993-09-28 | Fujitsu Limited | Microprocessor having a variable length instruction format |
KR0163179B1 (ko) * | 1989-03-31 | 1999-01-15 | 미다 가쓰시게 | 데이타 프로세서 |
JPH03201133A (ja) * | 1989-12-28 | 1991-09-03 | Sanyo Electric Co Ltd | 情報処理装置 |
JPH03233630A (ja) * | 1990-02-08 | 1991-10-17 | Nec Corp | 情報処理装置 |
JPH04104350A (ja) * | 1990-08-23 | 1992-04-06 | Hitachi Ltd | マイクロプロセッサ |
US5367648A (en) * | 1991-02-20 | 1994-11-22 | International Business Machines Corporation | General purpose memory access scheme using register-indirect mode |
US5428786A (en) * | 1991-03-07 | 1995-06-27 | Digital Equipment Corporation | Branch resolution via backward symbolic execution |
US5706460A (en) * | 1991-03-19 | 1998-01-06 | The United States Of America As Represented By The Secretary Of The Navy | Variable architecture computer with vector parallel processor and using instructions with variable length fields |
US5452423A (en) * | 1991-06-13 | 1995-09-19 | Chips And Technologies, Inc. | Two-ROM multibyte microcode address selection method and apparatus |
JPH0527970A (ja) * | 1991-07-18 | 1993-02-05 | Seikosha Co Ltd | 演算装置 |
JP2970821B2 (ja) * | 1991-08-21 | 1999-11-02 | 松下電器産業株式会社 | データ処理装置 |
DE69325826T2 (de) * | 1992-01-06 | 2000-02-24 | Hitachi, Ltd. | Rechner mit einer Parallelverarbeitungsfähigkeit |
US5542058A (en) * | 1992-07-06 | 1996-07-30 | Digital Equipment Corporation | Pipelined computer with operand context queue to simplify context-dependent execution flow |
US5590358A (en) * | 1994-09-16 | 1996-12-31 | Philips Electronics North America Corporation | Processor with word-aligned branch target in a byte-oriented instruction set |
-
1996
- 1996-05-07 US US08/643,947 patent/US5966514A/en not_active Expired - Lifetime
- 1996-05-09 KR KR1019960015261A patent/KR100436015B1/ko not_active IP Right Cessation
- 1996-05-30 EP EP96303914A patent/EP0745932B1/en not_active Expired - Lifetime
- 1996-05-30 EP EP01111215A patent/EP1143333B1/en not_active Expired - Lifetime
- 1996-05-30 DE DE69632970T patent/DE69632970T2/de not_active Expired - Lifetime
- 1996-05-30 DE DE69630416T patent/DE69630416T2/de not_active Expired - Lifetime
- 1996-05-31 CN CN96107762A patent/CN1114153C/zh not_active Expired - Lifetime
- 1996-05-31 CN CNB021574936A patent/CN1286004C/zh not_active Expired - Lifetime
-
1999
- 1999-01-07 US US09/226,791 patent/US6253305B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
KR100436015B1 (ko) | 2004-09-16 |
DE69632970D1 (de) | 2004-08-26 |
CN1492318A (zh) | 2004-04-28 |
EP1143333A3 (en) | 2001-10-31 |
DE69630416D1 (de) | 2003-11-27 |
CN1144359A (zh) | 1997-03-05 |
KR960042329A (ko) | 1996-12-21 |
EP1143333A2 (en) | 2001-10-10 |
DE69632970T2 (de) | 2004-12-16 |
EP0745932A3 (en) | 1998-09-09 |
DE69630416T2 (de) | 2004-07-29 |
CN1114153C (zh) | 2003-07-09 |
US5966514A (en) | 1999-10-12 |
US6253305B1 (en) | 2001-06-26 |
EP0745932B1 (en) | 2003-10-22 |
EP0745932A2 (en) | 1996-12-04 |
EP1143333B1 (en) | 2004-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1153155C (zh) | 装有高效利用主处理器中的寄存器数据的协处理器的信息处理装置 | |
CN1202470C (zh) | 处理器 | |
CN1303536C (zh) | 执行自高速缓存的快速推测式加载运算的微处理器及方法 | |
CN1286004C (zh) | 支持程序编码长度减小的微处理器 | |
CN1260646C (zh) | 附有第二预测装置的假想分支目标地址高速缓存 | |
CN1688966A (zh) | 包括对准或者广播指令的多媒体协处理器控制机制 | |
CN1220938C (zh) | 双调用/返回堆栈分支预测*** | |
CN1186718C (zh) | 微控制器指令集 | |
CN1126030C (zh) | 数据处理装置 | |
CN1165906C (zh) | 纠错装置 | |
CN1217262C (zh) | 假想分支目标地址高速缓存中置换目标地址的装置及方法 | |
CN1154908C (zh) | 数据输入存贮器并对存储器内存入的数据进行运算输出并能高速操作的数据输入输出装置 | |
CN1217271C (zh) | 假想分支目标地址高速缓存 | |
CN1500336A (zh) | 可编微程序的协议包解析程序和封装程序 | |
CN1497435A (zh) | 处理器 | |
CN1641567A (zh) | 自堆栈快取存储器进行快速推测性弹出操作方法及装置 | |
CN1269030C (zh) | 高速缓存的快取线选取目标地址的装置及方法 | |
CN1664777A (zh) | 用于控制信息处理设备的内部状态的装置和方法 | |
CN1269052C (zh) | 支持缩小代码长度的常量还原型处理器 | |
CN1532709A (zh) | 数据存储器高速缓存装置及数据存储器高速缓存*** | |
CN1577291A (zh) | 程序调试装置、程序调试方法及程序 | |
CN1516001A (zh) | 一种新型risc流水线微控制器构架及其操作方法 | |
CN1491383A (zh) | 使用协处理器的数据处理 | |
CN1053693A (zh) | 信号处理装置的地址处理器 | |
CN1145878C (zh) | 对指令列译码并执行指令的处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term |
Granted publication date: 20061122 |
|
EXPY | Termination of patent right or utility model |