Anda di halaman 1dari 36

2.

ARQUITECTURA BSICA DE MIPS 64

ARQUITECTURA BSICA DE MIPS 64

1. Caractersticas RISC de MIPS64 2. Registros y memoria 3. Instrucciones enteras 4. Instrucciones de coma flotante 5. El ensamblador utilizado en prcticas 6. Ejemplos de cdigo
2

ARQUITECTURA BSICA DE MIPS 64

1. Caractersticas RISC de MIPS64

Caractersticas RISC de MIPS64

MIPS64 responde a la filosofa RISC


Instrucciones: Sencillas y ortogonales. Longitud fija de 32 bits. Memoria separada: Cach de instrucciones. Cach de datos. Nmero significativo de registros. Cauce segmentado.

Hay muchas implementaciones de MIPS. La descrita a continuacin es una versin reducida que coincide con la utilizada por el simulador de las prcticas. As mismo, se han simplificado muchos aspectos de la arquitectura para facilitar su comprensin.

Arquitectura bsica de MIPS 64

ARQUITECTURA BSICA DE MIPS 64

2. Registros y memoria

Registros y memoria
Registros de Propsito General (GPR)
Cableado a cero R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 Direccin de retorno R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 R30 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31

Registros de Coma Flotante (FPR)

Todos de 64 bits!
6

Arquitectura bsica de MIPS 64

Registros y memoria
q Bus de datos de 64 bits. q Permite accesos a memoria en cuatro longitudes diferentes: Byte (8 bits) Media Palabra (16 bits) Palabra (32 bits) Doble Palabra (64 bits)
Media Palabra Byte

Palabra Doble Palabra

Arquitectura bsica de MIPS 64

Registros y memoria

Organizacin de la memoria
q Orden de los octetos Big-endian Little-endian

Big-endian
Dir. Palabras 12 Dir. Altas 8 4 Dir. Bajas 0 Bits
31 24 23 16 15 8 7 0

12 8 4 0

13 9 5 1

14 10 6 2

15 11 7 3
8

Arquitectura bsica de MIPS 64

Registros y memoria

Organizacin de la memoria
Little-endian
Dir. Palabras 12 Dir. Altas 8 4 Dir. Bajas 0 Bits
31 24 23 16 15 8 7 0

15 11 7 3

14 10 6 2

13 9 5 1

12 8 4 0

La utilizada por MIPS64!


Arquitectura bsica de MIPS 64
9

Registros y memoria

Organizacin de la memoria
Alineacin
Los accesos de 8, 16, 32 y 64 bits tienen las restricciones siguientes: Las medias palabras deben comenzar en frontera para (0, 2, 4, ) Las palabras deben comenzar en direcciones divisibles por 4 (0, 4, 8, ) Las dobles palabras deben comenzar en direcciones divisibles por 8 (0, 8, 16, )

Arquitectura bsica de MIPS 64

10

ARQUITECTURA BSICA DE MIPS 64

3. Instrucciones enteras

11

Instrucciones enteras
INSTRUCCIONES DE LECTURA DE MEMORIA
Instruccin
lb Rt,offset(Rs) lbu Rt,offset(Rs) lh Rt,offset(Rs) lhu Rt,offset(Rs) lw Rt,offset(Rs) lwu Rt,offset(Rs) ld Rt,offset(Rs)

Operacin Rt [0..7] = MEM [Rs + offset] Rt [0..7] = MEM [Rs + offset] Rt [0..15] = MEM [Rs + offset] Rt [0..15] = MEM [Rs + offset] Rt [0..31] = MEM [Rs + offset] Rt [0..31] = MEM [Rs + offset] Rt [0..63] = MEM [Rs + offset]

Comentario Lectura de 1 octeto con extensin de signo Lectura de 1 octeto sin extensin de signo Lectura de media palabra (16 bits) con extensin de signo Lectura de media palabra (16 bits) sin extensin de signo Lectura de una palabra (32 bits) con extensin signo Lectura de una palabra (32 bits) sin extensin signo Lectura de una doble palabra (64 bits)
12

Arquitectura bsica de MIPS 64

Instrucciones enteras

INSTRUCCIONES DE ESCRITURA EN MEMORIA


Instruccin
sb Rt,offset(Rs) sh Rt,offset(Rs) sw Rt,offset(Rs) sd Rt,offset(Rs)

