Определение набора системы команд набора инструкций

In computer science, an instruction set architecture (ISA), also called computer architecture, is an abstract model of a computer. A device that executes instructions described by that ISA, such as a central processing unit (CPU), is called an implementation.

In general, an ISA defines the supported instructions, data types, registers, the hardware support for managing main memory, fundamental features (such as the memory consistency, addressing modes, virtual memory), and the input/output model of a family of implementations of the ISA.

An ISA specifies the behavior of machine code running on implementations of that ISA in a fashion that does not depend on the characteristics of that implementation, providing binary compatibility between implementations. This enables multiple implementations of an ISA that differ in characteristics such as performance, physical size, and monetary cost (among other things), but that are capable of running the same machine code, so that a lower-performance, lower-cost machine can be replaced with a higher-cost, higher-performance machine without having to replace software. It also enables the evolution of the microarchitectures of the implementations of that ISA, so that a newer, higher-performance implementation of an ISA can run software that runs on previous generations of implementations.

If an operating system maintains a standard and compatible application binary interface (ABI) for a particular ISA, machine code will run on future implementations of that ISA and operating system. However, if an ISA supports running multiple operating systems, it does not guarantee that machine code for one operating system will run on another operating system, unless the first operating system supports running machine code built for the other operating system.

An ISA can be extended by adding instructions or other capabilities, or adding support for larger addresses and data values; an implementation of the extended ISA will still be able to execute machine code for versions of the ISA without those extensions. Machine code using those extensions will only run on implementations that support those extensions.

The binary compatibility that they provide makes ISAs one of the most fundamental abstractions in computing.

Overview[edit]

An instruction set architecture is distinguished from a microarchitecture, which is the set of processor design techniques used, in a particular processor, to implement the instruction set. Processors with different microarchitectures can share a common instruction set. For example, the Intel Pentium and the AMD Athlon implement nearly identical versions of the x86 instruction set, but they have radically different internal designs.

The concept of an architecture, distinct from the design of a specific machine, was developed by Fred Brooks at IBM during the design phase of System/360.

Prior to NPL [System/360], the company’s computer designers had been free to honor cost objectives not only by selecting technologies but also by fashioning functional and architectural refinements. The SPREAD compatibility objective, in contrast, postulated a single architecture for a series of five processors spanning a wide range of cost and performance. None of the five engineering design teams could count on being able to bring about adjustments in architectural specifications as a way of easing difficulties in achieving cost and performance objectives.[1]: p.137 

Some virtual machines that support bytecode as their ISA such as Smalltalk, the Java virtual machine, and Microsoft’s Common Language Runtime, implement this by translating the bytecode for commonly used code paths into native machine code. In addition, these virtual machines execute less frequently used code paths by interpretation (see: Just-in-time compilation). Transmeta implemented the x86 instruction set atop VLIW processors in this fashion.

Classification of ISAs[edit]

An ISA may be classified in a number of different ways. A common classification is by architectural complexity. A complex instruction set computer (CISC) has many specialized instructions, some of which may only be rarely used in practical programs. A reduced instruction set computer (RISC) simplifies the processor by efficiently implementing only the instructions that are frequently used in programs, while the less common operations are implemented as subroutines, having their resulting additional processor execution time offset by infrequent use.[2]

Other types include very long instruction word (VLIW) architectures, and the closely related long instruction word (LIW) and[citation needed] explicitly parallel instruction computing (EPIC) architectures. These architectures seek to exploit instruction-level parallelism with less hardware than RISC and CISC by making the compiler responsible for instruction issue and scheduling.[3]

Architectures with even less complexity have been studied, such as the minimal instruction set computer (MISC) and one-instruction set computer (OISC). These are theoretically important types, but have not been commercialized.[4][5]

Instructions[edit]

Machine language is built up from discrete statements or instructions. On the processing architecture, a given instruction may specify:

  • opcode (the instruction to be performed) e.g. add, copy, test
  • any explicit operands:
registers
literal/constant values
addressing modes used to access memory

More complex operations are built up by combining these simple instructions, which are executed sequentially, or as otherwise directed by control flow instructions.

Instruction types[edit]

Examples of operations common to many instruction sets include:

Data handling and memory operations[edit]

  • Set a register to a fixed constant value.
  • Copy data from a memory location or a register to a memory location or a register (a machine instruction is often called move; however, the term is misleading). They are used to store the contents of a register, the contents of another memory location or the result of a computation, or to retrieve stored data to perform a computation on it later. They are often called load and store operations.
  • Read and write data from hardware devices.

Arithmetic and logic operations[edit]

  • Add, subtract, multiply, or divide the values of two registers, placing the result in a register, possibly setting one or more condition codes in a status register.[6]
    • increment, decrement in some ISAs, saving operand fetch in trivial cases.
  • Perform bitwise operations, e.g., taking the conjunction and disjunction of corresponding bits in a pair of registers, taking the negation of each bit in a register.
  • Compare two values in registers (for example, to see if one is less, or if they are equal).
  • Floating-point instructions for arithmetic on floating-point numbers.[6]

Control flow operations[edit]

  • Branch to another location in the program and execute instructions there.
  • Conditionally branch to another location if a certain condition holds.
  • Indirectly branch to another location.
  • Call another block of code, while saving the location of the next instruction as a point to return to.

Coprocessor instructions[edit]

  • Load/store data to and from a coprocessor or exchanging with CPU registers.
  • Perform coprocessor operations.

Complex instructions[edit]

Processors may include «complex» instructions in their instruction set. A single «complex» instruction does something that may take many instructions on other computers. Such instructions are typified by instructions that take multiple steps, control multiple functional units, or otherwise appear on a larger scale than the bulk of simple instructions implemented by the given processor. Some examples of «complex» instructions include:

  • transferring multiple registers to or from memory (especially the stack) at once
  • moving large blocks of memory (e.g. string copy or DMA transfer)
  • complicated integer and floating-point arithmetic (e.g. square root, or transcendental functions such as logarithm, sine, cosine, etc.)
  • SIMD instructions, a single instruction performing an operation on many homogeneous values in parallel, possibly in dedicated SIMD registers
  • performing an atomic test-and-set instruction or other read-modify-write atomic instruction
  • instructions that perform ALU operations with an operand from memory rather than a register

Complex instructions are more common in CISC instruction sets than in RISC instruction sets, but RISC instruction sets may include them as well. RISC instruction sets generally do not include ALU operations with memory operands, or instructions to move large blocks of memory, but most RISC instruction sets include SIMD or vector instructions that perform the same arithmetic operation on multiple pieces of data at the same time. SIMD instructions have the ability of manipulating large vectors and matrices in minimal time. SIMD instructions allow easy parallelization of algorithms commonly involved in sound, image, and video processing. Various SIMD implementations have been brought to market under trade names such as MMX, 3DNow!, and AltiVec.

Instruction encoding[edit]

One instruction may have several fields, which identify the logical operation, and may also include source and destination addresses and constant values. This is the MIPS «Add Immediate» instruction, which allows selection of source and destination registers and inclusion of a small constant.

On traditional architectures, an instruction includes an opcode that specifies the operation to perform, such as add contents of memory to register—and zero or more operand specifiers, which may specify registers, memory locations, or literal data. The operand specifiers may have addressing modes determining their meaning or may be in fixed fields. In very long instruction word (VLIW) architectures, which include many microcode architectures, multiple simultaneous opcodes and operands are specified in a single instruction.

Some exotic instruction sets do not have an opcode field, such as transport triggered architectures (TTA), only operand(s).

Most stack machines have «0-operand» instruction sets in which arithmetic and logical operations lack any operand specifier fields; only instructions that push operands onto the evaluation stack or that pop operands from the stack into variables have operand specifiers. The instruction set carries out most ALU actions with postfix (reverse Polish notation) operations that work only on the expression stack, not on data registers or arbitrary main memory cells. This can be very convenient for compiling high-level languages, because most arithmetic expressions can be easily translated into postfix notation.[7]

Conditional instructions often have a predicate field—a few bits that encode the specific condition to cause an operation to be performed rather than not performed. For example, a conditional branch instruction will transfer control if the condition is true, so that execution proceeds to a different part of the program, and not transfer control if the condition is false, so that execution continues sequentially. Some instruction sets also have conditional moves, so that the move will be executed, and the data stored in the target location, if the condition is true, and not executed, and the target location not modified, if the condition is false. Similarly, IBM z/Architecture has a conditional store instruction. A few instruction sets include a predicate field in every instruction; this is called branch predication.

Number of operands[edit]

Instruction sets may be categorized by the maximum number of operands explicitly specified in instructions.

(In the examples that follow, a, b, and c are (direct or calculated) addresses referring to memory cells, while reg1 and so on refer to machine registers.)

C = A+B
  • 0-operand (zero-address machines), so called stack machines: All arithmetic operations take place using the top one or two positions on the stack:[8] push a, push b, add, pop c.
    • C = A+B needs four instructions.[9] For stack machines, the terms «0-operand» and «zero-address» apply to arithmetic instructions, but not to all instructions, as 1-operand push and pop instructions are used to access memory.
  • 1-operand (one-address machines), so called accumulator machines, include early computers and many small microcontrollers: most instructions specify a single right operand (that is, constant, a register, or a memory location), with the implicit accumulator as the left operand (and the destination if there is one): load a, add b, store c.
    • C = A+B needs three instructions.[9]
  • 2-operand — many CISC and RISC machines fall under this category:
    • CISC — move A to C; then add B to C.
      • C = A+B needs two instructions. This effectively ‘stores’ the result without an explicit store instruction.
    • CISC — Often machines are limited to one memory operand per instruction: load a,reg1; add b,reg1; store reg1,c; This requires a load/store pair for any memory movement regardless of whether the add result is an augmentation stored to a different place, as in C = A+B, or the same memory location: A = A+B.
      • C = A+B needs three instructions.
    • RISC — Requiring explicit memory loads, the instructions would be: load a,reg1; load b,reg2; add reg1,reg2; store reg2,c.
      • C = A+B needs four instructions.
  • 3-operand, allowing better reuse of data:[10]
    • CISC — It becomes either a single instruction: add a,b,c
      • C = A+B needs one instruction.
    • CISC — Or, on machines limited to two memory operands per instruction, move a,reg1; add reg1,b,c;
      • C = A+B needs two instructions.
    • RISC — arithmetic instructions use registers only, so explicit 2-operand load/store instructions are needed: load a,reg1; load b,reg2; add reg1+reg2->reg3; store reg3,c;
      • C = A+B needs four instructions.
      • Unlike 2-operand or 1-operand, this leaves all three values a, b, and c in registers available for further reuse.[10]
  • more operands—some CISC machines permit a variety of addressing modes that allow more than 3 operands (registers or memory accesses), such as the VAX «POLY» polynomial evaluation instruction.

Due to the large number of bits needed to encode the three registers of a 3-operand instruction, RISC architectures that have 16-bit instructions are invariably 2-operand designs, such as the Atmel AVR, TI MSP430, and some versions of ARM Thumb. RISC architectures that have 32-bit instructions are usually 3-operand designs, such as the ARM, AVR32, MIPS, Power ISA, and SPARC architectures.

Each instruction specifies some number of operands (registers, memory locations, or immediate values) explicitly. Some instructions give one or both operands implicitly, such as by being stored on top of the stack or in an implicit register. If some of the operands are given implicitly, fewer operands need be specified in the instruction. When a «destination operand» explicitly specifies the destination, an additional operand must be supplied. Consequently, the number of operands encoded in an instruction may differ from the mathematically necessary number of arguments for a logical or arithmetic operation (the arity). Operands are either encoded in the «opcode» representation of the instruction, or else are given as values or addresses following the opcode.

Register pressure[edit]

Register pressure measures the availability of free registers at any point in time during the program execution. Register pressure is high when a large number of the available registers are in use; thus, the higher the register pressure, the more often the register contents must be spilled into memory. Increasing the number of registers in an architecture decreases register pressure but increases the cost.[11]

While embedded instruction sets such as Thumb suffer from extremely high register pressure because they have small register sets, general-purpose RISC ISAs like MIPS and Alpha enjoy low register pressure. CISC ISAs like x86-64 offer low register pressure despite having smaller register sets. This is due to the many addressing modes and optimizations (such as sub-register addressing, memory operands in ALU instructions, absolute addressing, PC-relative addressing, and register-to-register spills) that CISC ISAs offer.[12]

Instruction length[edit]

The size or length of an instruction varies widely, from as little as four bits in some microcontrollers to many hundreds of bits in some VLIW systems. Processors used in personal computers, mainframes, and supercomputers have minimum instruction sizes between 8 and 64 bits. The longest possible instruction on x86 is 15 bytes (120 bits).[13] Within an instruction set, different instructions may have different lengths. In some architectures, notably most reduced instruction set computers (RISC), instructions are a fixed length, typically corresponding with that architecture’s word size. In other architectures, instructions have variable length, typically integral multiples of a byte or a halfword. Some, such as the ARM with Thumb-extension have mixed variable encoding, that is two fixed, usually 32-bit and 16-bit encodings, where instructions cannot be mixed freely but must be switched between on a branch (or exception boundary in ARMv8).

Fixed-length instructions are less complicated to handle than variable-length instructions for several reasons (not having to check whether an instruction straddles a cache line or virtual memory page boundary,[10] for instance), and are therefore somewhat easier to optimize for speed.

Code density[edit]

In early 1960s computers, main memory was expensive and very limited, even on mainframes. Minimizing the size of a program to make sure it would fit in the limited memory was often central. Thus the size of the instructions needed to perform a particular task, the code density, was an important characteristic of any instruction set. It remained important on the initially-tiny memories of minicomputers and then microprocessors. Density remains important today, for smartphone applications, applications downloaded into browsers over slow Internet connections, and in ROMs for embedded applications. A more general advantage of increased density is improved effectiveness of caches and instruction prefetch.

Computers with high code density often have complex instructions for procedure entry, parameterized returns, loops, etc. (therefore retroactively named Complex Instruction Set Computers, CISC). However, more typical, or frequent, «CISC» instructions merely combine a basic ALU operation, such as «add», with the access of one or more operands in memory (using addressing modes such as direct, indirect, indexed, etc.). Certain architectures may allow two or three operands (including the result) directly in memory or may be able to perform functions such as automatic pointer increment, etc. Software-implemented instruction sets may have even more complex and powerful instructions.

Reduced instruction-set computers, RISC, were first widely implemented during a period of rapidly growing memory subsystems. They sacrifice code density to simplify implementation circuitry, and try to increase performance via higher clock frequencies and more registers. A single RISC instruction typically performs only a single operation, such as an «add» of registers or a «load» from a memory location into a register. A RISC instruction set normally has a fixed instruction length, whereas a typical CISC instruction set has instructions of widely varying length. However, as RISC computers normally require more and often longer instructions to implement a given task, they inherently make less optimal use of bus bandwidth and cache memories.

Certain embedded RISC ISAs like Thumb and AVR32 typically exhibit very high density owing to a technique called code compression. This technique packs two 16-bit instructions into one 32-bit word, which is then unpacked at the decode stage and executed as two instructions.[14]

Minimal instruction set computers (MISC) are commonly a form of stack machine, where there are few separate instructions (8–32), so that multiple instructions can be fit into a single machine word. These types of cores often take little silicon to implement, so they can be easily realized in an FPGA or in a multi-core form. The code density of MISC is similar to the code density of RISC; the increased instruction density is offset by requiring more of the primitive instructions to do a task.[15][failed verification]

There has been research into executable compression as a mechanism for improving code density. The mathematics of Kolmogorov complexity describes the challenges and limits of this.

In practice, code density is also dependent on the compiler. Most optimizing compilers have options that control whether to optimize code generation for execution speed or for code density. For instance GCC has the option -Os to optimize for small machine code size, and -O3 to optimize for execution speed at the cost of larger machine code.

Representation[edit]

The instructions constituting a program are rarely specified using their internal, numeric form (machine code); they may be specified by programmers using an assembly language or, more commonly, may be generated from high-level programming languages by compilers.[16]

Design[edit]

The design of instruction sets is a complex issue. There were two stages in history for the microprocessor. The first was the CISC (Complex Instruction Set Computer), which had many different instructions. In the 1970s, however, places like IBM did research and found that many instructions in the set could be eliminated. The result was the RISC (Reduced Instruction Set Computer), an architecture that uses a smaller set of instructions. A simpler instruction set may offer the potential for higher speeds, reduced processor size, and reduced power consumption. However, a more complex set may optimize common operations, improve memory and cache efficiency, or simplify programming.

Some instruction set designers reserve one or more opcodes for some kind of system call or software interrupt. For example, MOS Technology 6502 uses 00H, Zilog Z80 uses the eight codes C7,CF,D7,DF,E7,EF,F7,FFH[17] while Motorola 68000 use codes in the range A000..AFFFH.

Fast virtual machines are much easier to implement if an instruction set meets the Popek and Goldberg virtualization requirements.[clarification needed]

The NOP slide used in immunity-aware programming is much easier to implement if the «unprogrammed» state of the memory is interpreted as a NOP.[dubious – discuss]

On systems with multiple processors, non-blocking synchronization algorithms are much easier to implement[citation needed] if the instruction set includes support for something such as «fetch-and-add», «load-link/store-conditional» (LL/SC), or «atomic compare-and-swap».

Instruction set implementation[edit]

A given instruction set can be implemented in a variety of ways. All ways of implementing a particular instruction set provide the same programming model, and all implementations of that instruction set are able to run the same executables. The various ways of implementing an instruction set give different tradeoffs between cost, performance, power consumption, size, etc.

When designing the microarchitecture of a processor, engineers use blocks of «hard-wired» electronic circuitry (often designed separately) such as adders, multiplexers, counters, registers, ALUs, etc. Some kind of register transfer language is then often used to describe the decoding and sequencing of each instruction of an ISA using this physical microarchitecture.
There are two basic ways to build a control unit to implement this description (although many designs use middle ways or compromises):

  1. Some computer designs «hardwire» the complete instruction set decoding and sequencing (just like the rest of the microarchitecture).
  2. Other designs employ microcode routines or tables (or both) to do this, using ROMs or writable RAMs (writable control store), PLAs, or both.

