380 likes | 635 Views
ARQUITECTURA BÁSICA DE MIPS 64. ARQUITECTURA BÁSICA DE MIPS 64. Características RISC de MIPS64 Registros y memoria Instrucciones enteras Instrucciones de coma flotante El ensamblador utilizado en prácticas Ejemplos de código. ARQUITECTURA BÁSICA DE MIPS 64. Características RISC de MIPS64.
E N D
ARQUITECTURA BÁSICA DE MIPS 64 • Características RISC de MIPS64 • Registros y memoria • Instrucciones enteras • Instrucciones de coma flotante • El ensamblador utilizado en prácticas • Ejemplos de código
ARQUITECTURA BÁSICA DE MIPS 64 • Características RISC de MIPS64 3
Características RISC de MIPS64 • MIPS64 responde a la filosofía RISC • Instrucciones: • Sencillas y ortogonales. • Longitud fija de 32 bits. • Memoria separada: • Caché de instrucciones. • Caché de datos. • Número significativo de registros. • Cauce segmentado. Hay muchas implementaciones de MIPS. La descrita a continuación es una versión reducida que coincide con la utilizada por el simulador de las prácticas. Así mismo, se han simplificado muchos aspectos de la arquitectura para facilitar su comprensión. Arquitectura básica de MIPS 64 4
ARQUITECTURA BÁSICA DE MIPS 64 5 • Registros y memoria
Registros y memoria Registros de Propósito General (GPR) Registros de Coma Flotante (FPR) Cableado a cero R0 R16 F0 F16 R1 R17 F1 F17 R2 R18 F2 F18 R3 R19 F3 F19 R4 R20 F4 F20 R5 R21 F5 F21 R6 R22 F6 F22 R7 R23 F7 F23 R8 R24 F8 F24 R9 R25 F9 F25 R10 R26 F10 F26 R11 R27 F11 F27 R12 R28 F12 F28 R13 R29 F13 F29 R14 R30 F14 F30 R15 R31 F15 F31 ¡Todos de 64 bits! Dirección de retorno Arquitectura básica de MIPS 64 6
Registros y memoria • Bus de datos de 64 bits. • 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 básica de MIPS 64 7
Registros y memoria Organización de la memoria • Orden de los octetos • Big-endian • Little-endian Big-endian Bits Dir. Palabras Dir. Altas Dir. Bajas Arquitectura básica de MIPS 64 8
Registros y memoria Organización de la memoria Little-endian Bits Dir. Palabras Dir. Altas Dir. Bajas ¡La utilizada por MIPS64! Arquitectura básica de MIPS 64 9
Registros y memoria Organización de la memoria Alineación 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 básica de MIPS 64 10
ARQUITECTURA BÁSICA DE MIPS 64 11 • Instrucciones enteras
Instrucciones enteras INSTRUCCIONES DE LECTURA DE MEMORIA Arquitectura básica de MIPS 64 12
Instrucciones enteras INSTRUCCIONES DE ESCRITURA EN MEMORIA Arquitectura básica de MIPS 64 13
Instrucciones enteras INSTRUCCIONES ARITMÉTICAS Instrucción Operación Comentario dadd Rd,Rs,Rt Rd = Rs + Rt Con desbordamiento (trap) daddu Rd,Rs,Rt Rd = Rs + Rt Sin desbordamiento daddi Rd,Rs,imm Rd = Rs + imm Con desbordamiento (trap) daddui Rd,Rs,imm Rd = Rs + imm Sin desbordamiento Arquitectura básica de MIPS 64 14
Instrucciones enteras INSTRUCCIONES LÓGICAS Arquitectura básica de MIPS 64 15
Instrucciones enteras INSTRUCCIONES DE DESPLAZAMIENTO Arquitectura básica de MIPS 64 16
Instrucciones enteras INSTRUCCIONES DE COMPARACIÓN Arquitectura básica de MIPS 64 17
Instrucciones enteras INSTRUCCIONES DE SALTO CONDICIONAL Arquitectura básica de MIPS 64 18
Instrucciones enteras INSTRUCCIONES DE SALTO INCONDICIONAL Arquitectura básica de MIPS 64 19
Instrucciones enteras OTRAS INSTRUCCIONES Arquitectura básica de MIPS 64 20
ARQUITECTURA BÁSICA DE MIPS 64 21 • Instrucciones de coma flotante
Instrucciones de coma flotante INSTRUCCIONES DE ACCESO A MEMORIA Arquitectura básica de MIPS 64 22
Instrucciones de coma flotante INSTRUCCIONES ARITMÉTICAS Arquitectura básica de MIPS 64 23
Instrucciones de coma flotante INSTRUCCIONES DE COMPARACIÓN Arquitectura básica de MIPS 64 24
Instrucciones de coma flotante INSTRUCCIONES DE SALTO CONDICIONAL Arquitectura básica de MIPS 64 25
Instrucciones de coma flotante OTRAS INSTRUCCIONES Arquitectura básica de MIPS 64 26
ARQUITECTURA BÁSICA DE MIPS 64 27 • El ensamblador utilizado en prácticas
El ensamblador utilizado en prácticas Estructura de un programa ensamblador .data Pregunta: .ascii “Introducir nº>\0” Num: .word 8 Car: .byte 0x0D .text Comienzo: daddi r1,r0,0 daddi r2,r0,4 ……………………………… Arquitectura básica de MIPS 64
El ensamblador utilizado en prácticas Son instrucciones para el programa ensamblador indicándole cómo realizar el proceso de traducción Pueden utilizarse etiquetas para referirse a direcciones de memoria (notación simbólica) Arquitectura básica de MIPS 64
El ensamblador utilizado en prácticas PROGRAMA Arquitectura básica de MIPS 64
ARQUITECTURA BÁSICA DE MIPS 64 31 • Ejemplos de código
Ejemplos de código Ejemplo 1 MIPS64 C .data i: .word32 0 d: .double 0.0 c: .byte 0 vector: .word32 0,0,0,0,0 S: .word16 0 int main () { int i; double d; char c; int vector [5]; short s; } Arquitectura básica de MIPS 64 32
Ejemplos de código Ejemplo 2 MIPS64 C .data i: .word32 0 .text lw R3,i(R0) daddi R3,R0,10 daddi R3,R3,30 sw R3,i(R0) int main () { int i; i = 10; i = i + 30; } Arquitectura básica de MIPS 64 33
Ejemplos de código Ejemplo 3 MIPS64 C .data i: .word32 0 j: .word32 0 k: .word32 0 .text daddi R3,R0,10 ; i en R3 sw R3,i(R0) daddi R4,R0,20 ; j en R4 sw R4,j(R0) IF: slt R8,R3,R4 beqz R8, IFELSE daddi R10,R0,1 sw R10,k(R0) j IFEND IFELSE: daddi R12,R0,2 sw R12,k(R0) IFEND: halt int main () { int i; int j; int k; i = 10; j = 20; if (i<j) k = 1; else k = 2; } Arquitectura básica de MIPS 64 34
Ejemplos de código Ejemplo 4 (Una solución) MIPS64 C .data i: .word32 0 vector: .word32 0,0,0,0,0,0,0,0,0,0 .text daddi R2,R0,10 ; tamaño daddi R4,R0,0 ; i en R4 FOR: slt R7,R4,R2 beqz R7,ENDFOR daddi R11,R0,4 dmul R12,R11,R4 sw R4,vector(R12) daddi R4,R4,1 j FOR ENDFOR: halt int main () { int vector[10]; for (i=0;i<10;i++) { vector[i]= i; } } Arquitectura básica de MIPS 64 35
Ejemplos de código Ejemplo 4 (Otra solución) MIPS64 C .data vector: .word32 0,0,0,0,0,0,0,0,0,0 .text daddi R1,R0,10 ;R1=indice daddi R2,R0,4 FOR: daddi R1,R1,-1 dmul R3,R1,R2 ;R3=indice*4 sw R1,vector(R3) bnez R1,FOR halt int main () { int vector[10]; for (i=0;i<10;i++) { vector[i]= i; } } Arquitectura básica de MIPS 64 36