Operacin MEM [Rs + offset] = Rt [0..7] MEM [Rs + offset] = Rt [0..15] MEM [Rs + offset] = Rt [0..31] MEM [Rs + offset] = Rt [0..63]

Comentario Escritura de un octeto Escritura de media palabra (16 bits) Escritura de una palabra (32 bits) Escritura de una doble palabra (64 bits)

Arquitectura bsica de MIPS 64

13

Instrucciones enteras
INSTRUCCIONES ARITMTICAS
Instruccin
dadd Rd,Rs,Rt daddu Rd,Rs,Rt daddi Rd,Rs,imm daddui Rd,Rs,imm dsub Rd,Rs,Rt dsubu Rd,Rs,Rt dmul Rd,Rs,Rt dmulu Rd,Rs,Rt ddiv Rd,Rs,Rt ddviu Rd,Rs,Rt

Operacin Rd = Rs + Rt Rd = Rs + Rt Rd = Rs + imm Rd = Rs + imm Rd = Rs - Rt Rd = Rs - Rt Rd = Rs * Rt Rd = Rs * Rt Rd = Rs / Rt Rd = Rs / Rt

Comentario Con desbordamiento (trap) Sin desbordamiento Con desbordamiento (trap) Sin desbordamiento Con desbordamiento (trap) Sin desbordamiento Con desbordamiento (trap) Sin desbordamiento Con desbordamiento (trap) Sin desbordamiento

Arquitectura bsica de MIPS 64

14

Instrucciones enteras

INSTRUCCIONES LGICAS
Instruccin
and Rd,Rs,Rt andi Rt,Rs,imm or Rd,Rs,Rt ori Rt,Rs,imm xor Rd,Rs,Rt xori Rt,Rs,imm

Operacin Rd = Rs AND Rt Rt = Rs AND imm Rd = Rs OR RT Rt = Rs OR imm Rd = Rs XOR Rt Rt = Rs XOR imm

Comentario And lgico And lgico Or lgico Or lgico Or exclusivo Or exclusivo

Arquitectura bsica de MIPS 64

15

Instrucciones enteras

INSTRUCCIONES DE DESPLAZAMIENTO
Instruccin
dsllv Rd,Rt,Rs dsll Rd,Rt,imm dsrlv Rd,Rt,Rs dsrl Rd,Rt,imm dsrav Rd,Rt,Rs dsra Rd,Rt,imm

Operacin Rd = Rt << Rs Rd = Rt << imm Rd = Rt >> Rs Rd = Rt >> imm Rd = Rt >> Rs Rd = Rt >> imm

Comentario Desplazamiento lgico a izda. Slo se utilizan los bits 0..5 de Rs Desplazamiento lgico a Izda. Desplazamiento lgico a dcha. Slo se utilizan los bits 0..5 de Rs Desplazamiento lgico a Dcha. Desplazamiento aritm. a dcha. Slo se utilizan los bits 0..5 de Rs Desplazamiento aritm. a Dcha.

Arquitectura bsica de MIPS 64

16

Instrucciones enteras

INSTRUCCIONES DE COMPARACIN
Instruccin
slt Rd,Rs,Rt sltu Rd,Rs,Rt slti Rt,Rs,imm sltiu Rt,Rs,imm

Operacin Si Rs < Rt Rd = 1 else Rd = 0 Si Rs < Rt Rd = 1 else Rd = 0 Si Rs < ext_sign (imm) Rt = 1 else Rt = 0

Comentario Comparacin entera con signo Comparacin entera sin signo Sin desbordamiento

Si l Rs l < l ext_sign (imm) l Comparacin sin signo Rt = 1 else Rt = 0 y sin desbordamiento

Arquitectura bsica de MIPS 64

17

Instrucciones enteras

INSTRUCCIONES DE SALTO CONDICIONAL


Instruccin
beq Rs,Rt,offset bne Rs,Rt,offset beqz Rs,offset bnez Rs,offset

Operacin Si Rs = Rt PC = PC [63..28] || instr_index || 02 Si Rs Rt PC = PC [63..28] || instr_index || 02 Si Rs = 0 PC = PC [63..28] || instr_index || 02 Si Rs 0 PC = PC [63..28] || instr_index || 02