Some microcoded CPU designs with a writable control store use it to allow the instruction set to be changed (for example, the Rekursiv processor and the Imsys Cjip).[18]

CPUs designed for reconfigurable computing may use field-programmable gate arrays (FPGAs).

An ISA can also be emulated in software by an interpreter. Naturally, due to the interpretation overhead, this is slower than directly running programs on the emulated hardware, unless the hardware running the emulator is an order of magnitude faster. Today, it is common practice for vendors of new ISAs or microarchitectures to make software emulators available to software developers before the hardware implementation is ready.

Often the details of the implementation have a strong influence on the particular instructions selected for the instruction set. For example, many implementations of the instruction pipeline only allow a single memory load or memory store per instruction, leading to a load–store architecture (RISC). For another example, some early ways of implementing the instruction pipeline led to a delay slot.

The demands of high-speed digital signal processing have pushed in the opposite direction—forcing instructions to be implemented in a particular way. For example, to perform digital filters fast enough, the MAC instruction in a typical digital signal processor (DSP) must use a kind of Harvard architecture that can fetch an instruction and two data words simultaneously, and it requires a single-cycle multiply–accumulate multiplier.

See also[edit]

  • Comparison of instruction set architectures
  • Computer architecture
  • Processor design
  • Compressed instruction set
  • Emulator
  • Simulation
  • Instruction set simulator
  • OVPsim full systems simulator providing ability to create/model/emulate any instruction set using C and standard APIs
  • Register transfer language (RTL)
  • Micro-operation

References[edit]

  1. ^ Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). IBM’s 360 and Early 370 Systems. MIT Press. ISBN 0-262-16123-0.
  2. ^ Crystal Chen; Greg Novick; Kirk Shimano (December 16, 2006). «RISC Architecture: RISC vs. CISC». cs.stanford.edu. Retrieved February 21, 2015.
  3. ^ Schlansker, Michael S.; Rau, B. Ramakrishna (February 2000). «EPIC: Explicitly Parallel Instruction Computing». Computer. 33 (2). doi:10.1109/2.820037.
  4. ^ Shaout, Adnan; Eldos, Taisir (Summer 2003). «On the Classification of Computer Architecture». International Journal of Science and Technology. 14: 3. Retrieved March 2, 2023.
  5. ^ Gilreath, William F.; Laplante, Phillip A. (December 6, 2012). Computer Architecture: A Minimalist Perspective. Springer Science+Business Media. ISBN 978-1-4615-0237-1.
  6. ^ a b Hennessy & Patterson 2003, p. 108.
  7. ^ Durand, Paul. «Instruction Set Architecture (ISA)». Introduction to Computer Science CS 0.
  8. ^ Hennessy & Patterson 2003, p. 92.
  9. ^ a b Hennessy & Patterson 2003, p. 93.
  10. ^ a b c
    Cocke, John; Markstein, Victoria (January 1990). «The evolution of RISC technology at IBM» (PDF). IBM Journal of Research and Development. 34 (1): 4–11. doi:10.1147/rd.341.0004. Retrieved 2022-10-05.
  11. ^ Page, Daniel (2009). «11. Compilers». A Practical Introduction to Computer Architecture. Springer. p. 464. Bibcode:2009pica.book…..P. ISBN 978-1-84882-255-9.
  12. ^ Venkat, Ashish; Tullsen, Dean M. (2014). Harnessing ISA Diversity: Design of a Heterogeneous-ISA Chip Multiprocessor. 41st Annual International Symposium on Computer Architecture.
  13. ^ «Intel® 64 and IA-32 Architectures Software Developer’s Manual». Intel Corporation. Retrieved 5 October 2022.
  14. ^ Weaver, Vincent M.; McKee, Sally A. (2009). Code density concerns for new architectures. IEEE International Conference on Computer Design. CiteSeerX 10.1.1.398.1967. doi:10.1109/ICCD.2009.5413117.
  15. ^ «RISC vs. CISC». cs.stanford.edu. Retrieved 2021-12-18.
  16. ^ Hennessy & Patterson 2003, p. 120.
  17. ^ Ganssle, Jack (February 26, 2001). «Proactive Debugging». embedded.com.
  18. ^ «Great Microprocessors of the Past and Present (V 13.4.0)». cpushack.net. Retrieved 2014-07-25.

Further reading[edit]

  • Bowen, Jonathan P. (July–August 1985). «Standard Microprocessor Programming Cards». Microprocessors and Microsystems. 9 (6): 274–290. doi:10.1016/0141-9331(85)90116-4.
  • Hennessy, John L.; Patterson, David A. (2003). Computer Architecture: A Quantitative Approach (Third ed.). Morgan Kaufmann Publishers. ISBN 1-55860-724-2. Retrieved 2023-03-04.

External links[edit]

  • Media related to Instruction set architectures at Wikimedia Commons
  • Programming Textfiles: Bowen’s Instruction Summary Cards
  • Mark Smotherman’s Historical Computer Designs Page

Система команд

  • Систе́ма кома́нд (также набо́р команд) — соглашение о предоставляемых архитектурой средствах программирования, а именно:

    * определённых типах данных,

    * инструкций,

    * системы регистров,

    * методов адресации,

    * моделей памяти,

    * способов обработки прерываний и исключений,

    методов ввода и вывода.Система команд представляется спецификацией соответствия (микро)команд наборам кодов (микро)операций, выполняемых при вызове команды, определяемых (микро)архитектурой системы. (При этом на системах с различной (микро)архитектурой может быть реализована одна и та же система команд. Например, Intel Pentium и AMD Athlon имеют почти идентичные версии системы команд x86, но имеют радикально различный внутренний дизайн.)

    Базовыми командами являются, как правило, следующие:

    * арифметические, например, «сложения» и «вычитания»;

    битовые, например, «логическое и», «логическое или» и «логическое не»;

    * присваивание данных, например, «переместить», «загрузить», «выгрузить»;

    * ввода-вывода, для обмена данными с внешними устройствами;

    управляющие инструкции, например, безусловный, условный или косвенный переход, вызов подпрограммы, возврат из подпрограммы.Оптимальными в различных ситуациях являются разные способы построения системы команд:

    * Если объединить наиболее часто используемую последовательность микроопераций под одной микрокомандой, то надо будет обеспечивать меньше микрокоманд. Такое построение системы команд носит название CISC (Complex Instruction Set Computer), в распоряжении имеется небольшое число составных команд.

    * С другой стороны, это объединение уменьшает гибкость системы команд. Вариант с наибольшей гибкостью — наличие множества близких к элементарным операциям команд. Это RISC (Reduced Instruction Set Computer), в распоряжении имеются усечённые, простые команды.

    * Ещё большую гибкость системы команд можно получить, используя MISC-подход, построенный на уменьшении количества команд до минимального и упрощении вычислительного устройства обработки этих команд.

Источник: Википедия

Связанные понятия

Архитектура набора команд (англ. instruction set architecture, ISA) — часть архитектуры компьютера, определяющая программируемую часть ядра микропроцессора. На этом уровне определяются реализованные в микропроцессоре конкретного типа…

Математический сопроцессор — сопроцессор для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.

Сопроцессор — специализированный процессор, расширяющий возможности центрального процессора компьютерной системы, но оформленный как отдельный функциональный модуль. Физически сопроцессор может быть отдельной микросхемой или может быть встроен в центральный процессор (как это делается в случае математического сопроцессора в процессорах для ПК начиная с Intel 486DX).

Микроко́д — программа, реализующая набор инструкций процессора. Так же как одна инструкция языка высокого уровня преобразуется в серию машинных инструкций, в процессоре, использующем микрокод, каждая машинная инструкция реализуется в виде серии микроинструкций — микропрограммы, микрокода.

Архитекту́ра проце́ссора — количественная составляющая компонентов микроархитектуры вычислительной машины (процессора компьютера) (например, регистр флагов или регистры процессора), рассматриваемая IT-специалистами в аспекте прикладной деятельности.

Блок управления памятью или устройство управления памятью (англ. memory management unit, MMU) — компонент аппаратного обеспечения компьютера, отвечающий за управление доступом к памяти, запрашиваемым центральным процессором.

Суперскалярный процессор (англ. superscalar processor) — процессор, поддерживающий так называемый параллелизм на уровне инструкций (то есть, процессор, способный выполнять несколько инструкций одновременно) за счёт включения в состав его вычислительного ядра нескольких одинаковых функциональных узлов (таких как АЛУ, FPU, умножитель (integer multiplier), сдвигающее устройство (integer shifter) и другие устройства). Планирование исполнения потока инструкций осуществляется динамически вычислительным…

Подробнее: Суперскалярность

Защищённый режим (режим защищённой виртуальной адресации) — режим работы x86-совместимых процессоров. Частично был реализован уже в процессоре 80286, но там существенно отличался способ работы с памятью, так как процессоры ещё были 16-битными и не была реализована страничная организация памяти. Первая 32-битная реализация защищённого режима — процессор Intel 80386. Применяется в совместимых процессорах других производителей. Данный режим используется в современных многозадачных операционных системах…

Термин «ядро микропроцессора» (англ. processor core) не имеет чёткого определения и в зависимости от контекста употребления может обозначать особенности, позволяющие выделить модель в отдельный вид…

Внеочередное исполнение (англ. out-of-order execution) машинных инструкций — исполнение машинных инструкций не в порядке следования в машинном коде (как было при выполнении инструкций по порядку (англ. in-order execution)), а в порядке готовности к выполнению. Реализуется с целью повышения производительности вычислительных устройств. Среди широко известных машин впервые в существенной мере реализована в машинах CDC 6600 компании Control Data и IBM System/360 Model 91 компании IBM.

Архитекту́ра компью́тера — набор типов данных, операций и характеристик каждого отдельно взятого уровня. Архитектура связана с программными аспектами. Аспекты реализации (например, технология, применяемая при реализации памяти) не являются частью архитектуры.

Мультипроцессор (от англ. multiprocessor, multiprocessing) — это подкласс многопроцессорных компьютерных систем, где есть несколько процессоров и одно адресное пространство, видимое для всех процессоров. В таксономии Флинна мультипроцессоры относятся к классу SM-MIMD-машин. Мультипроцессор запускает одну копию ОС с одним набором таблиц, в том числе тех, которые следят какие страницы памяти свободны.

