Главная страница
Случайная страница
Разделы сайта
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Система машинних інструкцій
Повний перелік множини інструкцій надано таблицею 1. Зауважимо, що нестандартно використовують регістр R31 регістрового файла як такий, що містить адресу повернення у разі виконання деяких типів безумовних переходів.
Регістр R0 регістрового файла завжди містить нульові біти (або просто, нуль) і нульове вмістиме не змінює навіть запис до R0. Це дозволяє реалізувати абсолютний режим адресування, коли
address = offset + [R0] = offset + 0 = offset.
де offset є зсувом.
Таблиця 1. Множина інструкцій DLX машини
№
пп
| Код
інструкції
| СУТНІСТЬ ІНСТРУКЦІЙ DLX МАШИНИ
| Пересилання даних
| Move data between registers and memory, or between the integer and FP or special registers; only memory address mode is 16-bit displacement + contents of an integer register
|
| LB, LBU, SB
| Load byte, load byte unsigned, store byte
|
| LH, LHU, SH
| Load halfword, load halfword unsigned, store halfword
|
| LW, SW
| Load word, store word
|
| LF, LD, SF, SD
| Load single precision float, load double precision float, store single precision float, store double precision float
|
| MOVI2S, MOVS2I
| Move from/to integer register to/from a special register
|
| MOVF, MOVD
| Copy one floating point register or a DP pair to another register or pair
|
| MOVFP2I, MOVI2FP
| Move 32 bits from/to a FP register to/from an integer register
| Арифметичні
та логічні
| Operations on integer or logical data in integer registers; signed arithmetic instructions trap on overflow
|
| ADD, ADDI, ADDU, ADDUI
| Add, add immediate (all immediates are 16 bits); signed and unsigned
|
| SUB, SUBI, SUBU, SUBUI
| Subtract, subtract immediate; signed and unsigned
|
| MULT, MULTU, DIV, DIVU
| Multiply and divide, signed and unsigned; operands must be floating-point registers; all operations take and yield 32-bit values
|
| AND, ANDI
| And, and immediate
|
| OR, ORI, XOR, XORI
| Inclusive or, Inclusive or immediate, exclusive or, exclusive or immediate
|
| LHI
| Load high immediate - loads upper 16 bits of register with immediate and zeros the lower 16 bits
|
| SLL, SRL, SRA, SLLI, SRLI, SRAI
| Shifts; both immediate (S__I) and variable form (S__); shifts are left logical, right logical and right arithmetic
|
| SEQ, SNE, SLT, SGT, SLE, SGE
| Set conditional; set equal zero, set not equal zero, set less than, set greater than, set less than or equal, set greater than or equal
| Керування
| Conditional branches and jumps; PC-relative or through register
|
| BEQZ, BNEZ
| Branch integer register equal/not equal to zero; 16 bit offset from PC+4
|
| BFPF, BFPT
| Test comparison bit in the FP status register and branch; 16 bit offset from PC+4
|
| J, JR
| Jumps; 26 bit offset from PC+4 (J) or target register (JR)
|
| JAL, JALR
| Jump and link; save PC+8 to R31, target is 26 bit offset from PC+4 (JAL) or a register (JALR)
|
| TRAP
| Transfer to operating system at a vectored address
|
| RFE
| Return to user code from an exception; restore user mode
| Рухома кома
| Операції з рухомою комою: DP (подвійна точність)
та SP (одинарна точність)
|
| ADDD, ADDF
| Add DP and SP floats
|
| SUBD, SUBF
| Subtract DP and SP floats
|
| MULTD, MULTF
| Multiply DP and SP floats
|
| DIVD, DIVF
| Divide DP and SP floats
|
| CVTD2F, CVTD2I, CVTF2D, CVTF2I, CVTI2D, CVTI2F
| Convert instructions; CVTx2y converts from type x to type y, where x and y are one of D (double precision float), F (single precision float) or I (integer); both operands are in floating point registers
|
| EQD, EQF, NED, NEF, LTD, LTF, GTD, GTF, LED, LEF, GED, GEF
| DP and SP compares; set comparison bit in FP status register
| Пересилання даних поміж регістрами та пам'яттю даних, або поміж регістрами цілих операндів і регістрів операндів з рухомою комою та спеціальними регістрами; адресування пам'яті виконують за допомогою лише однієї адресувальної моди (mode), де 16-бітовий зсув, що міститься у форматі інструкції, додають до вмістимого одного з регістрів загального призначення (тобто регістра, що містить цілий операнд - базову адресу).
Ще раз пригорнемо увагу до того, що саме інструкції завантаження (load) чи збереження (store), які належать до цього типу, вивільняють від додаткової функції арифметичного, логічного чи будь-якого іншого опрацювання операндів. Це, по-перше, задовільняє необхідній умові створення множини інструкцій (машинних команд) RISC- архітектури, а по-друге, дозволяє визнати архітектуру, що зараз проектується, як Load/store architecture.
Арифметико/логічні інструкції вивільнено від дій з обміну поміж програмно керованими регістрами процесора та комірками пам'яті даних. За допомогою цієї групи інструкцій виконують дії з додавання або віднімання операндів, логічну обробку та різноманітні зсуви операндів.
Інструкції керування виконанням програми, до яких належать умовні і безумовні переходи і деякі інші інструкції, наприклад, TRAP (остання тимчасово, на короткий термін ніби " передовіряє" керування системою деякому модулю операційної системи), а також інструкція повернення з виключення (обробка особливої ситуації, що може виникнути при виконанні операції) RFE (Return From Exeption).
Інструкції обробки чисел у форматі з рухомою комою, за допомогою яких виконується додавання, віднімання, множення, ділення і низка інших операцій над відповідними кодами, як правило, у двох варіантах, із стандартною та подвійною точністю.
Пояснемо на ілюстративному прикладі синтаксис запису алгоритмів виконання окремих машинних інструкцій DLX (див. таблицю 2). Надано запис:
Regs[R19] 16..31 = 16(DM[Regs[R8]]0)8 ## DM[Regs[R8]].
Запис фіксує наступне. Оновлюють лише 16 молодших (правих) бітів регістру R19. До них пересилають двохбайтовий бінарний код, в якому молодший правий байт береться з пам’яті даних DM за адресою, що є збіжною з вмістимим регістру R8. Старший лівий байт утворюють вісімразовим повторюванням нульового (старшого) розряду щойно згаданого правого байта. Парою символів ## позначено операцію конкатенації (зчеплення) двох байтів до двохбайтового напівслова. Наведеного у таблиці 2 достатньо для синтезу відсутніх в ній алгоритмів.
Таблиця 2. Приклади алгоритмів виконання інструкцій DLX
Приклад інструкції
| Алгоритм виконання інструкції
| Арифметичні та логічні інструкції
| ADD R1, R2, R3
| Regs[R1] = Regs[R2} + Regs[R3]
| ADDI R1, R2, #3
| Regs[R1] = Regs[R2] + 3
| LHI R1, #42
| Regs[R1] = 42 ## 016
| SLLI R1, R2, #5
| Regs[R1] = Regs[R2} < < 5
| SLT R1, R2, R3
| if (Regs[R2] < Regs[R3])
Regs [R1] = 1 else Regs[R1] = 0
| Інструкції збереження і завантаження
| LW R1, 30(R2)
| Regs [R1] = 32 DM [30 + Regs[R2]]
| LW R1, 1000(R0)
| Regs [R1] = 32 DM [1000 + 0]
| LB R1, 40(R3)
| Regs [R1] = 32 (DM [40 + Regs[R3]] 0) 24 ## DM [40 + Regs[R3]]
| LBU R1, 40(R3)
| Regs [R1] = 32 0 24 ## DM [40 + Regs[R3]]
| LH R1, 40(R3)
| Regs [R1] = 32 (DM [40 + Regs[R3]] 0) 16 ## DM [40 + Regs[R3]] ## DM [41 + Regs[R3]]
| SW 500(R4), R3
| DM[500 + Regs[R4]] = 32 Regs[R3]
| SH 502(R2), R3
| DM[502 + Regs[R2]] = 16 Regs[R3] 16…31
| SB 41(R3), R2
| DM[ 41 + Regs[R3]] = 8 Regs[R2] 24…31
| Інструкції керування програмою
| J name
| PC = name;
((PC + 4) – 2 25) =< name =< ((PC + 4) + 2 25);
| JAL name
| R31 = PC + 4; PC = name;
((PC + 4) – 2 25) =< name =< ((PC + 4) + 2 25);
| JALR R2
| Regs[R31] = PC + 4; PC = Regs[R2];
| BEQZ R4, name
| if (Regs[R4] == 0) PC = name;
((PC + 4) – 2 15) =< name =< ((PC + 4) + 2 15);
| BNEZ R4, name
| if (Regs[R4]! = 0) PC = name;
((PC + 4) – 2 15) =< name =< ((PC + 4) + 2 15);
|
|