Comentario El salto est restringido a una zona de 128 KB El salto est restringido a una zona de 128 KB. El salto est restringido a una zona de 128 KB. El salto est restringido a una zona de 128 KB.

Arquitectura bsica de MIPS 64

18

Instrucciones enteras

INSTRUCCIONES DE SALTO INCONDICIONAL


Instruccin
j instr_index jal instr_index

Operacin PC = PC [63..28] || instr_index || 02 PC = PC [63..28] || instr_index || 02 PC = Rs PC = Rs ; R31 = PC + 8

Comentario El salto est restringido a una zona de 256 MB Almacena la direccin de retorno (PC+8) en R31 La direccin de salto debe estar alineada Almacena la direccin de retorno en R31

jr Rs

jalr Rs

Arquitectura bsica de MIPS 64

19

Instrucciones enteras

OTRAS INSTRUCCIONES
Instruccin
lui Rt,imm movz Rd,Rs,Rt movn Rd,Rs,Rt nop

Operacin Rt = imm || 032 Si Rt = 0 Rd = Rs Si Rt 0 Rd = Rs No operacin

Comentario Desbordamiento Movimiento condicional Movimiento condicional

Arquitectura bsica de MIPS 64

20

ARQUITECTURA BSICA DE MIPS 64

4. Instrucciones de coma flotante

21

Instrucciones de coma flotante

INSTRUCCIONES DE ACCESO A MEMORIA


Instruccin
l.d Ft,offset(Rs) s.d Ft,offset(Rs)

Operacin Rt [0..63] = MEM [Rs + offset] MEM [Rs + offset] = Rt [0..63]

Comentario Lectura de una doble palabra (64 bits) Escritura de una doble palabra (64 bits)

Arquitectura bsica de MIPS 64

22

Instrucciones de coma flotante

INSTRUCCIONES ARITMTICAS
Instruccin
add.d Fd,Fs,Ft sub.d Fd,Fs,Ft mul.d Fd,Fs,Ft div.d Fd,Fs,Ft

Operacin Fd = Fs + Ft Fd = Fs - Ft Fd = Fs * Ft Fd = Fs / Ft

Comentario Varias excepciones de la unidad de coma flotante (FPU) Varias excepciones de la unidad de coma flotante (FPU) Varias excepciones de la unidad de coma flotante (FPU) Varias excepciones de la unidad de coma flotante (FPU)

Arquitectura bsica de MIPS 64

23

Instrucciones de coma flotante

INSTRUCCIONES DE COMPARACIN
Instruccin
c.lt.d Fs,Ft c.le.d Fs,Ft c.eq.d Fs,Ft

Operacin CC = (Fs < Ft) CC = (Fs <= Ft) CC = (Fs = Ft)

Comentario CC es un bit de la unidad de coma flotante CC es un bit de la unidad de coma flotante CC es un bit de la unidad de coma flotante

Arquitectura bsica de MIPS 64

24

Instrucciones de coma flotante

INSTRUCCIONES DE SALTO CONDICIONAL


Instruccin
bc1f offset bc1t offset

Operacin Si CC = 0 Saltar Si CC = 1 Saltar

Comentario El salto est restringido a una zona de 128 KB El salto est restringido a una zona de 128 KB

Arquitectura bsica de MIPS 64

25

Instrucciones de coma flotante

OTRAS INSTRUCCIONES
Instruccin
mtc1 Rt,Fs mfc1 Rt,Fs mov.d Fd,Fs cvt.d.l Fd,Fs cvt.l.d Fd,Fs

Operacin Fs [31..0] = Rt [31..0] Rt =ext_signo(Fs [31..0]) Fd = Fs Fd = toDoubleFP (Fs) Fd = to64integer (Fs)

Comentario

Con extensin de signo No genera ninguna excepcin Varias excepciones de la unidad de coma flotante (FPU) Varias excepciones de la unidad de coma flotante (FPU)

Arquitectura bsica de MIPS 64

26

ARQUITECTURA BSICA DE MIPS 64

5. El ensamblador utilizado en prcticas

27

El ensamblador utilizado en prcticas

Estructura de un programa ensamblador


.data

Datos

Pregunta: .ascii Introducir n>\0 Num: Car: .text .word 8 .byte 0x0D

Cdigo

Comienzo:

daddi r1,r0,0 daddi r2,r0,4

Arquitectura bsica de MIPS 64