Реальный режим (или режим реальных адресов; англ. real-address mode) — режим работы процессоров архитектуры x86, при котором используется сегментная адресация памяти (адрес ячейки памяти формируется из двух чисел: сдвинутого на 4 бита адреса начала сегмента и смещения ячейки от начала сегмента; любому процессу доступна вся память компьютера). Изначально режим не имел названия, был назван «реальным» только после создания процессоров 80286, поддерживающих режим, названный «защищённым» (режим назван…

Центра́льный проце́ссор (ЦП; также центра́льное проце́ссорное устро́йство — ЦПУ; англ. central processing unit, CPU, дословно — центральное обрабатывающее устройство) — электронный блок либо интегральная схема (микропроцессор), исполняющая машинные инструкции (код программ), главная часть аппаратного обеспечения компьютера или программируемого логического контроллера. Иногда называют микропроцессором или просто процессором.

Многопроцессорностью иногда называют выполнение множественных параллельных программных процессов в системе в противоположность выполнению одного процесса в любой момент времени. Однако термины многозадачность или мультипрограммирование являются более подходящими для описания этого понятия, которое осуществлено главным образом в программном обеспечении, тогда как многопроцессорная обработка является более соответствующей, чтобы описать использование множественных аппаратных процессоров. Система не…

Регистр процессора — блок ячеек памяти, образующий сверхбыструю оперативную память (СОЗУ) внутри процессора; используется самим процессором и большей частью недоступен программисту: например, при выборке из памяти очередной команды она помещается в регистр команд, к которому программист обратиться не может.

Программи́руемая логи́ческая интегра́льная схе́ма (ПЛИС, англ. programmable logic device, PLD) — электронный компонент (интегральная микросхема), используемый для создания конфигурируемых цифровых электронных схем. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредством программирования (проектирования). Для программирования используются программатор и IDE (отладочная среда), позволяющие задать желаемую структуру цифрового устройства в…

Подробнее: ПЛИС

Шина адреса — компьютерная шина, используемая центральным процессором или устройствами, способными инициировать сеансы DMA, для указания физического адреса слова ОЗУ (или начала блока слов), к которому устройство может обратиться для проведения операции чтения или записи.

В компьютерной инженерии микроархитектура (англ. microarchitecture; иногда сокращается до µarch или uarch), также называемая организация компьютера — это способ, которым данная архитектура набора команд (ISA, АНК) реализована в процессоре. Каждая АНК может быть реализована с помощью различных микроархитектур.

Встра́иваемая систе́ма (встро́енная систе́ма, англ. embedded system) — специализированная микропроцессорная система управления, контроля и мониторинга, концепция разработки которой заключается в том, что такая система будет работать, будучи встроенной непосредственно в устройство, которым она управляет.

Аппаратная виртуализация — виртуализация с поддержкой специальной процессорной архитектуры. В отличие от программной виртуализации, с помощью данной техники возможно использование изолированных гостевых систем, управляемых гипервизором напрямую.

Операти́вная па́мять (англ. Random Access Memory, RAM, память с произвольным доступом) или операти́вное запомина́ющее устро́йство (ОЗУ) — энергозависимая часть системы компьютерной памяти, в которой во время работы компьютера хранится выполняемый машинный код (программы), а также входные, выходные и промежуточные данные, обрабатываемые процессором.

Счётчик кома́нд (также PC = program counter, IP = instruction pointer, IAR = instruction address register, СЧАК = счётчик адресуемых команд) — регистр процессора, который указывает, какую команду нужно выполнять следующей.

Массово-параллельная архитектура (англ. massive parallel processing, MPP, также «массивно-параллельная архитектура») — класс архитектур параллельных вычислительных систем. Особенность архитектуры состоит в том, что память физически разделена.

Северный мост (англ. north bridge) — контроллер (чип), являющийся одним из элементов чипсета материнской (системной) платы и отвечающий за работу центрального процессора (CPU) с ОЗУ (оперативной памятью, RAM) и видеоадаптером.

Двоичная трансляция делится на статическую и динамическую. Динамическая компиляция происходит незаметно для пользователя, при запуске приложения. Статический компилятор делает из двоичного кода исходной архитектуры готовое полноценное приложение для целевой архитектуры. При статической ДТ весь исходный исполняемый файл транслируется в исполнимый файл для целевой архитектуры. Это весьма непростая задача — выполнить данную трансляцию абсолютно корректно, так как не весь код сразу считывается транслятором…

В информатике термин инструкция обозначает одну отдельную операцию процессора, определённую системой команд. В более широком понимании, «инструкцией» может быть любое представление элемента исполнимой программы, такой как байт-код.

Многоя́дерный проце́ссор — центральный процессор, содержащий два и более вычислительных ядра на одном процессорном кристалле или в одном корпусе.

Векторный процессор — это процессор, в котором операндами некоторых команд могут выступать упорядоченные массивы данных — векторы. Отличается от скалярных процессоров, которые могут работать только с одним операндом в единицу времени. Абсолютное большинство процессоров является скалярными или близкими к ним. Векторные процессоры были распространены в сфере научных вычислений, где они являлись основой большинства суперкомпьютеров начиная с 1980-х до 1990-х. Но резкое увеличение производительности…

Запоминающее устройство с произвольным доступом (сокращённо ЗУПД), также Запоминающее устройство с произвольной выборкой (сокращённо ЗУПВ; англ. Random Access Memory, RAM) — один из видов памяти компьютера, позволяющий единовременно получить доступ к любой ячейке (всегда за одно и то же время, вне зависимости от расположения) по её адресу на чтение или запись.

Код операции, операционный код, опкод — часть машинного языка, называемая инструкцией и определяющая операцию, которая должна быть выполнена.

Прерывание (англ. interrupt) — сигнал от программного или аппаратного обеспечения, сообщающий процессору о наступлении какого-либо события, требующего немедленного внимания. Прерывание извещает процессор о наступлении высокоприоритетного события, требующего прерывания текущего кода, выполняемого процессором. Процессор отвечает приостановкой своей текущей активности, сохраняя свое состояние и выполняя функцию, называемую обработчиком прерывания (или программой обработки прерывания), которая реагирует…

Прямой доступ к памяти (англ. direct memory access, DMA) — режим обмена данными между устройствами компьютера или же между устройством и основной памятью, в котором центральный процессор (ЦП) не участвует. Так как данные не пересылаются в ЦП и обратно, скорость передачи увеличивается.

Контроллер памяти — цифровая схема, управляющая потоками данных между вычислительной системой и оперативной памятью. Может представлять собой отдельную микросхему или быть интегрирована в более сложную микросхему, например, в состав северного моста, микропроцессор или систему на кристалле.

Мейнфре́йм (также мэйнфрейм, от англ. mainframe) — большой универсальный высокопроизводительный отказоустойчивый сервер со значительными ресурсами ввода-вывода, большим объёмом оперативной и внешней памяти, предназначенный для использования в критически важных системах (англ. mission-critical) с интенсивной пакетной и оперативной транзакционной обработкой.

Систе́ма на криста́лле (СнК), однокриста́льная систе́ма (англ. System-on-a-Chip, SoC (произносится как «эс-оу-си»)) — в микроэлектронике — электронная схема, выполняющая функции целого устройства (например, компьютера) и размещённая на одной интегральной схеме.

Шина данных — часть системной шины, предназначенная для передачи данных между компонентами компьютера.

Виртуа́льная па́мять (англ. virtual memory) — метод управления памятью компьютера, позволяющий выполнять программы, требующие больше оперативной памяти, чем имеется в компьютере, путём автоматического перемещения частей программы между основной памятью и вторичным хранилищем (например, жёстким диском). Для выполняющейся программы данный метод полностью прозрачен и не требует дополнительных усилий со стороны программиста, однако реализация этого метода требует как аппаратной поддержки, так и поддержки…

Ввод-вывод (от англ. input/output, I/O) в информатике — взаимодействие между обработчиком информации (например, компьютер) и внешним миром, который может представлять как человек, так и любая другая система обработки информации. Ввод — сигнал или данные, полученные системой, а вывод — сигнал или данные, посланные ею (или из неё). Термин также может использоваться как обозначение (или дополнение к обозначению) определенного действия: «выполнять ввод-вывод» означает выполнение операций ввода или вывода…

Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.Компьютерная программа, записанная на машинном языке, состоит из машинных инструкций, каждая из которых представлена в машинном коде в виде т. н. опкода — двоичного кода отдельной операции из системы команд машины. Для удобства программирования вместо числовых…

Совмести́мость — способность различных объектов — аппаратных или программных компонентов — взаимодействовать друг с другом. По отношению к компьютерам можно выделить аппаратную (техническую), программную и информационную совместимость…

Сегментная адресация памяти — схема логической адресации памяти компьютера в архитектуре x86. Линейный адрес конкретной ячейки памяти, который в некоторых режимах работы процессора будет совпадать с физическим адресом, делится на две части: сегмент и смещение. Сегментом называется условно выделенная область адресного пространства определённого размера, а смещением — адрес ячейки памяти относительно начала сегмента. Базой сегмента называется линейный адрес (адрес относительно всего объёма памяти…

Рабо́чая ста́нция (англ. workstation) — комплекс аппаратных и программных средств, предназначенных для решения определённого круга задач.

Основная область памяти (Основная память, англ. Conventional memory) занимает первые 640 Кбайт оперативной памяти в IBM PC-совместимых компьютерах. В эту область загружается таблица векторов прерываний (занимает 1 Кбайт), некоторые данные из BIOS (например, буфер клавиатуры), различные 16-битные программы DOS. Для них 640 Кбайт являются барьером.

AMP или ASMP (от англ.: Asymmetric multiprocessing, рус.: Асимметричная многопроцессорная обработка или Асимметричное мультипроцессирование) — тип многопроцессорной обработки, который использовался до того, как была создана технология симметричного мультипроцессирования (SMP); также использовался как более дешевая альтернатива в системах, которые поддерживали SMP.

Подробнее: Асимметричное мультипроцессирование

Конве́йер — способ организации вычислений, используемый в современных процессорах и контроллерах с целью повышения их производительности (увеличения числа инструкций, выполняемых в единицу времени — эксплуатация параллелизма на уровне инструкций), технология, используемая при разработке компьютеров и других цифровых электронных устройств.

Компью́терная па́мять (устройство хранения информации, запоминающее устройство) — часть вычислительной машины, физическое устройство или среда для хранения данных, используемая в вычислениях в течение определённого времени. Память, как и центральный процессор, является неизменной частью компьютера с 1940-х годов. Память в вычислительных устройствах имеет иерархическую структуру и обычно предполагает использование нескольких запоминающих устройств, имеющих различные характеристики.

Ассе́мблер (от англ. assembler — сборщик) — транслятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.

В области компьютеризации под аппаратным ускорением понимают применение аппаратного обеспечения для выполнения некоторых функций быстрее по сравнению с выполнением программ процессором общего назначения. Примерами аппаратного ускорения может служить блоковое ускорение выполнения в графическом процессоре и инструкции комплексных операций в микропроцессоре.

Подробнее: Аппаратное ускорение

Добавил:

Вуз:

Предмет:

Файл:

МПСиС / Mpsis_konspektlektsiy.pdf

Скачиваний:

264

Добавлен:

18.02.2017

Размер:

7.93 Mб

Скачать

Система команд и способы адресации операндов

Система команд (instruction set) — это совокупность команд, или инструкций, выполнение которых на аппаратном уровне поддерживает процессор. Понятие «система команд» не следует путать с более широким понятием «архитектура системы команд». Архитектура системы команд — это не только система команд, но и средства для их выполнения, такие как форматы данных, системы регистров, способы адресации, модели памяти.

Отметим, что различные процессоры могут использовать одну систему команд, но при этом иметь разное внутреннее устройство. В качестве примера можно привести МП общего назначения фирм Intel и AMD. Программы, разработанные для одного из них, могут быть выполнены и на другом, несмотря на то, что оба процессора созданы независимыми группами людей, имеют разные архитектуры

инаборы технических решений.

Внастоящее время существует множество систем команд, отличающихся по сложности и функциональным возможностям. Некоторые системы команд известны уже не один десяток лет и постоянно расширяются. Проследим историю наиболее популярной из них — системы команд x86 на примере процессоров фирмы Intel:

8086 — 16-разрядные регистры и подсистема памяти, 80 команд (1978 г.);

80186 — добавлены 7 команд (1982 г.);

80286 — добавлены 17 команд (1982 г.);

80386 — регистры и подсистема памяти расширены до 32 разрядов, введены 33 новые команды (1985 г.);

80486 — добавлены 6 команд, а также команды для работы с блоком вычислений с плавающей точкой (1989 г.);

Pentium — добавлены 6 команд, всего их более 150 (1993 г.);

63

∙ x86-64 — регистры и подсистема памяти расширены до 64 разрядов, введены 14 новых команд (2003 г.).

Команды, входящие в систему команд, можно классифицировать по нескольким признакам (рис. 2.2.1): по функциональному назначению; числу адресов, к которым обращается команда; способу адресации.

Рис. 2.2.1. Классификация команд процессора

По функциональному назначению команды разделяются на следующие основные группы операций:

пересылки;

арифметические;

логические;

сдвига;

сравнения;

управления программой;

управления процессором.

Обычно вместо машинных кодов используются близкие к ним машинно-ориентированные языки — ассемблеры, которые позволяют применять мнемоническое представление команд. При дальнейшем рассмотрении будем использовать мнемонические ассемблерные команды условного процессора, не привязываясь к конкретной системе команд. Тем не менее, нижеприведенные обозначения широко распространены и встречаются в составе ассемблеров многих современных процессоров.

Операции пересылки обеспечивают передачу данных между двумя регистрами или регистром и ячейкой памяти. Некоторые процессоры предполагают использование отдельных команд для общения

64

с портами ввода/вывода, пересылки между ячейками памяти и групповой пересылки, когда содержимое нескольких регистров пересылается в память или загружается из нее. Формат команд этой группы: MOV <приемник>, <источник> — пересылка между регистрами; LD — загрузка данных из памяти в регистр; ST — сохранение данных из регистра в память.

Арифметические операции включают такие команды, как сложение, вычитание, умножение и деление. Различают команды, которые выполняют операции непосредственно с операндами, и команды, которые учитывают сформированный предыдущими командами бит переноса. Команды, учитывающие бит переноса, используются при обработке слов с разрядностью, превышающей разрядность процессора. Так, в простейших системах операции умножения и деления не входят в систему команд процессора и реализуются программно. При умножении разрядность произведения в два раза больше разрядности операндов, поэтому для хранения результата используются два регистра (младшая и старшая части произведения). При делении делимое тоже имеет удвоенную разрядность и размещается в двух регистрах. В этом случае в качестве результата в двух регистрах сохраняются частное и остаток. Формат арифметических команд: ADD <операнд 1/приемник результата>, <операнд 2>, SUB, MUL, DIV — сложение, вычитание, умножение и деление соответственно.

Логические операции включают операции И (AND), ИЛИ (OR), НЕ (NOT), Исключающее ИЛИ (XOR). Логические операции выполняются поразрядно над содержимым двух регистров, регистра и ячейки памяти или с использованием операнда, который размещен в самой команде. Для этого применяют двухадресные команды AND (OR, XOR) <операнд 1/приемник результата>, <операнд 2>. Одноадресная команда NOT инвертирует каждый разряд операнда.

Микропроцессоры могут включать в свою систему команд логические, арифметические и циклические сдвиги адресуемых операндов на один или несколько разрядов (рис. 2.2.2). Сдвигаемый операнд может находиться в регистре или ячейке памяти, а число разрядов, на которое сдвигается операнд может либо задаваться с помощью операнда, содержащегося в команде при непосредственной адресации, либо определяться содержимым заданного регистра . Мнемоника таких команд выглядит следующим образом:

65

SHL (SHR) <операнд/приемник результата> — логический сдвиг влево (вправо);

SAL (SAR) — арифметический сдвиг влево (вправо);

ROL (ROR) — циклический сдвиг влево (вправо);

RCL (RCR) — сдвиг влево (вправо) на заданное число раз-

рядов.

SAL, SHL

С

Операнд

0

SHR

0

Операнд

С

SAR

Операнд

С

ROL

С

Операнд

ROR

Операнд

С

Рис. 2.2.2. Реализация команд сдвига

Операции сравнения в общем виде можно представить следующим образом: СМР <операнд 1>, <операнд 2>. Для выполнения данной команды производится вычитание двух указанных операндов, при этом результат вычитания не сохраняется, операнды не изменяются, а результатом операции является изменение содержимого регистра состояний процессора.

66

Операции управления программой делятся на команды безусловной передачи управления (CALL — вызов подпрограммы, JMP — переход по указанному адресу), команды возврата (RET — возврат из подпрограммы, IRET — возврат из прерывания) и команды условного перехода (JCC), которые выполняются в зависимости от состояния флагов (нулевого результата, переноса и других) процессора.

Операции управления процессором включают команды:

HALT — остановка выполнения текущей программы;

RST (reset) — сброс всех регистров, в том числе регистров состояния процессора;

NOP (no operation) — нет операции, цикл ожидания. Отметим, что при проектировании процессора и выборе набора

команд для него чаще всего применяют проблемно-ориентированный подход. Для универсальных процессоров используют большой набор команд. В набор команд специализированных процессоров, например обработки сигналов, включают команду умножения с накоплением, которая выполняется за один такт и позволяет повысить производительность процессора в задачах фильтрации и обработки сигналов. Недорогие микроконтроллеры содержат минимальный набор необходимых инструкций (что упрощает их разработку), дающий возможность, однако, реализовать сложные функции через последовательность простых. Конечно, при этом приходится жертвовать быстродействием, но для ряда задач важно минимальное энергопотребление в ущерб производительности.

В соответствии с концепцией проблемно-ориентированного подхода широкое распространение сейчас получили «проблемно-ориен- тированные процессоры» — компоненты систем на кристалле, спроектированные для выполнения специфических операций (например, векторные сопроцессоры, процессорные ядра цифровой обработки сигналов), позволяющие достичь компромисса между универсальностью МП общего назначения и производительностью специализированной заказной микросхемы.

Команда микропроцессора состоит из двух полей (рис. 2.2.3): поля кода операции (КОП) и поля адреса, которое может включать несколько кодов адреса (КАД).

КОП определяет действие, выполняемое процессором, а КАД — операнды. КАД может отсутствовать, если команда является безадресной, например, команды проверки флагов процессора или управ-

67

КАД 1 КАД 2 … КАД n

Поле КОП

Поле адреса

Рис. 2.2.3. Формат команды микропроцессора

ляющие его работой. Команды, работающие с данными (пересылки, арифметические, логические и сдвига), могут иметь один и более операндов и, соответственно, полей КАД (см. рис. 2.2.3). Так, операция побитовой инверсии является одноадресной, команды сложения и вычитания — двухадресными. В более сложных системах команд встречаются трехадресные инструкции, например, чтение из регистров двух операндов, их сложение и размещение результата в третьем ( = + ) или инструкция умножения с накоплением ( = · + ).

Различают шесть основных способов адресации операндов:

непосредственная;

прямая;

регистровая;

косвенно-регистровая;

косвенно-регистровая со смещением;

относительная.

При непосредственной адресации операнд содержится в поступившей команде и используется для введения различных констант. Такой способ вызывает увеличение размера команды на число байтов заданного операнда.

Разновидностью такой адресации является адресация, при которой операнд подразумевается, а не указывается явным образом. Примером может служить операция сравнения с нулем, в которой нуль не задается явным образом, но подразумевается.

При прямой адресации операнд выбирается из ячейки памяти, адрес которой указан в команде (рис. 2.2.4). Достоинство данного способа — простота, недостаток — большая разрядность адресного поля, зависящая от размера адресного пространства.

При регистровой адресации операнд выбирают из ячейки регистрового запоминающего устройства (РЗУ), номер (или имя) которой указан в команде (рис. 2.2.5). Регистровая адресация отличается

68

Адрес 1

Память

Операнд 1

КОП

КАД 1

КАД 2

Поле адреса

Адрес 2

Операнд 2

Рис. 2.2.4. Прямая адресация операндов

простотой и быстродействием и весьма распространена. Такой способ адресации не требует обращения к внешней памяти из-за того, что РЗУ находится на кристалле процессора. Как следствие, выполнение операций при регистровой адресации занимает минимальное время, однако необходимо периодическое обращение к памяти для сохранения результатов и записи операндов в РЗУ, что несколько уменьшает выгоду от использования такого способа адресации. Дешифрация адреса также относительно проста: объем РЗУ ограничен, а для задания номера регистра требуется всего несколько битов (3 – 8).

Номер/имя

регистра

РЗУ

КОП

КАД 1

КАД 2

Операнд 1

Поле адреса

Операнд 2

Рис. 2.2.5. Регистровая адресация операндов

При косвенно-регистровой адресации операнд выбирается из ячейки памяти, адрес которой содержится в регистре, указанном в команде (рис. 2.2.6).

При косвенно-регистровой адресации со смещением операнд выбирают из ячейки памяти, адрес которой является суммой содержимого регистра, адрес которого указан в команде, и операнда смещения (смещение может быть положительным или отрицательным).

69

Номер/имя

регистра

РЗУ

Память

КОП

КАД 1

КАД 2

Адрес 1

Операнд 1

Поле адреса

Адрес 2

Операнд 2

Рис. 2.2.6. Косвенно-регистровая адресация операндов

Разновидностями косвенно-регистровой адресации со смещением являются автоинкрементная и автодекрементная адресации. Как и при косвенно-регистровой адресации, адрес ячейки операнда хранится в регистре, но при каждом обращении к регистру его значение увеличивается или уменьшается на единицу. Эти способы адресации удобны при обработке массивов данных в цикле, поскольку нет необходимости каждый раз загружать адрес обрабатываемого значения массива в регистр.

При относительной адресации операнд выбирается из ячейки памяти, адрес которой является суммой текущего содержимого программного счетчика и заданного в команде смещения — базового адреса (рис. 2.2.7). В большинстве случаев такой способ адресации используется не для адресации операнда, а для формирования адреса команды, к которой переходит программа при выполнении команд ветвления. Сформированный адрес загружается в счетчик программ, обеспечивая выборку требуемой команды. Достоинством данного способа является то, что адресное поле команды может быть меньше шины адреса процессора.

Рис. 2.2.7. Относительная адресация операндов

70

Отметим, что наиболее распространенными являются различные варианты косвенно-регистровой адресации. При этом в команде указывается только номер регистра, используемого в качестве адресного, следовательно, размер команды оказывается небольшим (как при регистровой адресации). Однако выборка операнда из ОЗУ требует выполнения циклов передачи данных по системной шине, что снижает производительность МП.

Принцип совмещения выполнения операций во времени известен давно и широко применяется на практике. Этот общий принцип включает два понятия: параллелизм и конвейеризация. Хотя у них много общего и их зачастую трудно различить, эти термины отражают два различных подхода: при параллелизме совмещение операций достигается воспроизведением их в нескольких копиях аппаратной структуры, этот подход рассмотрен в разделе 5, далее подробнее рассмотрим конвейеризацию.

Конвейерный принцип выполнения команд

Конвейеризация (instruction pipelining) в общем случае основана на разделении выполняемой операции на части, называемые ступенями, и выделении для каждой из них отдельного блока аппаратуры. Таким образом, обработку любой машинной команды можно разделить на несколько этапов, организовав передачу данных от одного этапа к следующему. При этом конвейерную обработку можно использовать для совмещения этапов выполнения разных команд. Производительность процессора в данном случае возрастает благодаря тому, что одновременно на различных ступенях конвейера выполняются несколько команд. Конвейерная обработка широко применяется во всех современных быстродействующих процессорах.

Конвейеризация увеличивает количество команд, завершающихся в единицу времени, следовательно, программа будет выполняться быстрее. Отметим, что при этом конвейеризация не сокращает время выполнения отдельной команды. Производительность процессора прямо пропорциональна его тактовой частоте и обратно пропорциональна длительности самой медленной ступени конвейера.

Если в процессоре без применения конвейера одна команда выполняется за тактов, то говорят о производительности 1/ команд за такт. Если в этот процессор ввести конвейер длиной ступеней, то

71

при полной загрузке конвейера производительность процессора увеличится в раз. Таким образом, эффективнее разбивать команды на большее количество ступеней и делать конвейер более длинным, повышая общую производительность процессора.

Конвейер позволяет увеличить производительность процессора враз только тогда, когда его загрузка близка к полной, а скорость подачи новых команд и операндов соответствует максимальной производительности конвейера. Если произойдет задержка, то параллельно будет выполняться меньшее количество команд, и суммарная производительность конвейера, а следовательно, и всего МП снизится.

Кроме того, введение конвейерной обработки возможно для больших комбинационных схем. В качестве примера можно привести умножитель 32 × 32 бита, в котором самый старший бит результата является функцией от всех 64 битов операндов, поэтому расчет произведения занимает значительное время. Такой умножитель можно реализовать, объединив четыре умножителя 16 × 16 битов, работающих последовательно, что позволяет увеличить частоту работы схемы.

Однако в процессе конвейерной обработки иногда возникают ситуации, которые препятствуют выполнению очередной команды из потока команд в предназначенном для нее такте. Такие ситуации называются конфликтами. Конфликты приводят к необходимости приостановки выполнения команд и снижают производительность конвейера. В самом простом случае, если приостанавливается какая-либо команда, то все следующие за ней команды также приостанавливаются. Команды, предшествующие приостановленной, могут продолжать выполняться, но во время приостановки не выбирается ни одна новая команда.

Состояние ожидания (ОЖ) — состояние, при котором конвейер пропускает один или несколько тактов из-за того, что не готовы операнды.

Состояние простоя (ПР) — состояние, при котором конвейер пропускает один или несколько тактов потому, что данный этап конвейера не используется в данной команде.

Рассмотрим пример разбиения команды на ступени:

1)ВК — выборка команды;

2)ДК — дешифрация команды;

3)ФА — формирование адреса;

72

4)ПО — получение операндов;

5)ВО — выполнение операции;

