2.2 Tipos de instrucciones RISC versus CISC A finales de los años

Anuncio
2.2 Tipos de instrucciones
(Última modificación el 03/03/08)
RISC versus CISC
A finales de los años setenta se efectuaron muchos experimentos con
instrucciones muy complejas.
Hubieron varios grupos que se opusieron a esta tendencia, y
simplificaron el repertorio de instrucciones.
Ellos acuñaron el término RISC para este concepto.
La idea inicial era hacer instrucciones simples que pudieran ejecutarse
con rapidez.
Pronto se vio que la clave para un buen rendimiento era diseñar
instrucciones que pudieran ejecutarse rápidamente.
El tiempo real que una instrucción tardaba era menos importante que
el número de instrucciones que podían ejecutarse por segundo.
1
La característica que llamó la atención fue el número relativamente
pequeño de instrucciones disponibles, por lo regular unas 50.
Este número era mucho menor que las 200 o 300 que tenían
computadoras como la DEC VAX.
El acrónimo RISC significa computadora de conjunto de instrucciones
reducido (Reduced Instruction Set Computer), lo que contrasta con
CISC que signifca computadora de conjunto de instrucciones complejo
(Complex Intruction Set Computer).
Hoy en día poca gente piensa que el tamaño del conjunto de
instrucciones sea crucial, pero el nombre ha persistido.
2
Las instrucciones soportadas por la mayoría de las arquitecturas
pueden clasificarse según la siguiente tabla:
3
(I) Aritméticas y lógicas
(1) Aritméticas
En la mayoría de los computadores: suma, resta, multiplicación y
división.
Tipos de operandos:
(1) Todas con enteros con signo.
(2) Algunas con enteros sin signo.
En la MIPS:
(1) Addition (with overflow)
add rd, rs, rt
(2) Addition (without overflow)
Put the sum of registers rs and rt into register rd.
addu rd, rs, rt
4
Otras operaciones aritméticas posibles (un solo operando):
- Valor absoluto.
En la MIPS:
Absolute value
Put the absolute value of register rsrc in register rdest.
abs rdest, rsrc
pseudoinstruction
- Cambio de signo.
En la MIPS:
Negate value (with overflow)
neg rdest, rsrc
pseudoinstruction
Negate value (without overflow)
negu rdest, rsrc
pseudoinstruction
Put the negative of register rsrc into register rdest.
- Incremento y decremento.
5
(2) Lógicas
Son operaciones sobre datos lógicos: operaciones lógicas bit a bit.
En la MIPS: AND, OR, NOR y XOR.
AND: Put the logical AND of registers rs and rt into register rd.
and rd, rs, rt
Ejemplo:
rs = 0000 0000 1010 0101
rt = 0000 0000 0000 1111
rd = 0000 0000 0000 0101
(3) Operaciones de desplazamiento y rotación
6
7
Ejemplos en la MIPS :
Format: SRA rd, rt, sa
Purpose: To arithmetic right shift a word by a fixed number of bits.
Description: rd ĸ rt >> sa (arithmetic)
The contents of the low-order 32-bit word of GPR rt are shifted right,
duplicating the sign-bit (bit 31) in the emptied bits; the word result is
placed in GPR rd. The bit shift count is specified by sa.
Format: SRL rd, rt, sa
Purpose: To logical right shift a word by a fixed number of bits.
Description: rd ĸ rt >> sa (logical)
The contents of the low-order 32-bit word of GPR rt are shifted right,
inserting zeros into the emptied bits; the word result is placed in GPR
rd.
8
(II) Transferencia de datos
Operación: copiar un dato de un sitio (registro o memoria) a otro.
Debe especificar:
- Operandos fuente y destino.
- Longitud del dato a transferir.
El tamaño del dato se especifica en el código de operación.
En la MIPS: lb, lh ó lw.
- Load word: Load the 32-bit quantity (word) at address into register rt.
lw rt, address
- Load byte: Load the byte at address into register rt.
lb rt, address
Operación muy sencilla en el caso registro-registro.
Si es con memoria, habrá que calcular la dirección del dato y hacer el
acceso a memoria (más lenta que los registros).
9
(III) Control (de flujo de ejecución)
En las instrucciones vistas hasta ahora la instrucción que se ejecutará
a continuación es la siguiente en memoria.
Las instrucciones de control cambian esta secuencia de ejecución
(ruptura de secuencia).
Para ello tendrán que especificar qué instrucción se ejecutará a
continuación.
La operación que realiza la CPU es actualizar el registro contador de
programa (PC) para que contenga la dirección en memoria de la
próxima instrucción a ejecutar.
10
Tipos de rupturas de secuencia:
(1) Bifurcaciones (branch): rupturas de secuencia condicionales.
La condición puede ser:
- El valor de un bit de estado.
- La comparación (con cero) del valor de un registro (MIPS): bgez
rs, label.
- La comparación de los valores de 2 registros (MIPS): beq rs, rt,
label.
Asociadas con estas instrucciones pueden haber otras de
comparación (MIPS): slt rd, rs, rt.
(2) Saltos (jump): rupturas de secuencia no condicionales.
11
(3) Llamadas y retornos de procedimientos: para ejecutar un
procedimiento y retornar al programa principal:
12
(IV) Sistema
Llamadas al sistema operativo (MIPS:syscall) para que realice
algún servicio: entrada/salida, detener la ejecución del programa,…
en la MIPS
13
(V) Punto flotante
Operaciones con reales.
En casi todas las máquinas, la MIPS las tiene.
Floating-point addition double
add.d fd, fs, ft
Floating-point addition single
add.s fd, fs, ft
Compute the sum of the floating-point doubles (singles) in registers fs
and ft and put it in register fd.
(VI) Decimal
Para operar con datos BCD.
La MIPS no las tiene.
(VII) Cadenas
Para copiar o mover cadenas de caracteres.
La MIPS no las tiene.
14
Veamos un resumen del repertorio de instrucciones de la MIPS:
MIPS IV Instruction Set
(1) Arithmetic and Logical Instructions
(2) Constant-Manipulating Instructions
(3) Comparison Instructions
(4) Branch Instructions
(5) Jump Instructions
(6) Load Instructions
(7) Store Instructions
(8) Data Movement Instructions
(9) Floating-Point Instructions
(10) Exception and Interrupt Instructions
15
(1) Arithmetic and Logical Instructions
Addition (with overflow)
add rd, rs, rt
Put the sum of registers rs and rt into register rd.
Addition immediate (with overflow)
addi rt, rs, imm
Put the sum of register rs and the sign-extended immediate (16 bits)
into register rt.
If the addition results in 32-bit 2’s complement arithmetic overflow then
the destination register is not modified and an Integer Overflow
exception occurs.
16
AND
and rd, rs, rt
Put the logical AND of registers rs and rt into register rd.
AND immediate
andi rt, rs, imm
Put the logical AND of register rs and the zero-extended immediate
into register rt.
Divide
div rs, rt
Divide register rs by register rt. Leave the quotient in register lo and the
remainder in register hi.
Multiply
mult rs, rt
Multiply registers rs and rt. Leave the low-order word of the product in
register lo and the high-order word in register hi.
17
NOR
nor rd, rs, rt
Put the logical NOR of registers rs and rt into register rd.
OR
or rd, rs, rt
Put the logical OR of registers rs and rt into register rd.
OR immediate
ori rt, rs, imm
Put the logical OR of register rs and the zero-extended immediate into
register rt.
18
Shift left logical
sll rd, rt, shamt
Shift left logical variable
sllv rd, rt, rs
Shift right arithmetic
sra rd, rt, shamt
Shift right arithmetic variable
srav rd, rt, rs
Shift right logical
srl rd, rt, shamt
Shift right logical variable
srlv rd, rt, rs
Shift register rt left (right) by the distance indicated by immediate shamt
or the register rs and put the result in register rd.
19
Subtract (with overflow)
sub rd, rs, rt
Put the difference of registers rs and rt into register rd.
If the subtraction results in 32-bit 2’s complement arithmetic overflow
then the destination register is not modified and an Integer Overflow
exception occurs.
Exclusive OR
xor rd, rs, rt
Put the logical XOR of registers rs and rt into register rd.
XOR immediate
xori rt, rs, imm
Put the logical XOR of register rs and the zero-extended immediate
into register rt.
20
(2) Constant-Manipulating Instructions
Load upper immediate
lui rt, imm
Load the lower halfword of the immediate imm into the upper halfword
of register rt. The lower bits of the register are set to 0.
Cargar una palabra inmediata en un registro
No hay una instrucción máquina para ello
Se puede hacer con un lui y un ori.
Por ejemplo lui $t0, 0x1234
# t0=0x12340000
ori $t1, $t0, 0x5678
# t1=0x12340000 OR 0x00005678
cargaría la palabra 0x12345678 en el registro t1.
21
(3) Comparison Instructions
Set less than
slt rd, rs, rt
Set register rd to 1 if register rs is less than rt, and to 0 otherwise.
Set less than immediate
slti rt, rs, imm
Set register rt to 1 if register rs is less than the sign-extended
immediate, and to 0 otherwise.
22
(4) Branch Instructions
Branch on equal
beq rs, rt, label
Conditionally branch to instruction specified by label if register rs
equals rt.
Branch on greater than equal zero
bgez rs, label
Conditionally branch to instruction specified by label if register rs is
greater than or equal to 0.
Branch on greater than zero
bgtz rs, label
Conditionally branch to instruction specified by label if register rs is
greater than 0.
23
Branch on less than equal zero
blez rs, label
Conditionally branch to instruction specified by label if register rs is
less than or equal to 0.
Branch on less than zero
bltz rs, label
Conditionally branch to instruction specified by label if register rs is
less than 0.
Branch on not equal
bne rs, rt, label
Conditionally branch to instruction specified by label if register rs is
not equal to rt.
24
(5) Jump instructions
Jump
j target
Unconditionally jump to the instruction at target.
Jump and link
jal target
Unconditionally jump to the instruction at target; save the address of
the next instruction in register $ra.
Jump register
jr rs
Unconditionally jump to the instruction whose address is in register rs.
25
(6) Load Instructions
Load byte
lb rt, address
Load unsigned byte
lbu rt, address
Load the byte at address into register rt; the byte is sign-extended by
lb, but not by lbu.
26
Load halfword
lh rt, address
Load unsigned halfword
lhu rt, address
Load the 16-bit quantity (halfword) at address into register rt; the
halfword is sign-extended by lh, but not by lhu.
Load word
lw rt, address
Load the 32-bit quantity (word) at address into register rt.
27
(7) Store Instructions
Store byte
sb rt, address
Store the low byte from register rt at address.
Store halfword
sh rt, address
Store the low halfword from register rt at address.
Store word
sw rt, address
Store the word from register rt at address.
28
(8) Data Movement Instructions
Move from hi
mfhi rd
Move from lo
mflo rd
Move the hi (lo) register to register rd.
Move to hi
mthi rs
Move to lo
mtlo rs
Move register rs to the hi (lo) register.
Mover un registro a otro
No existe una instrucción máquina para ello.
Se puede hacer con un add rd, rs, $zero
#rd=rs+0
29
(9) Floating-Point Instructions
No las veremos.
(10) Exception and Interrupt Instructions
System call
syscall
Register $v0 contains the number of the system call (see Figure A.17)
provided by SPIM.
30
Descargar