Abstract:
A microcoded data processing system utilizes common microcode execution routines for both register-to-register operations and memory-to-register operations. The system includes a memory data register for storing an operand for use in a memory-to-register operation, a pair of address registers for containing the addresses of the registers to be involved in the execution of register-to-register instructions, and circuitry responsive to generation of an instruction indicating a memory-to-register operation for generating the address of the memory data register from one of the address registers, whereby the register-to-register operations and the memory-to-register operations can share common execution routines without any performance time penalty or any increase in required microcode. 
     The system also provides for the simultaneous generation of the addresses of all registers to be employed in instructions involving multipart operands.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     This invention relates to microprocessor systems having improved performance characteristics. 
     2. Description of the Prior Art 
     In microcoded machines, it is common to separate the routines between effective address calculation and execution. It is desirable that as many instructions as possible share as many common effective address and execution routines as possible. However, register-to-register instructions have their operands in registers, where memory-to-register instructions have one of their operands in a Memory Data Register (MDR). This makes sharing the execution microroutine impossible without performance penalties, because at the start of the execution routine the source of the operands is different depending on the type of instruction (memory-to-register or register-to-register). 
     SUMMARY OF THE INVENTION 
     To solve this problem, the present invention provides an implied register addressing scheme such that execution routines will always have their operand sources in the same place, independent of the instructions type (memory or register). The sources or addresses of the operands reside in two registers termed HI-CNTREG and LO-CNTREG. In register-to-register instructions, these two registers are loaded with the two register fields in the instruction format. In a memory instruction, in the last micro cycle of the effective address routine, the LO-CNTREG register is loaded with the address of the source of the operands (MDR or one of two other temporary registers, TEMP1 and TEMP2). The invention is implemented by close coupling between the hardware and the relevant microword fields, and allows for efficient code sharing for double precision integer and floating point instructions, where the operands reside in two or three consecutive general purpose registers. 
     As an added feature of the present invention, the source registers further have two incrementors (+1, +2) to facilitate optimal double precision integer and floating point (single and extended) codes. In extended floating point operations one of the operands resides in three registers RA, RA+1, RA+2. RA is pointed at by the instruction and contains the most significant part of the operand. However, in most cases, operation starts with the least significant part (contained in RA+1 in floating point and in RA+2 in extended floating point). Typically, in prior art microprocessor systems, a cycle may be wasted incrementing the source register once or twice. This is avoided in the present invention by selecting the incremented (+2) source, in extended floating point or the +1 incremented source in double precision integer or single precision floating point. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a block diagram showing a microcoded processor in which the present invention may be employed; and 
     FIG. 2 is a schematic diagram illustrating the operation of the special control portion of the invention including the HI-CNTREG and LO-CNTREG registers. 
     FIGS. 3-5, represent microcode listing for implementing the invention in a particular data processing system. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENT 
     FIG. 1 is a block diagram showing the fundamental elements of a microcoded processor for implementing the present invention. This includes a microcode control unit 11 for executing microcode which may be stored in a read only memory (ROM) or in a random access memory (RAM), as is well known in the art. The processor also includes an arithmetic and logic unit (ALU) 12 for performing various arithmetic and logic operation, as is also well known in the art. 
     A group of general purpose registers is represented by reference numeral 13. Any suitable number of such registers may be employed, depending on the size of the processor. A memory 14 of a suitable type is provided and is capable of transferring operand information to a memory data register (MDR) 16, as discussed above. 
     The system also includes a first temporary register 21 identified as TEMP1 and a second temporary register 22 identified as TEMP2. The temporary registers and the MDR are used for storing the derived memory operands, in a manner to be discussed in detail below. FIG. 1 also shows special control circuitry identified as 20, circuitry 20 being shown and described below in connection with FIG. 2. The system of FIG. 1 also includes a shifter 15 whose input is connected to the output of ALU 12 and whose output is connected to general purpose registers 13 and to registers 16, 21, and 22. 
     In the description herein of the invention, it is assumed that the microprocessor is a 16 bit machine, but the invention is clearly not limited to that particular capability. 
     FIG. 2 illustrates the special control portion 20 for carrying out the present invention. The most significant portion of the control is shown in the dotted enclosure 20 and includes a high low control 27 which supplies control signals to a HI-CNTREG 28 and a LO-CNTREG 29. The HI-CNTREG and LO-CNTREG each generate four bit patterns (in the case of the machine in which the invention is implemented), each four bit pattern defining the address of a register in which an operand which is to be executed on is located. In normal register-to-register operation, register 28 would contain the four bit address of the general purpose register containing the operand to be supplied to the A input of ALU 12, while low register 29 would contain the four bit address of the general purpose register containing the operand to be supplied to the B input of the ALU. The system functions to first calculate the effective address for the operands and then execute the instruction on these derived operands whose addresses have been calculated. 
     In accordance with the present invention, when the microcode indicates that it is performing the last step in the effective address calculation (by means of the EXEC.PNTR combination in the BRASEL (0:4) field shown in FIG. 2) and that execution of the microroutine part of the instruction will begin on the next cycle, if one of the operands is to be in the MDR, the microcode is assigned the default in the miscellaneous field (MISC (0:4)), indicating that the implied register is the MDR. This is implemented in LO-CNTREG 29 by modifying its contents to indicate that the address of the implied register is the MDR. This is accomplished through the lines in FIG. 2 labeled &#34;MISC1&#34; and &#34;MISC4&#34; which change the address in register 29 to that of the MDR, while HI-CNTREG 28 contains the address of the general purpose register involved in the memory-to-register operation, as defined in the instruction. 
     In the simplest operation, involving two 16 bit operands residing in the MDR and in a general purpose register, the address of the general purpose register containing the register operand is present in register 28, while the address in register 29 is modified as described above at the end of the effective address calculation by the &#34;MISC1&#34; and &#34;MISC4&#34; lines so that register 29 contains the MDR address. Then, when execution begins, the operands in the specified general purpose register and in the MDR are pointed to and whatever operation specified by the OP code in that instruction is carried out. 
     This is illustrated in FIG. 3 of the microcode listing attached hereto. Starting at cycle 0020 of FIG. 3, the effective address calculation, for direct or direct indexed modes, of a single precision operation is performed by taking the contents of the instruction register IR which contains the second word (displacement) in an effective address calculation, and adding it to the index register, to generate a final address. In the next cycle, cycle 0022, a memory read operation is performed, as indicated by MR in MEMIO field on line 164, and then the memory is accessed to load MDR. The miscellaneous field at that time says MISC DFL, on line 166, which is the default. The default in the miscellaneous field indicates that the implied register is MDR. This means that the LO-CNTREG 28 is going to be loaded with the MDR address. Hence, the following execution routine will find one of its operands in MDR directly. 
     In the case of memory-to-register operations involving operands of 32 bits each, such as would be encountered in performing double precision integer or floating point arithmetic for example, the operation of the invention is as follows. Since it is assumed that ALU 12 has the capability of operating on only 16 bit operands in one operation, the addition of two 32 bit operands will require two cycles to complete. The effective address calculation routine involves 2 reads from memory. In the first read, the most significant 16 bits of the memory operand from, say, memory location MEM1, are loaded into MDR 16. During the second cycle of a 32 bit effective address routine, the contents of memory location MEM1+1 are loaded into the MDR after the MDR contents, containing memory location MEM1 contents, have been transferred to register TEMP1 through ALU 12 and shifter 15. Thus, register TEMP1 contains the most significant 16 bits of the memory operand and the MDR contains the least significant 16 bits. Similarly, the general purpose register RA pointed at by HI-CNTREG, contains the most significant 16 bits of the 32 bit register operand and register RA+1 contains the least significant 16 bits. In order for both LO-CNTREG and HI-CNTREG to contain the addresses of the most significant 16 bit words, for both operands, in the second (and last) cycle of the effective address routine the MISC field gets IMP TMP1, causing the LO-CNTREG to be loaded with the TEMP1 register address. 
     In the double precision operation, the initial two cycles 36 and 37 shown on FIG. 4 of the attached microcode listing are exactly identical to the single precision cycles 20 and 22 discussed above for the direct or direct indexed addressing modes. The index register as pointed to by the instruction format, is added to the IR which contains the second word of instruction [displacement]. 
     Looking at cycle 38 on the attached FIG. 4 of the microcode listing, the first read of the derived memory operand is done into MDR. The comment is MAR++, which means that when reading, MAR is incremented, preparing the address of the next operand read. At cycle 0039 the system reads that operand, again to MDR. Just prior to this time the contents of MDR are moved to TEMP1 through ALU 12 and shifter 15. And the miscellaneous field indicates that the implied register is TEMP1, indicated by the IMP. TMP1 is the MISC field in cycle 0039. This means that the code of TEMP1 is inserted into the LO-CNTREG register. So the execution sequence following after that will access exactly two operands, one in the general purpose register RA, as defined by the instruction and RA+1, and the other in TEMP1, and MDR. 
     The present invention is also effective in handling operations which require the manipulation of two 48 bit operands, such as extended floating point arithmetic between memory and the general purpose registers. The most significant 16 bits of the 48 bit register operand are in the general purpose register whose four bit address is contained in HI-CNTREG register 28. During the first cycle of address calculation the contents of the memory address, say MEM1, containing the most significant 16 bits of the 48 bit memory operand are loaded into the MDR. During the next cycle of the effective address calculation, the second 1 
    
     In order for both LO-CNTREG and HI-CNTREG to contain the address of the most significant word, in the third cycle of the effective address calculation routine, the MISC field gets IMP.TEMP2, causing the LO-CNTREG to be loaded with the TEMP2 register address. In the case of an extended addressing for D or DX modes, the first two cycles are exactly identical to single and double precision cases. Again, the effective address is calculated by adding the index register to IR, going to memory, getting the first word to MDR, incrementing MAR at the same time, returning and reading the second word into MDR, at the same time loading the contents of the MDR to TEMP2 so that TEMP2 will contain the most significant part of the 48 bit operand. In the last cycle, cycle number 0046 shown on FIG. 5 of the attached micrcode, the third read is performed into MDR. At this time, the contents of MDR are moved to TEMP1 so TEMP1 now contains the middle 16 bit part of the word and TEMP2 contains the most significant 16 bit part of the 48 bit word. In the MISC field, TEMP2 is implied (line 499) which means that TEMP2 address is loaded into LO-CNTREG. Hence, at this point, HI-CNTREG contains the address of the register RA as defined in the instruction; and LO-CNTREG contains the implied TEMP2, and the execution routine can start. The 48 bits of the register operand are placed in registers RA, RA+1 and RA+2 and the 48 bits of the derived memory operand reside in TEMP2, TEMP1 and MDR. The extended floating point arithmetic operation may then be executed by the microprocessor in the normal fashion. 
     Another feature of the present invention operates to increase the speed and hence the performance of the processor. During an address calculation, the outputs of registers 28 and 29 are supplied through combinatorial logic circuits 32 and 33, respectively, where the addresses from registers 28, 29 are each incremented by +1 and by +2 so that the addresses in register 28, 29 and those addresses plus one and plus two are available at the outputs of networks 32, 33. Thus, assuming that the most significant 16 bits for the register portion of the operation are in general purpose register RA, the addresses for register RA, register RA+1 and Register RA+2 are available at element 32. Similarly, the addresses, for registers TEMP1, TEMP2 and MDR, respectively, are available at the output of element 33. Thus, this feature of the present invention avoids the prior art limitation of requiring a separate cycle to increment the addresses by one. 
     As shown in the attached FIG. 6 of field definitions, the address assignments in the MASRC(0:4) and MBSRC(0:4) microcode fields for the MDR, TEMP1, and TEMP2 registers, were selected such that MDR(10011) is an increment of TEMP1(10010) that is an increment of TEMP2(10001). Also the bit assignments in the MISC(0:4) field were chosen such that bits MISC1 and MISC4 will determine the 2 least significant bits of the implied registers (11 for MDR, 10 for TMP1 and 01 for TEMP2). 
     Thus, in double precision integer or floating point, HI CNTREG points to RA which contains the most significant 16 bits of the register operand, while LO-CENTREG, using the implied register mechanism, will point to TEMP1. The +1 increments of RA and TEMP1 will point to RA+1 and MDR, respectively, where the least significant 16 bits of the 2 operands reside. Similarly, in extended floating point, the most significant 16 bit word is pointed at by HI-CNTREG pointing at RA and LO-CNTREG, using the implied register mechanism, will point to TEMP2. The +1 increments will point to RA+1 and TEMP1, respectively, where the middle 16 bit words reside, and the +2 increments will point to RA+2 and MDR, respectively, where the least significant 16 bit words reside. This is identical to register to register cases where HI-CNTREG and LO-CNTREG will point at RA and RB, respectively, the +1 increments will point at RA+1 and RB+1, and the +2 increment will point at RA+ 2 and RB+2, respectively. This achieves a uniform treatment of all operands, register or memory in the effective address calculation routines, allowing normal sharing of the execution routines.