6)РР — размещение результата в РЗУ или памяти.

На рис. 2.2.8, а представлены временные диаграммы функционирования конвейера при идеальной загрузке на примере выполнения трех команд: инструкция 1 находится на стадии РР, в то время как последняя команда 3 находится на стадии получения операндов.

а

K1

ВК ДК ФА ПО ВО РР

K2

ВК ДК ФА ПО ВО РР

K3

ВК

ДК

ФА

ПО

ВО РР

t

б

INC

ВК ДК

ПР

ПР

ВО

РР

MOV

ВК

ДК

ОЖ ОЖ ФА

ПО ВО РР

ADD

ВК

ДК

ФА

ПО ОЖ ОЖ ВО

РР

Рис. 2.2.8. Временные диаграммы функционирования 6-ступенчатого конвейера команд: а — при идеальной загрузке; б — при наличии зависимостей по данным

На рис. 2.2.8, б показано, как снижается производительность конвейерной обработки команд при выполнении трех команд, имеющих зависимости по данным:

1)INC R2 — увеличение содержимого регистра R2 на единицу;

2)MOV R3, (R2) — пересылка содержимого ячейки памяти, адрес которой находится в R2, в регистр R3;

3)ADD R3, (R4) — сложение содержимого регистра R3 с содержимым ячейки памяти, адрес которой находится в R4, сохранение результата в R3.

На рис. 2.2.8, б показано также, что при выполнении реальной программы возникают состояния ожидания и простоя конвейера. Первая команда вызывает состояние простоя конвейера, потому что команда инкремента не проходит стадии ПО. Вторая и третья команды вызывают состояние ожидания конвейера из-за того, что неизвестен результат выполнения предыдущей операции.

73

По причинам возникновения различают следующие типы конфликтов:

1)структурные — когда аппаратные средства не могут поддерживать все возможные комбинации команд в режиме одновременного выполнения с совмещением;

2)конфликты по данным — когда выполнение текущей команды зависит от результата выполнения предыдущей команды;

3)конфликты по управлению — когда команда переходов либо какая-то другая изменяет значение программного счетчика.

Контрольные вопросы

1.Дайте определение системы команд процессора.

2.По каким признакам можно классифицировать команды микропроцессора?

3.Какие способы адресации вы знаете?

4.В чем состоит конвейерный принцип выполнения команд?

5.Какие типы конфликтов выделяют в конвейере?

Литература

1.Микропроцессоры. В 3-х кн. Кн. 1. Архитектура и проектирование микроЭВМ: учебник для втузов / Под ред. Л.Н. Преснухина. — М.: Высшая школа, 1986. — 495 с.

2.Микропроцессорные системы: учеб. пособие для вузов /

Е.К. Александров, Р.И. Грушвицкий, М.С. Куприянов и др.; под ред. Д.В. Пузанкова. — СПб.: Политехника, 2002. — 935 с.

74

Соседние файлы в папке МПСиС

  • #

    18.02.20171.26 Mб431.doc

  • #

    18.02.2017688.64 Кб302.doc

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

    18.02.20170 б37МПСиС Лабы 10 вариант

Система команд

  • Систе́ма кома́нд (также набо́р команд) — соглашение о предоставляемых архитектурой средствах программирования, а именно:

    * определённых типах данных,

    * инструкций,

    * системы регистров,

    * методов адресации,

    * моделей памяти,

    * способов обработки прерываний и исключений,

    методов ввода и вывода.Система команд представляется спецификацией соответствия (микро)команд наборам кодов (микро)операций, выполняемых при вызове команды, определяемых (микро)архитектурой системы. (При этом на системах с различной (микро)архитектурой может быть реализована одна и та же система команд. Например, Intel Pentium и AMD Athlon имеют почти идентичные версии системы команд x86, но имеют радикально различный внутренний дизайн.)

    Базовыми командами являются, как правило, следующие:

    * арифметические, например, «сложения» и «вычитания»;

    битовые, например, «логическое и», «логическое или» и «логическое не»;

    * присваивание данных, например, «переместить», «загрузить», «выгрузить»;

    * ввода-вывода, для обмена данными с внешними устройствами;

    управляющие инструкции, например, безусловный, условный или косвенный переход, вызов подпрограммы, возврат из подпрограммы.Оптимальными в различных ситуациях являются разные способы построения системы команд:

    * Если объединить наиболее часто используемую последовательность микроопераций под одной микрокомандой, то надо будет обеспечивать меньше микрокоманд. Такое построение системы команд носит название CISC (Complex Instruction Set Computer), в распоряжении имеется небольшое число составных команд.

    * С другой стороны, это объединение уменьшает гибкость системы команд. Вариант с наибольшей гибкостью — наличие множества близких к элементарным операциям команд. Это RISC (Reduced Instruction Set Computer), в распоряжении имеются усечённые, простые команды.

    * Ещё большую гибкость системы команд можно получить, используя MISC-подход, построенный на уменьшении количества команд до минимального и упрощении вычислительного устройства обработки этих команд.

Источник: Википедия

Связанные понятия

Архитектура набора команд (англ. instruction set architecture, ISA) — часть архитектуры компьютера, определяющая программируемую часть ядра микропроцессора. На этом уровне определяются реализованные в микропроцессоре конкретного типа…

Математический сопроцессор — сопроцессор для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.

Сопроцессор — специализированный процессор, расширяющий возможности центрального процессора компьютерной системы, но оформленный как отдельный функциональный модуль. Физически сопроцессор может быть отдельной микросхемой или может быть встроен в центральный процессор (как это делается в случае математического сопроцессора в процессорах для ПК начиная с Intel 486DX).

Микроко́д — программа, реализующая набор инструкций процессора. Так же как одна инструкция языка высокого уровня преобразуется в серию машинных инструкций, в процессоре, использующем микрокод, каждая машинная инструкция реализуется в виде серии микроинструкций — микропрограммы, микрокода.

Архитекту́ра проце́ссора — количественная составляющая компонентов микроархитектуры вычислительной машины (процессора компьютера) (например, регистр флагов или регистры процессора), рассматриваемая IT-специалистами в аспекте прикладной деятельности.

Блок управления памятью или устройство управления памятью (англ. memory management unit, MMU) — компонент аппаратного обеспечения компьютера, отвечающий за управление доступом к памяти, запрашиваемым центральным процессором.

Суперскалярный процессор (англ. superscalar processor) — процессор, поддерживающий так называемый параллелизм на уровне инструкций (то есть, процессор, способный выполнять несколько инструкций одновременно) за счёт включения в состав его вычислительного ядра нескольких одинаковых функциональных узлов (таких как АЛУ, FPU, умножитель (integer multiplier), сдвигающее устройство (integer shifter) и другие устройства). Планирование исполнения потока инструкций осуществляется динамически вычислительным…

Подробнее: Суперскалярность

Защищённый режим (режим защищённой виртуальной адресации) — режим работы x86-совместимых процессоров. Частично был реализован уже в процессоре 80286, но там существенно отличался способ работы с памятью, так как процессоры ещё были 16-битными и не была реализована страничная организация памяти. Первая 32-битная реализация защищённого режима — процессор Intel 80386. Применяется в совместимых процессорах других производителей. Данный режим используется в современных многозадачных операционных системах…

Термин «ядро микропроцессора» (англ. processor core) не имеет чёткого определения и в зависимости от контекста употребления может обозначать особенности, позволяющие выделить модель в отдельный вид…

Внеочередное исполнение (англ. out-of-order execution) машинных инструкций — исполнение машинных инструкций не в порядке следования в машинном коде (как было при выполнении инструкций по порядку (англ. in-order execution)), а в порядке готовности к выполнению. Реализуется с целью повышения производительности вычислительных устройств. Среди широко известных машин впервые в существенной мере реализована в машинах CDC 6600 компании Control Data и IBM System/360 Model 91 компании IBM.

Архитекту́ра компью́тера — набор типов данных, операций и характеристик каждого отдельно взятого уровня. Архитектура связана с программными аспектами. Аспекты реализации (например, технология, применяемая при реализации памяти) не являются частью архитектуры.

Мультипроцессор (от англ. multiprocessor, multiprocessing) — это подкласс многопроцессорных компьютерных систем, где есть несколько процессоров и одно адресное пространство, видимое для всех процессоров. В таксономии Флинна мультипроцессоры относятся к классу SM-MIMD-машин. Мультипроцессор запускает одну копию ОС с одним набором таблиц, в том числе тех, которые следят какие страницы памяти свободны.