28

El ensamblador utilizado en prcticas


Son instrucciones para el programa ensamblador indicndole cmo realizar el proceso de traduccin Pueden utilizarse etiquetas para referirse a direcciones de memoria (notacin simblica) Directiva
.text o .code .data .org DIR .space N .ascii STRING .asciiz STRING .word n1,n2, .byte b1,b2, .word16 w1,w2, .word32 w1,w2, .double d1,d2,

Desripcin Comienzo de cdigo Comienzo de datos Direccin de comienzo de ensamblaje Reserva N octetos de memoria Inicializa una zona de memoria con STRING Idntica a .ascii aadiendo un carcter NULL al final Inicializa una zona de memoria con dobles palabras (64 bits) Inicializa una zona de memoria con octetos Inicializa una zona de memoria con medias palabras (16 bits) Inicializa una zona de memoria con palabras (32 bits) Inicializa una zona de memoria con nmeros en coma flotante
29

Arquitectura bsica de MIPS 64

El ensamblador utilizado en prcticas

PROGRAMA
DATOS ; Este .data X: Y: Z: .text Etiquetas INICIO: Instrucciones ld ld dadd sd halt r1,Y(r0) r2,Z(r0) r3,r1,r2 r3,X(r0) Comentarios ; Carga en r1 el valor de la var. Y (64 bits) ; Carga en r2 el valor de la var. Z (64 bits) ; Realiza la suma de r1 y r2 ; Almacena en la var. X el valor de r3 (64 bits) ; Para el procesador (Fin del programa) programa calcula la expresin X = Y + Z .word 0x0 ; en Hexadecimal .word 0x012345678901234567 ; en Hexadecimal .word 10 ; en Decimal CDIGO

FIN:

Arquitectura bsica de MIPS 64

30

ARQUITECTURA BSICA DE MIPS 64

6. Ejemplos de cdigo

31

Ejemplos de cdigo Ejemplo 1


C
int main () { int i; double d; char c; int vector [5]; short s; }

MIPS64
.data i: d: c: vector: S: .word32 .double .byte .word32 .word16 0 0.0 0 0,0,0,0,0 0

Arquitectura bsica de MIPS 64

32

Ejemplos de cdigo Ejemplo 2


C
int main () {

MIPS64
.data i: .text .word32 0

int i; i = 10; i = i + 30;


}

lw R3,i(R0) daddi R3,R0,10 daddi R3,R3,30 sw R3,i(R0)

Arquitectura bsica de MIPS 64

33

Ejemplos de cdigo Ejemplo 3


C
int main () { int i; int j; int k; i = 10; j = 20; if (i<j) k = 1; else k = 2; }

MIPS64
.data i: j: k: .text daddi sw daddi sw IF: slt beqz daddi sw j IFELSE: daddi sw IFEND: halt R3,R0,10 ; i en R3 R3,i(R0) R4,R0,20 ; j en R4 R4,j(R0) R8,R3,R4 R8, IFELSE R10,R0,1 R10,k(R0) IFEND R12,R0,2 R12,k(R0) .word32 .word32 .word32 0 0 0

Arquitectura bsica de MIPS 64

34

Ejemplos de cdigo Ejemplo 4 (Una solucin)


C
int main () { int vector[10]; for (i=0;i<10;i++) { vector[i]= i; } }

MIPS64
.data i: .word32 vector: .word32 .text daddi daddi FOR: slt beqz daddi dmul sw daddi j ENDFOR: halt R2,R0,10 ; tamao R4,R0,0 ; i en R4 R7,R4,R2 R7,ENDFOR R11,R0,4 R12,R11,R4 R4,vector(R12) R4,R4,1 FOR 0 0,0,0,0,0,0,0,0,0,0

Arquitectura bsica de MIPS 64

35

Ejemplos de cdigo Ejemplo 4 (Otra solucin)


C
int main () { int vector[10]; for (i=0;i<10;i++) { vector[i]= i; } }

MIPS64
.data vector: .word32 .text FOR: daddi daddi daddi dmul sw bnez halt R1,R0,10 ;R1=indice R2,R0,4 R1,R1,-1 R3,R1,R2 ;R3=indice*4 R1,vector(R3) R1,FOR 0,0,0,0,0,0,0,0,0,0

Arquitectura bsica de MIPS 64

36