Реальный режим (или режим реальных адресов; англ. real-address mode) — режим работы процессоров архитектуры x86, при котором используется сегментная адресация памяти (адрес ячейки памяти формируется из двух чисел: сдвинутого на 4 бита адреса начала сегмента и смещения ячейки от начала сегмента; любому процессу доступна вся память компьютера). Изначально режим не имел названия, был назван «реальным» только после создания процессоров 80286, поддерживающих режим, названный «защищённым» (режим назван…

Центра́льный проце́ссор (ЦП; также центра́льное проце́ссорное устро́йство — ЦПУ; англ. central processing unit, CPU, дословно — центральное обрабатывающее устройство) — электронный блок либо интегральная схема (микропроцессор), исполняющая машинные инструкции (код программ), главная часть аппаратного обеспечения компьютера или программируемого логического контроллера. Иногда называют микропроцессором или просто процессором.

Многопроцессорностью иногда называют выполнение множественных параллельных программных процессов в системе в противоположность выполнению одного процесса в любой момент времени. Однако термины многозадачность или мультипрограммирование являются более подходящими для описания этого понятия, которое осуществлено главным образом в программном обеспечении, тогда как многопроцессорная обработка является более соответствующей, чтобы описать использование множественных аппаратных процессоров. Система не…

Регистр процессора — блок ячеек памяти, образующий сверхбыструю оперативную память (СОЗУ) внутри процессора; используется самим процессором и большей частью недоступен программисту: например, при выборке из памяти очередной команды она помещается в регистр команд, к которому программист обратиться не может.

Программи́руемая логи́ческая интегра́льная схе́ма (ПЛИС, англ. programmable logic device, PLD) — электронный компонент (интегральная микросхема), используемый для создания конфигурируемых цифровых электронных схем. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредством программирования (проектирования). Для программирования используются программатор и IDE (отладочная среда), позволяющие задать желаемую структуру цифрового устройства в…

Подробнее: ПЛИС

Шина адреса — компьютерная шина, используемая центральным процессором или устройствами, способными инициировать сеансы DMA, для указания физического адреса слова ОЗУ (или начала блока слов), к которому устройство может обратиться для проведения операции чтения или записи.

В компьютерной инженерии микроархитектура (англ. microarchitecture; иногда сокращается до µarch или uarch), также называемая организация компьютера — это способ, которым данная архитектура набора команд (ISA, АНК) реализована в процессоре. Каждая АНК может быть реализована с помощью различных микроархитектур.

Встра́иваемая систе́ма (встро́енная систе́ма, англ. embedded system) — специализированная микропроцессорная система управления, контроля и мониторинга, концепция разработки которой заключается в том, что такая система будет работать, будучи встроенной непосредственно в устройство, которым она управляет.

Аппаратная виртуализация — виртуализация с поддержкой специальной процессорной архитектуры. В отличие от программной виртуализации, с помощью данной техники возможно использование изолированных гостевых систем, управляемых гипервизором напрямую.

Операти́вная па́мять (англ. Random Access Memory, RAM, память с произвольным доступом) или операти́вное запомина́ющее устро́йство (ОЗУ) — энергозависимая часть системы компьютерной памяти, в которой во время работы компьютера хранится выполняемый машинный код (программы), а также входные, выходные и промежуточные данные, обрабатываемые процессором.

Счётчик кома́нд (также PC = program counter, IP = instruction pointer, IAR = instruction address register, СЧАК = счётчик адресуемых команд) — регистр процессора, который указывает, какую команду нужно выполнять следующей.

Массово-параллельная архитектура (англ. massive parallel processing, MPP, также «массивно-параллельная архитектура») — класс архитектур параллельных вычислительных систем. Особенность архитектуры состоит в том, что память физически разделена.

Северный мост (англ. north bridge) — контроллер (чип), являющийся одним из элементов чипсета материнской (системной) платы и отвечающий за работу центрального процессора (CPU) с ОЗУ (оперативной памятью, RAM) и видеоадаптером.

Двоичная трансляция делится на статическую и динамическую. Динамическая компиляция происходит незаметно для пользователя, при запуске приложения. Статический компилятор делает из двоичного кода исходной архитектуры готовое полноценное приложение для целевой архитектуры. При статической ДТ весь исходный исполняемый файл транслируется в исполнимый файл для целевой архитектуры. Это весьма непростая задача — выполнить данную трансляцию абсолютно корректно, так как не весь код сразу считывается транслятором…

В информатике термин инструкция обозначает одну отдельную операцию процессора, определённую системой команд. В более широком понимании, «инструкцией» может быть любое представление элемента исполнимой программы, такой как байт-код.

Многоя́дерный проце́ссор — центральный процессор, содержащий два и более вычислительных ядра на одном процессорном кристалле или в одном корпусе.

Векторный процессор — это процессор, в котором операндами некоторых команд могут выступать упорядоченные массивы данных — векторы. Отличается от скалярных процессоров, которые могут работать только с одним операндом в единицу времени. Абсолютное большинство процессоров является скалярными или близкими к ним. Векторные процессоры были распространены в сфере научных вычислений, где они являлись основой большинства суперкомпьютеров начиная с 1980-х до 1990-х. Но резкое увеличение производительности…

Запоминающее устройство с произвольным доступом (сокращённо ЗУПД), также Запоминающее устройство с произвольной выборкой (сокращённо ЗУПВ; англ. Random Access Memory, RAM) — один из видов памяти компьютера, позволяющий единовременно получить доступ к любой ячейке (всегда за одно и то же время, вне зависимости от расположения) по её адресу на чтение или запись.

Код операции, операционный код, опкод — часть машинного языка, называемая инструкцией и определяющая операцию, которая должна быть выполнена.

Прерывание (англ. interrupt) — сигнал от программного или аппаратного обеспечения, сообщающий процессору о наступлении какого-либо события, требующего немедленного внимания. Прерывание извещает процессор о наступлении высокоприоритетного события, требующего прерывания текущего кода, выполняемого процессором. Процессор отвечает приостановкой своей текущей активности, сохраняя свое состояние и выполняя функцию, называемую обработчиком прерывания (или программой обработки прерывания), которая реагирует…

Прямой доступ к памяти (англ. direct memory access, DMA) — режим обмена данными между устройствами компьютера или же между устройством и основной памятью, в котором центральный процессор (ЦП) не участвует. Так как данные не пересылаются в ЦП и обратно, скорость передачи увеличивается.

Контроллер памяти — цифровая схема, управляющая потоками данных между вычислительной системой и оперативной памятью. Может представлять собой отдельную микросхему или быть интегрирована в более сложную микросхему, например, в состав северного моста, микропроцессор или систему на кристалле.

Мейнфре́йм (также мэйнфрейм, от англ. mainframe) — большой универсальный высокопроизводительный отказоустойчивый сервер со значительными ресурсами ввода-вывода, большим объёмом оперативной и внешней памяти, предназначенный для использования в критически важных системах (англ. mission-critical) с интенсивной пакетной и оперативной транзакционной обработкой.

Систе́ма на криста́лле (СнК), однокриста́льная систе́ма (англ. System-on-a-Chip, SoC (произносится как «эс-оу-си»)) — в микроэлектронике — электронная схема, выполняющая функции целого устройства (например, компьютера) и размещённая на одной интегральной схеме.

Шина данных — часть системной шины, предназначенная для передачи данных между компонентами компьютера.

Виртуа́льная па́мять (англ. virtual memory) — метод управления памятью компьютера, позволяющий выполнять программы, требующие больше оперативной памяти, чем имеется в компьютере, путём автоматического перемещения частей программы между основной памятью и вторичным хранилищем (например, жёстким диском). Для выполняющейся программы данный метод полностью прозрачен и не требует дополнительных усилий со стороны программиста, однако реализация этого метода требует как аппаратной поддержки, так и поддержки…

Ввод-вывод (от англ. input/output, I/O) в информатике — взаимодействие между обработчиком информации (например, компьютер) и внешним миром, который может представлять как человек, так и любая другая система обработки информации. Ввод — сигнал или данные, полученные системой, а вывод — сигнал или данные, посланные ею (или из неё). Термин также может использоваться как обозначение (или дополнение к обозначению) определенного действия: «выполнять ввод-вывод» означает выполнение операций ввода или вывода…

Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.Компьютерная программа, записанная на машинном языке, состоит из машинных инструкций, каждая из которых представлена в машинном коде в виде т. н. опкода — двоичного кода отдельной операции из системы команд машины. Для удобства программирования вместо числовых…

Совмести́мость — способность различных объектов — аппаратных или программных компонентов — взаимодействовать друг с другом. По отношению к компьютерам можно выделить аппаратную (техническую), программную и информационную совместимость…

Сегментная адресация памяти — схема логической адресации памяти компьютера в архитектуре x86. Линейный адрес конкретной ячейки памяти, который в некоторых режимах работы процессора будет совпадать с физическим адресом, делится на две части: сегмент и смещение. Сегментом называется условно выделенная область адресного пространства определённого размера, а смещением — адрес ячейки памяти относительно начала сегмента. Базой сегмента называется линейный адрес (адрес относительно всего объёма памяти…

Рабо́чая ста́нция (англ. workstation) — комплекс аппаратных и программных средств, предназначенных для решения определённого круга задач.

Основная область памяти (Основная память, англ. Conventional memory) занимает первые 640 Кбайт оперативной памяти в IBM PC-совместимых компьютерах. В эту область загружается таблица векторов прерываний (занимает 1 Кбайт), некоторые данные из BIOS (например, буфер клавиатуры), различные 16-битные программы DOS. Для них 640 Кбайт являются барьером.

AMP или ASMP (от англ.: Asymmetric multiprocessing, рус.: Асимметричная многопроцессорная обработка или Асимметричное мультипроцессирование) — тип многопроцессорной обработки, который использовался до того, как была создана технология симметричного мультипроцессирования (SMP); также использовался как более дешевая альтернатива в системах, которые поддерживали SMP.

Подробнее: Асимметричное мультипроцессирование

Конве́йер — способ организации вычислений, используемый в современных процессорах и контроллерах с целью повышения их производительности (увеличения числа инструкций, выполняемых в единицу времени — эксплуатация параллелизма на уровне инструкций), технология, используемая при разработке компьютеров и других цифровых электронных устройств.

Компью́терная па́мять (устройство хранения информации, запоминающее устройство) — часть вычислительной машины, физическое устройство или среда для хранения данных, используемая в вычислениях в течение определённого времени. Память, как и центральный процессор, является неизменной частью компьютера с 1940-х годов. Память в вычислительных устройствах имеет иерархическую структуру и обычно предполагает использование нескольких запоминающих устройств, имеющих различные характеристики.

Ассе́мблер (от англ. assembler — сборщик) — транслятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.

В области компьютеризации под аппаратным ускорением понимают применение аппаратного обеспечения для выполнения некоторых функций быстрее по сравнению с выполнением программ процессором общего назначения. Примерами аппаратного ускорения может служить блоковое ускорение выполнения в графическом процессоре и инструкции комплексных операций в микропроцессоре.

Подробнее: Аппаратное ускорение

Систе́ма кома́нд (также набо́р команд) — соглашение о предоставляемых архитектурой средствах программирования, а именно: определённых типах данных, инструкций, системы регистров, методов адресации, моделей памяти, способов обработки прерываний и исключений, методов ввода и вывода.

Система команд представляется спецификацией соответствия (микро)команд наборам кодов (микро)операций, выполняемых при вызове команды, определяемых (микро)архитектурой системы. (При этом, на системах с различной (микро)архитектурой может быть реализована одна и та же система команд. Например, Intel Pentium и AMD Athlon имеют почти идентичные версии системы команд x86, но имеют радикально различный внутренний дизайн.)

Базовыми командами являются, как правило, следующие:

  • арифметические, например «сложения» и «вычитания»;
  • битовые, например «логическое и», «логическое или» и «логическое не»;
  • присваивание данных, например «переместить», «загрузить», «выгрузить»;
  • ввода-вывода, для обмена данными с внешними устройствами;
  • управляющие инструкции, например «переход», «условный переход», «вызов подпрограммы», «возврат из подпрограммы».

Оптимальными в различных ситуациях являются разные способы построения системы команд.

  • Если объединить наиболее часто используемую последовательность микроопераций под одной микрокомандой, то надо будет обеспечивать меньше микрокоманд. Такое построение системы команд носит название CISC (Complex Instruction Set Computer), в распоряжении имеется небольшое число составных команд.
  • С другой стороны, это объединение уменьшает гибкость системы команд. Вариант с наибольшей гибкостью — наличие множества близких к элементарным операциям команд. Это RISC (Reduced Instruction Set Computer), в распоряжении имеются усечённые, простые команды.
  • Еще большую гибкость системы команд можно получить используя MISC подход, построенный на уменьшении количества команд до минимального и упрощении вычислительного устройства обработки этих команд.

См. также

  • Список систем команд
 Просмотр этого шаблона Технологии цифровых процессоров
Архитектура

CISC · EDGE · EPIC · MISC · URISC · RISC · VLIW · ZISC · Фон Неймана · Гарвардская

8 бит  · 16 бит · 32 бит · 64 бит · 128 бит

Параллелизм
Pipeline Конвейер · In-Order & Out-of-Order execution · Переименование регистров · Speculative execution
Уровни Бит · Инструкций · Суперскалярность · Данных · Задач
Потоки Многопоточность · Simultaneous multithreading · Hyperthreading · Superthreading · Аппаратная виртуализация
Классификация Флинна SISD · SIMD · MISD · MIMD
Реализации DSP · GPU · SoC · PPU · Векторный процессор · Математический сопроцессор • Микропроцессор · Микроконтроллер
Компоненты Barrel shifter · FPU · BSB · MMU · TLB · Регистровый файл · control unit · АЛУ • Демультиплексор · Мультиплексор · Микрокод · Тактовая частота • Корпус • Регистры • Кэш (Кэш процессора)
Управление питанием APM · ACPI · Clock gating · Динамическое изменение частоты • Динамическое изменение напряжения

Набор абстрактных символов, которые описывают операции компьютерной программы с процессором

В информатике, архитектура набора команд (ISA ) — это абстрактная модель компьютера. Он также упоминается как архитектура или архитектура компьютера . Реализация ISA, такая как центральный процессор (CPU), называется реализацией.

Как правило, ISA определяет поддерживаемые типы данных, регистры, аппаратную поддержку для управления основной памятью, основные функции (такие как как согласованность памяти, режимы адресации, виртуальная память ) и модель ввода / вывода семейства реализаций ISA.

ISA определяет поведение машинного кода, выполняемого в реализациях этого ISA, способом, который не зависит от характеристик этой реализации, обеспечивая двоичную совместимость между реализации. Это позволяет использовать несколько реализаций ISA, которые отличаются производительностью, физическим размером и денежной стоимостью (среди прочего), но которые способны выполнять один и тот же машинный код, так что более низкая производительность, более низкая дорогостоящая машина может быть заменена более дорогой и производительной машиной без необходимости замены программного обеспечения. Это также дает возможность эволюции микроархитектур реализаций этого ISA, так что более новая, более производительная реализация ISA может запускать программное обеспечение, которое работает на предыдущих поколениях реализаций.

Если операционная система поддерживает стандартный и совместимый двоичный интерфейс приложения (ABI) для определенного ISA, машинный код для этого ISA и операционной системы будет работать в будущем. реализации этой ISA и более новых версий этой операционной системы. Однако, если ISA поддерживает запуск нескольких операционных систем, это не гарантирует, что машинный код для одной операционной системы будет работать в другой операционной системе, если только первая операционная система не поддерживает выполнение машинного кода, созданного для другой операционной системы.

ISA может быть расширен путем добавления инструкций или других возможностей или добавления поддержки для больших адресов и значений данных; реализация расширенного ISA по-прежнему сможет выполнять машинный код для версий ISA без этих расширений. Машинный код, использующий эти расширения, будет работать только в реализациях, поддерживающих эти расширения.

Бинарная совместимость, которую они обеспечивают, делает ISA одной из самых фундаментальных абстракций в вычислениях.

Содержание

  • 1 Обзор
  • 2 Классификация ISA
  • 3 Инструкции
    • 3.1 Типы команд
      • 3.1.1 Обработка данных и операции с памятью
      • 3.1.2 Арифметические и логические операции
      • 3.1.3 Операции потока управления
      • 3.1.4 Команды сопроцессора
    • 3.2 Сложные команды
    • 3.3 Кодирование команд
      • 3.3.1 Число операндов
    • 3.4 Давление регистра
    • 3.5 Длина команды
    • 3.6 Плотность кода
    • 3.7 Представление
  • 4 Дизайн
  • 5 Реализация набора команд
  • 6 См. Также
  • 7 Ссылки
  • 8 Дополнительная литература
  • 9 Внешние ссылки

Обзор

Архитектура набора команд отличается от микроархитектуры, которая представляет собой набор разработка процессора методы, используемые в конкретном процессоре для реализации набора команд. Процессоры с разной микроархитектурой могут использовать общий набор команд. Например, Intel Pentium и Advanced Micro Devices Athlon реализуют почти идентичные версии набора инструкций x86 <138.>, но имеют кардинально иной внутренний дизайн.

Концепция архитектуры, отличная от дизайна конкретной машины, была разработана Фредом Бруксом в IBM на этапе проектирования System / 360.

. NPL [System / 360], компьютерные дизайнеры компании были свободны соблюдать целевые затраты не только путем выбора технологий, но также путем создания функциональных и архитектурных усовершенствований. В отличие от этого, цель совместимости с SPREAD постулировала единую архитектуру для серии из пяти процессоров, охватывающих широкий диапазон стоимости и производительности. Ни одна из пяти групп инженеров-проектировщиков не могла рассчитывать на возможность внесения изменений в архитектурные спецификации для облегчения трудностей в достижении целей по стоимости и производительности.

Некоторые виртуальные машины, поддерживающие байт-код в качестве ISA, например, Smalltalk, виртуальная машина Java и Microsoft Common Language Runtime, реализуйте это с помощью перевод байт-кода для часто используемых путей кода в собственный машинный код. Кроме того, эти виртуальные машины выполняют менее часто используемые пути кода путем интерпретации (см.: Своевременная компиляция ). Transmeta реализовала набор команд x86 на процессорах VLIW таким образом.

Классификация ISA

ISA можно классифицировать множеством различных способов. Распространенная классификация — по архитектурной сложности. компьютер со сложным набором команд (CISC) имеет множество специализированных команд, некоторые из которых могут редко использоваться в практических программах. Компьютер с сокращенным набором команд (RISC) упрощает процессор, эффективно реализуя только инструкции, которые часто используются в программах, в то время как менее распространенные операции реализуются как подпрограммы, в результате чего дополнительное время выполнения процессора смещается на нечастые

Другие типы включают архитектуры с очень длинным командным словом (VLIW), а также тесно связанные длинные командные слова (LIW) и явно параллельное вычисление команд (EPIC). архитектуры. Эти архитектуры стремятся использовать параллелизм на уровне команд с меньшим количеством оборудования, чем RISC и CISC, возлагая ответственность за выдачу команд и планирование на компилятор.

Были изучены архитектуры с еще меньшей сложностью, такие как компьютер с минимальным набором команд (MISC) и компьютер с одним набором команд (OISC). Это теоретически важные типы, но они не были коммерциализированы.

Инструкции

Машинный язык состоит из отдельных операторов или инструкций. В архитектуре обработки данная инструкция может указывать:

  • конкретные регистры (для арифметических, адресных или управляющих функций)
  • конкретные ячейки памяти (или смещения к ним)
  • особые режимы адресации (используются для интерпретации операндов)

Более сложные операции создаются путем объединения этих простых инструкций, которые выполняются последовательно или в соответствии с другими указаниями потока управления инструкции.

Типы команд

Примеры операций, общих для многих наборов инструкций, включают:

Обработка данных и операции с памятью

  • Установите для регистра фиксированное значение. постоянное значение.
  • Копировать данные из области памяти в регистр или наоборот (машинную команду часто называют перемещением; однако этот термин вводит в заблуждение). Используется для хранения содержимого регистра, результата вычисления или для извлечения сохраненных данных для выполнения над ними вычислений позже. Часто называется операциями загрузки и хранения.
  • Чтение и запись данных с аппаратных устройств.

Арифметические и логические операции операции

  • Сложение, вычитание, умножение или деление значений двух регистров, помещая результат в регистр, возможно, устанавливая один или несколько кодов состояния в регистр состояния.
    • , увеличивая, уменьшая в некоторых ISA, сохраняя выборку операнда в тривиальных случаях.
  • Выполните побитовые операции, например, взяв конъюнкцию и дизъюнкцию соответствующих битов в паре регистров, взяв отрицание каждого бит в регистре.
  • Сравните два значения в регистрах (например, чтобы увидеть, меньше ли одно или они равны).
  • Инструкции с плавающей запятой для арифметических операций с плавающей запятой числа.

Поток управления операции

  • Переход в другое место в программе и выполнение инструкций там.
  • Условный переход в другое место, если выполняется определенное условие.
  • Косвенно филиал в другое место.
  • Вызвать другой блок кода, сохраняя при этом местоположение следующей инструкции как точку для возврата.

Сопроцессор инструкции

  • Загрузить / сохранить данные в и от сопроцессора или обмена с регистрами ЦП.
  • Выполнять операции сопроцессора.

Сложные инструкции

Процессоры могут включать «сложные» инструкции в свой набор команд. Одна «сложная» инструкция делает то, что может занять много инструкций на других компьютерах. Такие инструкции типизированы инструкциями, которые выполняют несколько шагов, управляют несколькими функциональными блоками или иным образом проявляются в большем масштабе, чем основная масса простых инструкций, реализуемых данным процессором. Некоторые примеры «сложных» инструкций включают:

  • перенос нескольких регистров в память или из памяти (особенно стек ) одновременно
  • перемещение больших блоков памяти (например, копирование строки или передача DMA )
  • сложная арифметика с целыми числами и числами с плавающей запятой (например, квадратный корень или трансцендентные функции, такие как логарифм, синус, косинус и т. Д.)
  • инструкции SIMD, одна инструкция, выполняющая операцию над многими однородными значениями параллельно, возможно, в выделенных регистрах SIMD
  • выполнение атомарной инструкции test-and-set или другой read-modify-write атомарной инструкции
  • , которые выполняют операции ALU с операнд из памяти, а не из регистра

Сложные инструкции более распространены в наборах инструкций CISC, чем в наборах инструкций RISC, но наборы инструкций RISC также могут включать их. Наборы инструкций RISC обычно не включают операции ALU s с операндами памяти или инструкциями для перемещения больших блоков памяти, но большинство наборов инструкций RISC включают в себя инструкции SIMD или vector, которые выполняют одну и ту же арифметическую операцию над несколькими частями данных одновременно. время. Команды SIMD позволяют манипулировать большими векторами и матрицами за минимальное время. Команды SIMD позволяют легко распараллелить алгоритмы, обычно используемые при обработке звука, изображения и видео. Различные реализации SIMD были представлены на рынке под торговыми названиями, такими как MMX, 3DNow! и AltiVec.

Кодирование команд

Одна инструкция может иметь несколько полей, которые идентифицируют логическую операцию и могут также включать адреса источника и назначения и постоянные значения. Это инструкция MIPS «Добавить немедленно», которая позволяет выбирать регистры источника и назначения и включать небольшую константу.

В традиционных архитектурах инструкция включает код операции, который указывает операцию, которую нужно выполнить, такие как добавление содержимого памяти в регистр — и ноль или более спецификаторов операнда , которые могут указывать регистры, ячейки памяти или литеральные данные. Спецификаторы операндов могут иметь режимы адресации, определяющие их значение, или могут находиться в фиксированных полях. В архитектурах с очень длинным командным словом (VLIW), которые включают в себя множество архитектур микрокода, несколько одновременных кодов операций и операндов указываются в одной команде.

Некоторые экзотические наборы команд не имеют поля кода операции, например, архитектуры, запускаемые транспортом (TTA), только операнды.

В виртуальной машине Forth и других наборах инструкций «0-операнд » отсутствуют какие-либо поля спецификатора операнда, например некоторые стековые машины, включая NOSC.

Условные инструкции часто имеют поле предиката — несколько битов, которые кодируют конкретное условие, чтобы заставить операцию выполняться, а не невыполнение. Например, инструкция условного перехода передаст управление, если условие истинно, так что выполнение перейдет к другой части программы, а не передаст управление, если условие ложно, так что выполнение продолжается последовательно. Некоторые наборы инструкций также имеют условные перемещения, так что перемещение будет выполнено, и данные будут сохранены в целевом местоположении, если условие истинно, но не выполнено, и целевое расположение не будет изменено, если условие ложно. Аналогично, в IBM z / Architecture есть инструкция условного сохранения. Некоторые наборы инструкций включают поле предиката в каждую инструкцию; это называется предсказанием ветвления.

Количество операндов

Наборы команд могут быть разделены на категории по максимальному количеству операндов, явно указанных в командах.

(В следующих примерах a, b и c являются (прямыми или вычисленными) адресами, относящимися к ячейкам памяти, а reg1 и т.д. относятся к машинным регистрам.)

C = A + B
  • 0-операнд (машины с нулевым адресом), так называемые стековые машины : все арифметические операции выполняются с использованием одной или двух верхних позиций в стеке: push a, push b, add, pop c.
    • C = A + Bтребуется четыре инструкции. Для стековых машин термины «0-операнд» и «нулевой адрес» применяются к арифметическим инструкциям, но не ко всем инструкциям, поскольку для доступа к памяти используются инструкции push и pop с 1 операндом.
  • 1-операнд (один -адресные машины), так называемые накопительные машины, включают ранние компьютеры и множество небольших микроконтроллеров : большинство инструкций задают единственный правый операнд (то есть константу, регистр или ячейку памяти), с неявным аккумулятором в качестве левого операнда (и адресатом, если он есть): загрузить, добавить b, сохранить c.
    • C = A + Bтребует трех инструкций.
  • 2-операнд — многие машины CISC и RISC подпадают под эту категорию:
    • CISC — переместить Aв C; затем добавить Bк C.
      • C = A + Bтребуется две инструкции. Это эффективно «сохраняет» результат без явной инструкции сохранения.
    • CISC — Часто машины ограничены одним операндом памяти на команду: load a, reg1; добавить b, reg1; сохранить reg1, c; Для этого требуется пара загрузка / сохранение для любого перемещения памяти независимо от того, является ли результат addувеличением, сохраненным в другом месте, как в C = A + B, или в той же самой памяти. расположение: A = A + B.
      • C = A + Bтребует трех инструкций.
    • RISC — Требуется явная загрузка памяти, инструкции будут такими: load a, reg1; нагрузка b, reg2; добавить reg1, reg2; store reg2, c.
      • C = A + Bтребуется четыре инструкции.
  • 3-операнд, позволяющий лучше повторно использовать данные:
    • CISC — он становится либо одной инструкцией: добавить a, b, c
      • C = A + Bтребуется одна инструкция.
    • CISC — Или, на машинах, ограниченных двумя операндами памяти на инструкцию, переместите a, reg1; add reg1, b, c;
      • C = A + Bтребует двух инструкций.
    • RISC — арифметические инструкции используют только регистры, поэтому необходимы явные инструкции загрузки / сохранения с двумя операндами: загрузить a, reg1; нагрузка b, reg2; добавить reg1 + reg2->reg3; сохранить reg3, c;
      • C = A + Bтребуется четыре инструкции.
      • В отличие от 2-операнда или 1-операнда, это оставляет все три значения a, b и c в регистрах доступны для дальнейшего повторного использования.
  • больше операндов — некоторые машины CISC допускают различные режимы адресации, которые позволяют использовать более 3 операндов (регистры или доступ к памяти), такие как команда оценки полинома VAX «POLY».

Из-за большого количества битов, необходимых для кодирования трех регистров инструкции с 3 операндами, архитектуры RISC, которые имеют 16-разрядные инструкции, неизменно имеют конструкции с 2 операндами, такие как Atmel AVR, TI MSP430 и некоторые версии ARM Thumb. Архитектуры RISC, которые имеют 32-битные инструкции, обычно представляют собой конструкции с 3 операндами, такие как ARM, AVR32, MIPS, Power ISA и архитектуры SPARC.

Каждая инструкция явно указывает некоторое количество операндов (регистров, ячеек памяти или непосредственных значений). Некоторые инструкции неявно задают один или оба операнда, например, сохраняя их поверх стека или в неявном регистре. Если некоторые из операндов указаны неявно, в инструкции нужно указать меньшее количество операндов. Когда «операнд-адресат» явно указывает адресат, должен быть указан дополнительный операнд. Следовательно, количество операндов, закодированных в инструкции, может отличаться от математически необходимого количества аргументов для логической или арифметической операции (арность ). Операнды либо закодированы в представлении команды «код операции», либо задаются как значения или адреса, следующие за кодом операции.

Давление регистра

Давление регистра измеряет доступность свободных регистров в любой момент времени во время выполнения программы. Давление на регистры высокое, когда используется большое количество доступных регистров; таким образом, чем выше давление регистра, тем чаще содержимое регистра должно переноситься в память. Увеличение числа регистров в архитектуре уменьшает давление регистров, но увеличивает стоимость.

Хотя встроенные наборы команд, такие как Thumb, страдают от чрезвычайно высокого давления регистров, поскольку они имеют небольшие наборы регистров, обычно — Целевые RISC ISA, такие как MIPS и Alpha, имеют низкое давление регистра. CISC ISA, такие как x86-64, предлагают низкое давление в регистре, несмотря на меньшие наборы регистров. Это связано с множеством режимов адресации и оптимизаций (таких как адресация субрегистров, операнды памяти в инструкциях ALU, абсолютная адресация, относительная адресация ПК и разливы между регистрами), которые предлагают CISC ISA.

Длина инструкции

Размер или длина инструкции варьируется в широких пределах: от всего лишь четырех битов в некоторых микроконтроллерах до многих сотен бит в некоторых системах VLIW. Процессоры, используемые в персональных компьютерах, мэйнфреймах и суперкомпьютерах, имеют размер команд от 8 до 64 бит. Максимально возможная длина инструкции на x86 составляет 15 байт (120 бит). В наборе команд разные инструкции могут иметь разную длину. В некоторых архитектурах, особенно в большинстве компьютеров с сокращенным набором команд (RISC), инструкции имеют фиксированную длину, обычно соответствующую размеру слова этой архитектуры. В других архитектурах инструкции имеют переменную длину, обычно целые числа, кратные байту или полуслову. Некоторые, такие как ARM с расширением Thumb, имеют смешанную кодировку переменных, то есть две фиксированные, обычно 32-битные и 16-битные кодировки, где инструкции не могут свободно смешиваться, но должны переключаться между ними в ветви. (или граница исключения в ARMv8).

Набор инструкций RISC обычно имеет фиксированную длину инструкции (часто 4 байта = 32 бита), тогда как типичный набор инструкций CISC может иметь инструкции самой разной длины (от 1 до 15 байтов для x86). Инструкции фиксированной длины менее сложны в обработке, чем инструкции переменной длины по нескольким причинам (например, отсутствие необходимости проверять, охватывает ли инструкция строку кэша или границу страницы виртуальной памяти), и поэтому их несколько легче оптимизировать по скорости.

Плотность кода

В ранних компьютерах память была дорогостоящей, поэтому минимизация размера программы, чтобы убедиться, что она уместится в ограниченной памяти, часто была центральной. Таким образом, объединенный размер всех инструкций, необходимых для выполнения конкретной задачи, плотность кода, была важной характеристикой любого набора инструкций. Компьютеры с высокой плотностью кода часто имеют сложные инструкции для ввода процедуры, параметризованных возвратов, циклов и т. Д. (Поэтому задним числом названы Computers Set Instruction Set Computers, CISC ). Однако более типичные или частые инструкции «CISC» просто комбинируют базовую операцию ALU, такую ​​как «сложение», с доступом к одному или нескольким операндам в памяти (с использованием режимов адресации, таких как прямой, косвенный, индексированные и т. д.). Определенные архитектуры могут допускать два или три операнда (включая результат) непосредственно в памяти или могут выполнять такие функции, как автоматическое приращение указателя и т. Д. Программно реализованные наборы команд могут иметь даже более сложные и мощные инструкции.

Компьютеры с сокращенным набором команд, RISC, были впервые широко внедрены в период быстрого роста подсистем памяти. Они жертвуют плотностью кода, чтобы упростить схему реализации, и пытаются повысить производительность за счет более высоких тактовых частот и большего количества регистров. Одна команда RISC обычно выполняет только одну операцию, такую ​​как «сложение» регистров или «загрузка» из области памяти в регистр. Набор команд RISC обычно имеет фиксированную длину команды, тогда как типичный набор команд CISC имеет инструкции самой разной длины. Однако, поскольку RISC-компьютерам обычно требуется больше и часто более длинных инструкций для реализации данной задачи, они по своей природе менее оптимально используют пропускную способность шины и кэш-память.

Некоторые встроенные RISC ISA, такие как Thumb и AVR32, обычно демонстрируют очень высокую плотность из-за метода, называемого сжатием кода. Этот метод объединяет две 16-битные инструкции в одно 32-битное слово, которое затем распаковывается на этапе декодирования и выполняется как две инструкции.

Компьютеры с минимальным набором команд (MISC) представляют собой форму стека machine, где есть несколько отдельных инструкций (16-64), так что несколько инструкций могут быть помещены в одно машинное слово. Эти типы ядер часто требуют небольшого количества кремния для реализации, поэтому их можно легко реализовать в форме FPGA или в форме многоядерной. Плотность кода MISC аналогична плотности кода RISC; повышенная плотность команд компенсируется тем, что для выполнения задачи требуется большее количество примитивных инструкций.

Было проведено исследование сжатия исполняемых файлов как механизма для повышения плотности кода. Математика сложности Колмогорова описывает проблемы и ограничения этого.

Представление

Инструкции, составляющие программу, редко указываются в их внутренней числовой форме (машинный код ); они могут быть указаны программистами, использующими язык ассемблера, или, что чаще, могут быть созданы из языков программирования с помощью компиляторов.

Дизайн

Дизайн наборов инструкций — сложный вопрос. В истории микропроцессора было два этапа. Первым был CISC (компьютер со сложной системой команд), который имел много разных инструкций. Однако в 1970-х годах такие компании, как IBM, провели исследование и обнаружили, что многие инструкции из набора можно исключить. Результатом стал RISC (компьютер с сокращенным набором инструкций), архитектура, использующая меньший набор инструкций. Более простой набор команд может предложить потенциал для более высоких скоростей, уменьшения размера процессора и снижения энергопотребления. Однако более сложный набор может оптимизировать общие операции, повысить эффективность памяти и кеша или упростить программирование.

Некоторые разработчики наборов команд резервируют один или несколько кодов операций для какого-либо вида системного вызова или программного прерывания. Например, MOS Technology 6502 использует 00 H, Zilog Z80 использует восемь кодов C7, CF, D7, DF, E7, EF, F7, FF H, а Motorola 68000 использовать коды в диапазоне A000..AFFF H.

Быстрые виртуальные машины намного проще реализовать, если набор инструкций соответствует требованиям виртуализации Попека и Голдберга.

Слайд NOP используется в программировании с учетом невосприимчивости гораздо проще реализовать, если «незапрограммированное» состояние памяти интерпретируется как NOP.

В системах с несколькими процессорами не -Блокирующая синхронизация алгоритмы намного проще реализовать, если набор инструкций включает поддержку чего-то вроде «fetch-and-add », «load-link / store-conditional «(LL / SC) или» атомарное сравнение и замена «.

Реализация набора команд

Любой данный набор команд может быть реализован множеством способов. Все способы реализации определенного набора команд обеспечивают одну и ту же модель программирования , и все реализации этого набора команд могут запускать одни и те же исполняемые файлы. Различные способы реализации набора команд дают разные компромиссы между стоимостью, производительностью, энергопотреблением, размером и т. Д.

При разработке микроархитектуры процессора инженеры используют блоки «жестких» проводные «электронные схемы (часто разрабатываемые отдельно), такие как сумматоры, мультиплексоры, счетчики, регистры, ALU и т. д. Какой-то тип языка передачи регистров затем часто используется для описания декодирования и упорядочивания каждой инструкции ISA использует эту физическую микроархитектуру. Существует два основных способа создания блока управления для реализации этого описания (хотя во многих проектах используются средние пути или компромиссы):

  1. Некоторые компьютерные разработки «жестко подключают» декодирование и последовательность полного набора команд (точно так же, как остальная часть микроархитектуры).
  2. В других проектах для этого используются процедуры или таблицы микрокода (или и то, и другое) — обычно в виде встроенных ПЗУ или PLA или оба (хотя исторически использовались отдельные RAM и ROM ). Western Digital MCP-1600 — это более старый пример, использующий выделенное отдельное ПЗУ для микрокода.

В некоторых конструкциях используется комбинация зашитой конструкции и микрокода для блока управления.

Некоторые схемы ЦП используют записываемое хранилище управления — они компилируют набор команд в записываемое ОЗУ или флэш-память внутри ЦП (например, процессор Рекурсив и) или ПЛИС (реконфигурируемые вычисления ).

ISA также можно эмулировать в программном обеспечении с помощью интерпретатора. Естественно, из-за накладных расходов на интерпретацию это медленнее, чем непосредственно запускаемые программы на эмулируемом оборудовании, если только оборудование, на котором запущен эмулятор, не на порядок быстрее. Сегодня распространенной практикой является то, что производители новых ISA или микроархитектур делают программные эмуляторы доступными разработчикам программного обеспечения до того, как будет готова аппаратная реализация.

Часто детали реализации сильно влияют на конкретные инструкции, выбранные для набора инструкций. Например, многие реализации конвейера команд допускают только одну загрузку памяти или хранилище памяти для каждой команды, что приводит к архитектуре загрузка-хранилище (RISC). В качестве другого примера, некоторые ранние способы реализации конвейера команд привели к слоту задержки.

. Требования высокоскоростной обработки цифровых сигналов подтолкнули в противоположном направлении — принудительное выполнение инструкций определенным образом. Например, чтобы выполнять цифровые фильтры достаточно быстро, команда MAC в типичном процессоре цифровых сигналов (DSP) должна использовать своего рода гарвардскую архитектуру, которая может извлекать команду и два слова данных. одновременно, и для этого требуется одноцикловый умножить – накопить множитель.

См. также

  • Сравнение архитектур наборов команд
  • Архитектура компьютера
  • Дизайн процессора
  • Эмулятор
  • Симулятор
  • Список наборов инструкций
  • Симулятор набора инструкций
  • OVPsim симулятор полной системы, обеспечивающий возможность создания / моделирования / эмуляции любого набора инструкций с использованием C и стандартных API
  • Язык передачи регистров (RTL)
  • Микрооперация

Ссылки

Дополнительная литература

  • Боуэн, Джонатан П. (июль – август 1985 г.). «Стандартные микропроцессорные карты программирования». Микропроцессоры и микросистемы. 9 (6): 274–290. doi : 10.1016 / 0141-9331 (85) 90116-4.

Внешние ссылки

  • Носители, относящиеся к архитектурам наборов команд на Викискладе
  • Программирование текстовых файлов: карты сводки инструкций Боуэна
  • Страница исторических конструкций компьютеров Марка Смотермана

In computer science, an instruction set architecture (ISA), also called computer architecture, is an abstract model of a computer. A device that executes instructions described by that ISA, such as a central processing unit (CPU), is called an implementation.

In general, an ISA defines the supported instructions, data types, registers, the hardware support for managing main memory, fundamental features (such as the memory consistency, addressing modes, virtual memory), and the input/output model of a family of implementations of the ISA.

An ISA specifies the behavior of machine code running on implementations of that ISA in a fashion that does not depend on the characteristics of that implementation, providing binary compatibility between implementations. This enables multiple implementations of an ISA that differ in characteristics such as performance, physical size, and monetary cost (among other things), but that are capable of running the same machine code, so that a lower-performance, lower-cost machine can be replaced with a higher-cost, higher-performance machine without having to replace software. It also enables the evolution of the microarchitectures of the implementations of that ISA, so that a newer, higher-performance implementation of an ISA can run software that runs on previous generations of implementations.

If an operating system maintains a standard and compatible application binary interface (ABI) for a particular ISA, machine code will run on future implementations of that ISA and operating system. However, if an ISA supports running multiple operating systems, it does not guarantee that machine code for one operating system will run on another operating system, unless the first operating system supports running machine code built for the other operating system.

An ISA can be extended by adding instructions or other capabilities, or adding support for larger addresses and data values; an implementation of the extended ISA will still be able to execute machine code for versions of the ISA without those extensions. Machine code using those extensions will only run on implementations that support those extensions.

The binary compatibility that they provide makes ISAs one of the most fundamental abstractions in computing.

Overview[edit]

An instruction set architecture is distinguished from a microarchitecture, which is the set of processor design techniques used, in a particular processor, to implement the instruction set. Processors with different microarchitectures can share a common instruction set. For example, the Intel Pentium and the AMD Athlon implement nearly identical versions of the x86 instruction set, but they have radically different internal designs.

The concept of an architecture, distinct from the design of a specific machine, was developed by Fred Brooks at IBM during the design phase of System/360.

Prior to NPL [System/360], the company’s computer designers had been free to honor cost objectives not only by selecting technologies but also by fashioning functional and architectural refinements. The SPREAD compatibility objective, in contrast, postulated a single architecture for a series of five processors spanning a wide range of cost and performance. None of the five engineering design teams could count on being able to bring about adjustments in architectural specifications as a way of easing difficulties in achieving cost and performance objectives.[1]: p.137 

Some virtual machines that support bytecode as their ISA such as Smalltalk, the Java virtual machine, and Microsoft’s Common Language Runtime, implement this by translating the bytecode for commonly used code paths into native machine code. In addition, these virtual machines execute less frequently used code paths by interpretation (see: Just-in-time compilation). Transmeta implemented the x86 instruction set atop VLIW processors in this fashion.

Classification of ISAs[edit]

An ISA may be classified in a number of different ways. A common classification is by architectural complexity. A complex instruction set computer (CISC) has many specialized instructions, some of which may only be rarely used in practical programs. A reduced instruction set computer (RISC) simplifies the processor by efficiently implementing only the instructions that are frequently used in programs, while the less common operations are implemented as subroutines, having their resulting additional processor execution time offset by infrequent use.[2]

Other types include very long instruction word (VLIW) architectures, and the closely related long instruction word (LIW) and[citation needed] explicitly parallel instruction computing (EPIC) architectures. These architectures seek to exploit instruction-level parallelism with less hardware than RISC and CISC by making the compiler responsible for instruction issue and scheduling.[3]

Architectures with even less complexity have been studied, such as the minimal instruction set computer (MISC) and one-instruction set computer (OISC). These are theoretically important types, but have not been commercialized.[4][5]

Instructions[edit]

Machine language is built up from discrete statements or instructions. On the processing architecture, a given instruction may specify:

  • opcode (the instruction to be performed) e.g. add, copy, test
  • any explicit operands:
registers
literal/constant values
addressing modes used to access memory

More complex operations are built up by combining these simple instructions, which are executed sequentially, or as otherwise directed by control flow instructions.

Instruction types[edit]

Examples of operations common to many instruction sets include:

Data handling and memory operations[edit]

  • Set a register to a fixed constant value.
  • Copy data from a memory location or a register to a memory location or a register (a machine instruction is often called move; however, the term is misleading). They are used to store the contents of a register, the contents of another memory location or the result of a computation, or to retrieve stored data to perform a computation on it later. They are often called load and store operations.
  • Read and write data from hardware devices.

Arithmetic and logic operations[edit]

  • Add, subtract, multiply, or divide the values of two registers, placing the result in a register, possibly setting one or more condition codes in a status register.[6]
    • increment, decrement in some ISAs, saving operand fetch in trivial cases.
  • Perform bitwise operations, e.g., taking the conjunction and disjunction of corresponding bits in a pair of registers, taking the negation of each bit in a register.
  • Compare two values in registers (for example, to see if one is less, or if they are equal).
  • Floating-point instructions for arithmetic on floating-point numbers.[6]

Control flow operations[edit]

  • Branch to another location in the program and execute instructions there.
  • Conditionally branch to another location if a certain condition holds.
  • Indirectly branch to another location.
  • Call another block of code, while saving the location of the next instruction as a point to return to.

Coprocessor instructions[edit]

  • Load/store data to and from a coprocessor or exchanging with CPU registers.
  • Perform coprocessor operations.

Complex instructions[edit]

Processors may include «complex» instructions in their instruction set. A single «complex» instruction does something that may take many instructions on other computers. Such instructions are typified by instructions that take multiple steps, control multiple functional units, or otherwise appear on a larger scale than the bulk of simple instructions implemented by the given processor. Some examples of «complex» instructions include:

  • transferring multiple registers to or from memory (especially the stack) at once
  • moving large blocks of memory (e.g. string copy or DMA transfer)
  • complicated integer and floating-point arithmetic (e.g. square root, or transcendental functions such as logarithm, sine, cosine, etc.)
  • SIMD instructions, a single instruction performing an operation on many homogeneous values in parallel, possibly in dedicated SIMD registers
  • performing an atomic test-and-set instruction or other read-modify-write atomic instruction
  • instructions that perform ALU operations with an operand from memory rather than a register

Complex instructions are more common in CISC instruction sets than in RISC instruction sets, but RISC instruction sets may include them as well. RISC instruction sets generally do not include ALU operations with memory operands, or instructions to move large blocks of memory, but most RISC instruction sets include SIMD or vector instructions that perform the same arithmetic operation on multiple pieces of data at the same time. SIMD instructions have the ability of manipulating large vectors and matrices in minimal time. SIMD instructions allow easy parallelization of algorithms commonly involved in sound, image, and video processing. Various SIMD implementations have been brought to market under trade names such as MMX, 3DNow!, and AltiVec.

Instruction encoding[edit]

One instruction may have several fields, which identify the logical operation, and may also include source and destination addresses and constant values. This is the MIPS «Add Immediate» instruction, which allows selection of source and destination registers and inclusion of a small constant.

On traditional architectures, an instruction includes an opcode that specifies the operation to perform, such as add contents of memory to register—and zero or more operand specifiers, which may specify registers, memory locations, or literal data. The operand specifiers may have addressing modes determining their meaning or may be in fixed fields. In very long instruction word (VLIW) architectures, which include many microcode architectures, multiple simultaneous opcodes and operands are specified in a single instruction.

Some exotic instruction sets do not have an opcode field, such as transport triggered architectures (TTA), only operand(s).

Most stack machines have «0-operand» instruction sets in which arithmetic and logical operations lack any operand specifier fields; only instructions that push operands onto the evaluation stack or that pop operands from the stack into variables have operand specifiers. The instruction set carries out most ALU actions with postfix (reverse Polish notation) operations that work only on the expression stack, not on data registers or arbitrary main memory cells. This can be very convenient for compiling high-level languages, because most arithmetic expressions can be easily translated into postfix notation.[7]

Conditional instructions often have a predicate field—a few bits that encode the specific condition to cause an operation to be performed rather than not performed. For example, a conditional branch instruction will transfer control if the condition is true, so that execution proceeds to a different part of the program, and not transfer control if the condition is false, so that execution continues sequentially. Some instruction sets also have conditional moves, so that the move will be executed, and the data stored in the target location, if the condition is true, and not executed, and the target location not modified, if the condition is false. Similarly, IBM z/Architecture has a conditional store instruction. A few instruction sets include a predicate field in every instruction; this is called branch predication.

Number of operands[edit]

Instruction sets may be categorized by the maximum number of operands explicitly specified in instructions.

(In the examples that follow, a, b, and c are (direct or calculated) addresses referring to memory cells, while reg1 and so on refer to machine registers.)

C = A+B
  • 0-operand (zero-address machines), so called stack machines: All arithmetic operations take place using the top one or two positions on the stack:[8] push a, push b, add, pop c.
    • C = A+B needs four instructions.[9] For stack machines, the terms «0-operand» and «zero-address» apply to arithmetic instructions, but not to all instructions, as 1-operand push and pop instructions are used to access memory.
  • 1-operand (one-address machines), so called accumulator machines, include early computers and many small microcontrollers: most instructions specify a single right operand (that is, constant, a register, or a memory location), with the implicit accumulator as the left operand (and the destination if there is one): load a, add b, store c.
    • C = A+B needs three instructions.[9]
  • 2-operand — many CISC and RISC machines fall under this category:
    • CISC — move A to C; then add B to C.
      • C = A+B needs two instructions. This effectively ‘stores’ the result without an explicit store instruction.
    • CISC — Often machines are limited to one memory operand per instruction: load a,reg1; add b,reg1; store reg1,c; This requires a load/store pair for any memory movement regardless of whether the add result is an augmentation stored to a different place, as in C = A+B, or the same memory location: A = A+B.
      • C = A+B needs three instructions.
    • RISC — Requiring explicit memory loads, the instructions would be: load a,reg1; load b,reg2; add reg1,reg2; store reg2,c.
      • C = A+B needs four instructions.
  • 3-operand, allowing better reuse of data:[10]
    • CISC — It becomes either a single instruction: add a,b,c
      • C = A+B needs one instruction.
    • CISC — Or, on machines limited to two memory operands per instruction, move a,reg1; add reg1,b,c;
      • C = A+B needs two instructions.
    • RISC — arithmetic instructions use registers only, so explicit 2-operand load/store instructions are needed: load a,reg1; load b,reg2; add reg1+reg2->reg3; store reg3,c;
      • C = A+B needs four instructions.
      • Unlike 2-operand or 1-operand, this leaves all three values a, b, and c in registers available for further reuse.[10]
  • more operands—some CISC machines permit a variety of addressing modes that allow more than 3 operands (registers or memory accesses), such as the VAX «POLY» polynomial evaluation instruction.

Due to the large number of bits needed to encode the three registers of a 3-operand instruction, RISC architectures that have 16-bit instructions are invariably 2-operand designs, such as the Atmel AVR, TI MSP430, and some versions of ARM Thumb. RISC architectures that have 32-bit instructions are usually 3-operand designs, such as the ARM, AVR32, MIPS, Power ISA, and SPARC architectures.

Each instruction specifies some number of operands (registers, memory locations, or immediate values) explicitly. Some instructions give one or both operands implicitly, such as by being stored on top of the stack or in an implicit register. If some of the operands are given implicitly, fewer operands need be specified in the instruction. When a «destination operand» explicitly specifies the destination, an additional operand must be supplied. Consequently, the number of operands encoded in an instruction may differ from the mathematically necessary number of arguments for a logical or arithmetic operation (the arity). Operands are either encoded in the «opcode» representation of the instruction, or else are given as values or addresses following the opcode.

Register pressure[edit]

Register pressure measures the availability of free registers at any point in time during the program execution. Register pressure is high when a large number of the available registers are in use; thus, the higher the register pressure, the more often the register contents must be spilled into memory. Increasing the number of registers in an architecture decreases register pressure but increases the cost.[11]

While embedded instruction sets such as Thumb suffer from extremely high register pressure because they have small register sets, general-purpose RISC ISAs like MIPS and Alpha enjoy low register pressure. CISC ISAs like x86-64 offer low register pressure despite having smaller register sets. This is due to the many addressing modes and optimizations (such as sub-register addressing, memory operands in ALU instructions, absolute addressing, PC-relative addressing, and register-to-register spills) that CISC ISAs offer.[12]

Instruction length[edit]

The size or length of an instruction varies widely, from as little as four bits in some microcontrollers to many hundreds of bits in some VLIW systems. Processors used in personal computers, mainframes, and supercomputers have minimum instruction sizes between 8 and 64 bits. The longest possible instruction on x86 is 15 bytes (120 bits).[13] Within an instruction set, different instructions may have different lengths. In some architectures, notably most reduced instruction set computers (RISC), instructions are a fixed length, typically corresponding with that architecture’s word size. In other architectures, instructions have variable length, typically integral multiples of a byte or a halfword. Some, such as the ARM with Thumb-extension have mixed variable encoding, that is two fixed, usually 32-bit and 16-bit encodings, where instructions cannot be mixed freely but must be switched between on a branch (or exception boundary in ARMv8).

Fixed-length instructions are less complicated to handle than variable-length instructions for several reasons (not having to check whether an instruction straddles a cache line or virtual memory page boundary,[10] for instance), and are therefore somewhat easier to optimize for speed.

Code density[edit]

In early 1960s computers, main memory was expensive and very limited, even on mainframes. Minimizing the size of a program to make sure it would fit in the limited memory was often central. Thus the size of the instructions needed to perform a particular task, the code density, was an important characteristic of any instruction set. It remained important on the initially-tiny memories of minicomputers and then microprocessors. Density remains important today, for smartphone applications, applications downloaded into browsers over slow Internet connections, and in ROMs for embedded applications. A more general advantage of increased density is improved effectiveness of caches and instruction prefetch.

Computers with high code density often have complex instructions for procedure entry, parameterized returns, loops, etc. (therefore retroactively named Complex Instruction Set Computers, CISC). However, more typical, or frequent, «CISC» instructions merely combine a basic ALU operation, such as «add», with the access of one or more operands in memory (using addressing modes such as direct, indirect, indexed, etc.). Certain architectures may allow two or three operands (including the result) directly in memory or may be able to perform functions such as automatic pointer increment, etc. Software-implemented instruction sets may have even more complex and powerful instructions.

Reduced instruction-set computers, RISC, were first widely implemented during a period of rapidly growing memory subsystems. They sacrifice code density to simplify implementation circuitry, and try to increase performance via higher clock frequencies and more registers. A single RISC instruction typically performs only a single operation, such as an «add» of registers or a «load» from a memory location into a register. A RISC instruction set normally has a fixed instruction length, whereas a typical CISC instruction set has instructions of widely varying length. However, as RISC computers normally require more and often longer instructions to implement a given task, they inherently make less optimal use of bus bandwidth and cache memories.

Certain embedded RISC ISAs like Thumb and AVR32 typically exhibit very high density owing to a technique called code compression. This technique packs two 16-bit instructions into one 32-bit word, which is then unpacked at the decode stage and executed as two instructions.[14]

Minimal instruction set computers (MISC) are commonly a form of stack machine, where there are few separate instructions (8–32), so that multiple instructions can be fit into a single machine word. These types of cores often take little silicon to implement, so they can be easily realized in an FPGA or in a multi-core form. The code density of MISC is similar to the code density of RISC; the increased instruction density is offset by requiring more of the primitive instructions to do a task.[15][failed verification]

There has been research into executable compression as a mechanism for improving code density. The mathematics of Kolmogorov complexity describes the challenges and limits of this.

In practice, code density is also dependent on the compiler. Most optimizing compilers have options that control whether to optimize code generation for execution speed or for code density. For instance GCC has the option -Os to optimize for small machine code size, and -O3 to optimize for execution speed at the cost of larger machine code.

Representation[edit]

The instructions constituting a program are rarely specified using their internal, numeric form (machine code); they may be specified by programmers using an assembly language or, more commonly, may be generated from high-level programming languages by compilers.[16]

Design[edit]

The design of instruction sets is a complex issue. There were two stages in history for the microprocessor. The first was the CISC (Complex Instruction Set Computer), which had many different instructions. In the 1970s, however, places like IBM did research and found that many instructions in the set could be eliminated. The result was the RISC (Reduced Instruction Set Computer), an architecture that uses a smaller set of instructions. A simpler instruction set may offer the potential for higher speeds, reduced processor size, and reduced power consumption. However, a more complex set may optimize common operations, improve memory and cache efficiency, or simplify programming.

Some instruction set designers reserve one or more opcodes for some kind of system call or software interrupt. For example, MOS Technology 6502 uses 00H, Zilog Z80 uses the eight codes C7,CF,D7,DF,E7,EF,F7,FFH[17] while Motorola 68000 use codes in the range A000..AFFFH.

Fast virtual machines are much easier to implement if an instruction set meets the Popek and Goldberg virtualization requirements.[clarification needed]

The NOP slide used in immunity-aware programming is much easier to implement if the «unprogrammed» state of the memory is interpreted as a NOP.[dubious – discuss]

On systems with multiple processors, non-blocking synchronization algorithms are much easier to implement[citation needed] if the instruction set includes support for something such as «fetch-and-add», «load-link/store-conditional» (LL/SC), or «atomic compare-and-swap».

Instruction set implementation[edit]

Any given instruction set can be implemented in a variety of ways. All ways of implementing a particular instruction set provide the same programming model, and all implementations of that instruction set are able to run the same executables. The various ways of implementing an instruction set give different tradeoffs between cost, performance, power consumption, size, etc.

When designing the microarchitecture of a processor, engineers use blocks of «hard-wired» electronic circuitry (often designed separately) such as adders, multiplexers, counters, registers, ALUs, etc. Some kind of register transfer language is then often used to describe the decoding and sequencing of each instruction of an ISA using this physical microarchitecture.
There are two basic ways to build a control unit to implement this description (although many designs use middle ways or compromises):

  1. Some computer designs «hardwire» the complete instruction set decoding and sequencing (just like the rest of the microarchitecture).
  2. Other designs employ microcode routines or tables (or both) to do this—typically as on-chip ROMs or PLAs or both (although separate RAMs and ROMs have been used historically). The Western Digital MCP-1600 is an older example, using a dedicated, separate ROM for microcode.

Some designs use a combination of hardwired design and microcode for the control unit.

Some CPU designs use a writable control store—they compile the instruction set to a writable RAM or flash inside the CPU (such as the Rekursiv processor and the Imsys Cjip),[18] or an FPGA (reconfigurable computing).

An ISA can also be emulated in software by an interpreter. Naturally, due to the interpretation overhead, this is slower than directly running programs on the emulated hardware, unless the hardware running the emulator is an order of magnitude faster. Today, it is common practice for vendors of new ISAs or microarchitectures to make software emulators available to software developers before the hardware implementation is ready.

Often the details of the implementation have a strong influence on the particular instructions selected for the instruction set. For example, many implementations of the instruction pipeline only allow a single memory load or memory store per instruction, leading to a load–store architecture (RISC). For another example, some early ways of implementing the instruction pipeline led to a delay slot.

The demands of high-speed digital signal processing have pushed in the opposite direction—forcing instructions to be implemented in a particular way. For example, to perform digital filters fast enough, the MAC instruction in a typical digital signal processor (DSP) must use a kind of Harvard architecture that can fetch an instruction and two data words simultaneously, and it requires a single-cycle multiply–accumulate multiplier.

See also[edit]

  • Comparison of instruction set architectures
  • Computer architecture
  • Processor design
  • Compressed instruction set
  • Emulator
  • Simulation
  • Instruction set simulator
  • OVPsim full systems simulator providing ability to create/model/emulate any instruction set using C and standard APIs
  • Register transfer language (RTL)
  • Micro-operation

References[edit]

  1. ^ Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). IBM’s 360 and Early 370 Systems. MIT Press. ISBN 0-262-16123-0.
  2. ^ Crystal Chen; Greg Novick; Kirk Shimano (December 16, 2006). «RISC Architecture: RISC vs. CISC». cs.stanford.edu. Retrieved February 21, 2015.
  3. ^ Schlansker, Michael S.; Rau, B. Ramakrishna (February 2000). «EPIC: Explicitly Parallel Instruction Computing». Computer. 33 (2). doi:10.1109/2.820037.
  4. ^ Shaout, Adnan; Eldos, Taisir (Summer 2003). «On the Classification of Computer Architecture». International Journal of Science and Technology. 14: 3. Retrieved March 2, 2023.
  5. ^ Gilreath, William F.; Laplante, Phillip A. (December 6, 2012). Computer Architecture: A Minimalist Perspective. Springer Science+Business Media. ISBN 978-1-4615-0237-1.
  6. ^ a b Hennessy & Patterson 2003, p. 108.
  7. ^ Durand, Paul. «Instruction Set Architecture (ISA)». Introduction to Computer Science CS 0.
  8. ^ Hennessy & Patterson 2003, p. 92.
  9. ^ a b Hennessy & Patterson 2003, p. 93.
  10. ^ a b c
    Cocke, John; Markstein, Victoria (January 1990). «The evolution of RISC technology at IBM» (PDF). IBM Journal of Research and Development. 34 (1): 4–11. doi:10.1147/rd.341.0004. Retrieved 2022-10-05.
  11. ^ Page, Daniel (2009). «11. Compilers». A Practical Introduction to Computer Architecture. Springer. p. 464. Bibcode:2009pica.book…..P. ISBN 978-1-84882-255-9.
  12. ^ Venkat, Ashish; Tullsen, Dean M. (2014). Harnessing ISA Diversity: Design of a Heterogeneous-ISA Chip Multiprocessor. 41st Annual International Symposium on Computer Architecture.
  13. ^ «Intel® 64 and IA-32 Architectures Software Developer’s Manual». Intel Corporation. Retrieved 5 October 2022.
  14. ^ Weaver, Vincent M.; McKee, Sally A. (2009). Code density concerns for new architectures. IEEE International Conference on Computer Design. CiteSeerX 10.1.1.398.1967. doi:10.1109/ICCD.2009.5413117.
  15. ^ «RISC vs. CISC». cs.stanford.edu. Retrieved 2021-12-18.
  16. ^ Hennessy & Patterson 2003, p. 120.
  17. ^ Ganssle, Jack (February 26, 2001). «Proactive Debugging». embedded.com.
  18. ^ «Great Microprocessors of the Past and Present (V 13.4.0)». cpushack.net. Retrieved 2014-07-25.

Further reading[edit]

  • Bowen, Jonathan P. (July–August 1985). «Standard Microprocessor Programming Cards». Microprocessors and Microsystems. 9 (6): 274–290. doi:10.1016/0141-9331(85)90116-4.
  • Hennessy, John L.; Patterson, David A. (2003). Computer Architecture: A Quantitative Approach (Third ed.). Morgan Kaufmann Publishers. ISBN 1-55860-724-2. Retrieved 2023-03-04.

External links[edit]

  • Media related to Instruction set architectures at Wikimedia Commons
  • Programming Textfiles: Bowen’s Instruction Summary Cards
  • Mark Smotherman’s Historical Computer Designs Page

Для
получения результата вычислений
компьютер выполняет машинную программу,
т.е. последовательность
команд
, в
виде которой записан алгоритм обработки.
Команда
компьютера представляет собой двоичный
код, определяющий как выполняемую
операцию, так и необходимые для этого
данные, или операнды.
Большинство команд содержит адрес, т.е.
номер регистра или ячейки памяти, где
сохраняется результат выполнения
операции. Помимо этого, для выполнения
программы нужно также знать адрес
следующей исполняемой команды.

Обычно
различают следующие группы команд:

  • команды
    арифметических операций над числами
    с фиксированной точкой,

  • команды
    логических операций,

  • команды
    арифметических операций над числами
    с плавающей точкой,

  • команды
    операций ввода-вывода,

  • команды
    управления (управления циклами, условные
    и безусловные переходы и т.п.) и т.д.

Каждый
тип компьютера обладает собственной
системой
команд
, т.е.
в нем существует аппаратура или память
микропрограмм, призванная вырабатывать
управляющие сигналы для реализации
командных операций. Естественно, что
для выполнения конкретной программы
необходим компьютер, способный выполнять
команды, составляющие эту программу.
При разработке новых компьютеров
стремятся сохранить их преемственность;
для этого компьютеры выполняют «программно
совместимыми». Программная совместимость
означает, прежде всего, наличие одинаковых
систем команд. Однако во многих случаях
систему команд «расширяют», т.е. добавляют
дополнительные операции, сохраняя при
этом формат команд. Это значит, что новая
машина может выполнять все программы,
составленные для прежних компьютеров,
но программы, в которых используются
дополнительные команды, не могут
выполняться компьютерами старых моделей.
Такую совместимость называют обратной.

Команда,
или инструкция (под инструкцией часто
понимают конструкцию языка более
высокого уровня, но в переводной
литературе этот термин используют в
качестве синонима термину команда)
представляет собой слово, содержащее
код выполняемой операции и адреса
операндов. Код команды включает несколько
полей (поле – последовательность бит,
содержащая определенный тип информации).
Обычно команда состоит из операционной
и адресной частей. В операционной части
размещается код операции, а в адресной
части – адреса операндов, т.е. информация
о местонахождении обрабатываемых данных
и получаемого результата.

Формат
команды – это структура полей ее кода
с указанием номеров разрядов, определяющих
границы полей. В «больших» машинах,
например, IBM
370 или ЕС ЭВМ, код операции в команде
занимал 8 разрядов, а число различных
операций составляло не более 256. Остальные
разряды, а команды представляли собой
слово размером 16, 32 или 48 разрядов,
отводились под адреса операндов.

В
различных машинах число адресных полей
в команде может составлять от одного
до четырех. Структура четырехадресной
команды приведена на рисунке 5.1.

КОп
А1 А2 А3 А4

Рисунок
5.1 Структура четырехадресной команды

В
такой команде первое поле кода операции
(КОп) служит для кодирования выполняемой
операции. Это поле «расшифровывается»
логическими схемами или посредством
микропрограммы и формируются управляющие
сигналы для выполнения соответствующих
этой операции действий. Затем располагаются
четыре адресных поля: А1 – содержит
адрес первого операнда, А2 – адрес
второго операнда, А3 – адрес ячейки
памяти, отведенной для записи результата
операции, А4 – адрес ячейки, где находится
следующая команда. Но такая четырехадресная
команда занимает слишком много места
в памяти компьютера, поэтому они в
настоящее время не находят применения.

Сегодня
наибольшее распространение имеют одно-,
двух- и трехадресные команды, структуры
которых приведены на рисунке 5.2.

Трехадресные
команды характерны для компьютеров с
сокращенным набором команд. В трехадресной
команде первый и второй адреса указывают
месторасположение операндов, в третий
адрес – ячейку памяти, куда заносится
результат операции.

КОп
А1 А2 А3

КОп
А1 А2

КОп
А1 А2

Рисунок
5.2 Структуры одно-, двух- и трехадресных
команд

В
таких машинах для определения адреса
следующей выполняемой команды служит
счетчик команд (IP),
к содержимому которого после выполнения
любой команды добавляется ее длина в
байтах. Для перехода к выполнению
команды, которая занимает не следующую
по порядку ячейку памяти, в машине
предусматривают специальные команды
переходов. Трехадресные команды
используются в так называемых RISC
компьютерах (машинах с сокращенным
набором команд); в них операнды размещают
в регистрах общего назначения (РОН),
число которых может достигать 256. Загрузка
этих регистров из памяти осуществляется
специальной схемой, называемой
контроллером или процессором загрузки.

Наиболее
распространены в настоящее время
двухадресные компьютеры. Это машины,
команды в которых содержат не более
двух адресов. Можно представить, что
оба операнда находятся в регистрах, а
результат выполнения операции мы также
будем записывать в регистр. Тогда такую
команду принято называть командой
RR-типа
(регистр-регистр). Если один операнд
находится в регистре, а второй в ячейке
памяти, адрес которой индексируется,
то такая команда относится к RX-типу.
Команда, второй операнд которой находится
в ячейке памяти без индексации, а первый
в регистре, носит название RS-типа.

В
команде может находиться не адрес
операнда, а сам операнд (этот операнд
называют непосредственным адресом, и
он представляет константу), такую команду
относят к SI-типу.
Наконец, оба операнда могут находиться
в памяти, для их вызова используют
команду SS-типа.
Такие команды использовались в машинах
IBM/370
и ЕС ЭВМ.

В
персональном компьютере IBM
PC
команды также двухадресные, но первый
операнд всегда находится в одном из
восьми регистров, а второй может
находиться в регистре, памяти или
непосредственно в самой команде. Помимо
кода операции и адресов операндов
команда этого компьютера содержит бит,
указывающий направление передачи
результата (d),
бит ширины операнда (w),
а также поле указания режима (md)
и поле регистр/память (r/m).

В
одноадресной машине команда содержит
только один адрес, а поскольку обычно
в арифметической операции используется
два операнда, то второй уже находится
в одном из регистров процессора. Результат
операции всегда сохраняется в выходном
регистре процессора, который называют
аккумулятором. Очевидно, что для сложения
двух чисел нужно выполнить три одноадресных
команды: поместить первый операнд из
памяти в регистр процессора, передать
второй операнд из памяти и сложить его
с первым, а затем сохранить результат
в памяти. Однако на практике при выполнении
программы никогда не приходится
использовать все три команды. В регистре
процессора сохраняется один из операндов,
полученный при выполнении предыдущей
операции (т.е. первая команда не нужна),
а результат сложения будет использован
следующей командой (т.е. не нужно его
сохранять в памяти).

Приведенные
на рисунке 5.2 форматы команд весьма
схематичны. В действительности в адресных
полях находятся не сами адреса, а
информация, позволяющая их определить.
Способ определения исполнительного
адреса Аи
(т.е. адреса ячейки памяти, где находится
операнд или команда) по адресу в коде
команды Ак
будем называть способом адресации.

Для
указания способа адресации в некоторых
системах команд используется специальное
поле; это позволяет выполнять одну и ту
же команду с любым предусмотренным
способом адресации, но значительно
увеличивает длину команды.

Способы
адресации

Обычно
в команде имеются поля, указывающие
адрес операнда Ак.
В этом
случае адресацию называют явной.
Однако иногда адресное поле в команде
отсутствует, а информацию об адресе
операнда несет сам код операции. Такую
адресацию называют неявной.
Ее используют при работе над содержимым
аккумулятора или над флагами. [Флагами
называют признаки результата, которые
при выполнении каждой операции заносятся
в специальный регистр. Примерами могут
служить флаги переполнения, четности
и т.п. Общее число флагов зависит от
конкретного процессора.] Однако наиболее
часто используется явная адресация.

Время
обращения в память сказывается на общей
производительности компьютера, поэтому,
чем меньше таких обращений, тем лучше
с позиций быстродействия. Если нужно
произвести действие с постоянным
операндом, значение которого известно
в момент трансляции программы, то нет
необходимости хранить его в отдельной
ячейке памяти; его можно поместить в
адресном поле самой команды. Такой
способ задания операнда принято называть
непосредственной
адресацией. Она применяется для задания
констант, длина которых меньше адресного
поля команды.

Операнды
могут находиться и в регистровой, и в
оперативной памяти; время обращения
зависит от их местоположения. Если
операнд находится в регистровой памяти,
то время обращения к нему невелико.
Именно с целью сокращения времени на
обращение к операндам и используют
регистровую
адресацию. Регистровая адресация в
машине IBM
PC
реализуется при md
= 1. Адрес одного из восьми регистров, в
котором размещается операнд, определяется
полем r/m.
Операнд может занимать весь регистр
или только его половину в зависимости
от значения «w».

Наиболее
часто используется прямая
адресация. Операнд находится в ОП, а в
команде указывается его исполнительный
адрес (адресный код команды Ак
совпадает с исполнительным адресом
Аи).
В компьютерах IBM
PC
в этом поле команды находится не полный
адрес, а только так называемое смещение,
т.е. 16-битная часть исполнительного
адреса. В одном из адресных регистров
находится адрес сегмента; исполнительный
адрес определяется сложением номера
(адреса) сегмента и смещения. Этим удалось
избежать самого крупного недостатка
прямой адресации, а именно, необходимости
слишком длинного адресного поля при
большой емкости памяти.

При
косвенной
адресации в адресном поле команды
указывается адрес регистра или ячейки
памяти, где находится адрес операнда;
этот адрес называют указателем.
В случае, когда указатель располагается
в регистре, адресацию называют косвенной
регистровой,

рисунок 5.3.

Адрес
указателя в команде компьютера остается
неизменным, но, меняя сами указатели,
можно осуществлять переадресацию
данных, что упрощает обработку массивов
и списковых структур.

КОп
Адрес указателя

ОП

указатель

операнд

Рисунок
5.3 Косвенная адресация

Часто
адрес ячейки памяти образуется из
нескольких составляющих частей, например,
базового адреса (или базы B),
индекса (X)
и смещения (D).
В этих случаях различают базовую,
индексную и базово-индексную адресацию.
Если адрес, указанный в команде, состоит
из двух частей – АB
и АСМ,
то полный адрес ячейки памяти определяется
суммированием содержимого регистра
АB,
где хранится «база», и смещения АСМ,
рисунок 5.4.

КОп АB
АСМ

База

РП

Операнд

ОП

Рисунок
5.4 Формирование адреса памяти при базовой
адресации

Базовая
адресация широко используется при
создании программ, состоящих из
перемещаемых модулей. Базовый (начальный)
адрес загружается в регистр, а остальные
адреса данного модуля определяются
сложением базы и смещения. Это значит,
что любая программа может работать с
данными, располагаемыми в любой области
памяти; для этого нужно изменить только
базу.

Аналогично
выполняется и индексная
адресация.
Однако после выполнения обращения к
ячейке памяти с адресом A
= (AX)
+ A
СМ
производится увеличение индекса X,
записанного в индексном регистре, на
единицу. Так «автоматически» определяется
адрес следующего подлежащего обработке
элемента в массиве. Использование
индексной адресации упрощает создание
циклических программ.

Часто
используют комбинированную базово-индексную
адресацию. В этом случае адрес ячейки
памяти определяется суммой содержимого
регистров базы и индекса, а также
смещения, содержащегося в команде,
рисунок 5.5. Иногда используют не сложение,
а «сцепление» кодов базы, индекса и
смещения. Это значит, что исполнительный
адрес A
= AB,AX,AСМ.

Для
определения адреса следующей команды
в IBM
PC
может быть использована относительная
адресация.
В этом
случае адрес очередной команды
представляет собой сумму текущего
значения счетчика команд (IP)
и смещения из предыдущей команды.

Все
виды адресации в компьютере IBM
PC
определяют место расположения и способ
нахождения адреса второго операнда;
первый операнд всегда находится в одном
из регистров. Для компьютеров IBM
PC
многочисленные способы адресации
отчасти достались «по наследству» от
ранних моделей микропроцессоров, когда
разрядность была ограничена.

КОп АB АX
AСМ

Индекс

База

РП

Операнд

ОП

Рисунок
5.5 Формирование адреса памяти при базовой
индексной адресации

Выбору
реализуемой компьютером системы команд
должно уделяться самое серьезное
внимание. Каждая аппаратно реализуемая
операция, входящая в систему команд,
выполняется быстрее, чем аналогичная
операция, не входящая в систему команд
и, следовательно, реализуемая в виде
подпрограммы. На первый взгляд из этого
следует, что увеличение аппаратно
реализуемых операций, т.е. расширение
системы команд, может привести к повышению
быстродействия машины. Это положение
положено в основу концепции архитектуры
компьютера с расширенным набором команд
– CISC
архитектур. Однако в силу ряда причин
расширение системы команд может приводить
и к обратным результатам. Именно это
обстоятельство и послужило толчком для
разработки машин с сокращенным набором
команд – RISC
архитектур. Эти архитектуры рассмотрены
ниже.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Аннотация: В этой лекции рассказывается об основных группах команд процессора, об особенностях выполнения различных команд, о методах организации подпрограмм.

3.3. Система команд процессора

В общем случае система команд процессора включает в себя следующие четыре основные группы команд:

  • команды пересылки данных;
  • арифметические команды ;
  • логические команды ;
  • команды переходов.

Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (Source) в приемник (Destination). Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода/вывода. АЛУ в данном случае не используется.

Арифметические команды выполняют операции сложения, вычитания, умножения, деления, увеличения на единицу (инкрементирования), уменьшения на единицу (декрементирования) и т.д. Этим командам требуется один или два входных операнда. Формируют команды один выходной операнд.

Логические команды производят над операндами логические операции, например, логическое И, логическое ИЛИ, исключающее ИЛИ, очистку, инверсию, разнообразные сдвиги (вправо, влево, арифметический сдвиг, циклический сдвиг). Этим командам, как и арифметическим, требуется один или два входных операнда, и формируют они один выходной операнд.

Наконец, команды переходов предназначены для изменения обычного порядка последовательного выполнения команд. С их помощью организуются переходы на подпрограммы и возвраты из них, всевозможные циклы, ветвления программ, пропуски фрагментов программ и т.д. Команды переходов всегда меняют содержимое счетчика команд. Переходы могут быть условными и безусловными. Именно эти команды позволяют строить сложные алгоритмы обработки информации.

В соответствии с результатом каждой выполненной команды устанавливаются или очищаются биты регистра состояния процессора ( PSW ). Но надо помнить, что не все команды изменяют все имеющиеся в PSW флаги. Это определяется особенностями каждого конкретного процессора.

У разных процессоров системы команд существенно различаются, но в основе своей они очень похожи. Количество команд у процессоров также различно. Например, у упоминавшегося уже процессора МС68000 всего 61 команда, а у процессора 8086 — 133 команды. У современных мощных процессоров количество команд достигает нескольких сотен. В то же время существуют процессоры с сокращенным набором команд (так называемые RISC-процессоры), в которых за счет максимального сокращения количества команд достигается увеличение эффективности и скорости их выполнения.

Рассмотрим теперь особенности четырех выделенных групп команд процессора более подробно.

3.3.1. Команды пересылки данных

Команды пересылки данных занимают очень важное место в системе команд любого процессора. Они выполняют следующие важнейшие функции:

  • загрузка (запись) содержимого во внутренние регистры процессора;
  • сохранение в памяти содержимого внутренних регистров процессора;
  • копирование содержимого из одной области памяти в другую;
  • запись в устройства ввода/вывода и чтение из устройств ввода/вывода.

В некоторых процессорах (например, Т-11) все эти функции выполняются одной единственной командой MOV (для байтовых пересылок — MOVB ) но с различными методами адресации операндов.

В других процессорах помимо команды MOV имеется еще несколько команд для выполнения перечисленных функций. Например, для загрузки регистров могут использоваться команды загрузки, причем для разных регистров — разные команды (их обозначения обычно строятся с использованием слова LOAD — загрузка). Часто выделяются специальные команды для сохранения в стеке и для извлечения из стека ( PUSH — сохранить в стеке, POP — извлечь из стека). Эти команды выполняют пересылку с автоинкрементной и с автодекрементной адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде).

Иногда в систему команд вводится специальная команда MOVS для строчной (или цепочечной) пересылки данных (например, в процессоре 8086). Эта команда пересылает не одно слово или байт, а заданное количество слов или байтов ( MOVSB ), то есть инициирует не один цикл обмена по магистрали, а несколько. При этом адрес памяти, с которым происходит взаимодействие, увеличивается на 1 или на 2 после каждого обращения или же уменьшается на 1 или на 2 после каждого обращения. То есть в неявном виде применяется автоинкрементная или автодекрементная адресация.

В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода/вывода. Команда IN используется для ввода (чтения) информации из устройства ввода/вывода, а команда OUT используется для вывода (записи) в устройство ввода/вывода. Обмен информацией в этом случае производится между регистром-аккумулятором и устройством ввода/вывода. В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлены команды строчного (цепочечного) ввода (команда INS ) и строчного вывода (команда OUTS ). Эти команды позволяют пересылать целый массив (строку) данных из памяти в устройство ввода/вывода ( OUTS ) или из устройства ввода/вывода в память ( INS ). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS ).

Также к командам пересылки данных относятся команды обмена информацией (их обозначение строится на основе слова Exchange ). Может быть предусмотрен обмен информацией между внутренними регистрами, между двумя половинами одного регистра ( SWAP ) или между регистром и ячейкой памяти.

3.3.2. Арифметические команды

Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп:

  • команды операций с фиксированной запятой (сложение, вычитание, умножение, деление);
  • команды операций с плавающей запятой (сложение, вычитание, умножение, деление);
  • команды очистки;
  • команды инкремента и декремента;
  • команда сравнения.

Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда сложения ( ADD ) вычисляет сумму двух кодов. Команда вычитания ( SUB ) вычисляет разность двух кодов. Команда умножения ( MUL ) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления ( DIV ) вычисляет частное от деления одного кода на другой. Причем все эти команды могут работать как с числами со знаком, так и с числами без знака.

Команды операций с плавающей запятой (точкой) используют формат представления чисел с порядком и мантиссой (обычно эти числа занимают две последовательные ячейки памяти). В современных мощных процессорах набор команд с плавающей запятой не ограничивается только четырьмя арифметическими действиями, а содержит и множество других более сложных команд, например, вычисление тригонометрических функций, логарифмических функций, а также сложных функций, необходимых при обработке звука и изображения.

Команды очистки ( CLR ) предназначены для записи нулевого кода в регистр или ячейку памяти. Эти команды могут быть заменены командами пересылки нулевого кода, но специальные команды очистки обычно выполняются быстрее, чем команды пересылки. Команды очистки иногда относят к группе логических команд, но суть их от этого не меняется.

Команды инкремента (увеличения на единицу, INC ) и декремента (уменьшения на единицу, DEC ) также бывают очень удобны. Их можно в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммирование и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом.

Наконец, команда сравнения (обозначается CMP ) предназначена для сравнения двух входных операндов. По сути, она вычисляет разность этих двух операндов, но выходного операнда не формирует, а всего лишь изменяет биты в регистре состояния процессора ( PSW ) по результату этого вычитания. Следующая за командой сравнения команда (обычно это команда перехода ) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений (о командах перехода речь идет в разделе 3.3.4). В некоторых процессорах предусмотрены команды цепочечного сравнения двух последовательностей операндов, находящихся в памяти (например, в процессоре 8086 и совместимых с ним).

Понравилась статья? Поделить с друзьями:
  • Brow henna хна для бровей инструкция по применению
  • Микразим инструкция по применению цена отзывы капсулы цена
  • Smart fitness tracker инструкция на русском языке
  • Haylou smartwatch 2 инструкция на русском языке
  • Мануалы по акпп крайслер