Home
Descripción - Grupo de computación de altas prestaciones
Contents
1. OpCode Descripci n DSLL Doubleword Shift Left Logical DSRL Doubleword Shift Right Logical DSRA Doubleword Shift Right Arithmetic DSLLV Doublewrd Shift Left Logical Variable DSRLV Doublwrd Shift Right Logical Variable DSRAV Doublwrd Shift Right Arithmetic Variable DSLL32 Doubleword Shift Left Logical 32 DSRL32 Doubleword Shift Right Logical 32 DSRA32 Doubleword Shift Right Arithmetic 32 Estensiones a ISA Instrucciones de excepciones OpCode Descripci n TGE Trap if Greater Than or Equal TGEU Trap if Greater Than or Equal Unsigned TLT Trap if Less Than TLTU Trap if Less Than Unsigned TEO Trap if Equal TNE Trap if Not Equal TGE Trap if Greater Than or Equal Immediate TGEIU Trap if Greater Than or Equal Immediate Unsigned TLTI Trap if Less Than Immediate Caracter sticas generales del procesador MIPS R4000 P g 14 Simulador de instrucciones del microprocesador MIPS R 4000 TLTIU Trap if Less Than Immediate Unsigned TEO Trap if Equal Immediate TNE Trap if Not Equal Immediate Estensiones a ISA Instrucciones del Coprocesador OpCode Descripci n DMFCz Doubleword Move From Coprocessor z DMTCz Doubleword Move To Coprocessor z LDCzZ Load Double Coprocesso
2. limpia 2 17 56 20 limpiamos una zona determinada de la pantalla gotoxy 2 17 printf Desea meter otro dato Preguntamos si queremos meter otro gotoxy 9 18 printf 1 En la siguiente direccitn en la dir siguiente gotoxy 9 19 printf 2 En otra direcci n distinta en otra dir distinta gotoxy 9 20 printf 3 No quiero meter otro dato no meter ning n dato mas do i op getch leemos la opci n introducida por teclado while op 1 amp amp op 2 amp amp op 3 amp amp op 27 switch op en caso de que la variable op sea case 1 direccion 1 incrementamos la direcci n limpia 2 17 56 20 limpiamos zona de la pantalla x 3 aumentamos la x para escribir el siguiente dato if x 57 si la x ha llegado a 57 x 9 inicializamos otra vez xa 9 yt pasamos a la siguiente linea break sale del switch case 2 do 2 vamos a meter dato en otra direcci n distinta limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 printf Direcci tn de Memoria pide direccitn escape leedir direccion la lee if escape 0 si se ha pulsado esc se sale de opcitn return 0 while direccion gt 65535 controla que no sea mayor de OxFFFF Ver memoria direccion visualizamos la memoria x 9 inicializamos x e y y 45 break se sale del switch Case 3 brea
3. Add inmedia Add Inmediate Unsigned And Inmediate ranch On Equal ranch On Greate ranch On Greater Than ranch On Greater Than ranch On Less Than Or rch On Less Thn Or Branch On Not Equal Branch On Not Equal Likely Doubleword Add Inmediate Unsigned Doubleword Add Inmediate Jump Jump Load Load Load Load Load Load Load Load Load Load te al B B B B B B Than Or Zero Zero Likely Q0N0maE And Link Byte Byte Unsigned Doubleword Doubleword Left Doubleword Right Halfword Halfword Unsigned Upper Inmediate Word Word Left Load Word Right Load Word Unsigned Or Inmediate Store Byte Store Doubleword Store Doubleword Left Store Doubleword Right Store Halfword Store Word Store Word Left Store Word Right Set On Less Than Inmediate Set On Exclusive OR Inmediate Exception Return Less Than Inmediate Unsigned Equal To Zero Equal To Zero Equal To Zero Likely A partir de aqui son de tabla void ADDI ULONG instruccion void ADDIU ULONG instruccion void ANDI ULONG instruccion void BEQ ULONG instruccion void BEOL ULONG instruccion void BGTZ ULONG instruccion void BGTZL ULONG instruccion void BLEZ ULONG instruccion void BLEZL ULONG instruccion void BNE ULONG instruccion
4. Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 157 Simulador de instrucciones del microprocesador MIPS R4000 3 gt 0000 76 31 29 2A X X X X 4 gt 0000 58 76 31 29 2A X X X 5 gt 0000 713 58 76 31 29 2A X X 6 gt 0000 45 73 58 76 31 29 2A X 7 gt 0000 39 45 73 58 76 31 29 2A Para Little Endian Registro rt 39 45 73 58 76 31 29 2A Memoria Despla Dir Direcciones de memoria Z 0 gt 0000 2A 29 31 76 58 T3 45 39 1 gt 0000 X 2A 29 31 76 58 73 45 2 gt 0000 X X 2A 29 31 76 58 73 3 gt 0000 X X X 2A 29 31 76 58 4 gt 0000 X X X X 2A 29 31 76 S gt 0000 X X X X X 2A 29 31 6 gt 0000 X X X X X X 2A 29 7 gt 0000 X X X X X X X 2A X Lo que hab a en memoria antes de SDR Excepciones Reserved instruction exception En modo 32 bits SH Store Halfword El formato de la instrucci n es SH rt offset base Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 158 Simulador de instrucciones del microprocesador MIPS R4000 Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar la direcci n a la que vamos a acceder La media palabra halfword de or
5. rpg rt 1 0x00000001 ponemos parte baja del reg rt a uno rpg rt 0 0 ponemos la parte alta del reg rt a cero else Si rssingo no es menor que inmesigno rpg rt 1 0x00000000 ponemos la parte baja del reg rt a cero rpg rt 0 0 ponemos la parte alta del reg rt a cero else if rpg rs 0 inme0 Si las dos partes altas son iguales if rsnosigno lt inmenosigno Comparamos las partes bajas sin rpg rt 1 0x00000001 Ponemos parte baja del registro rt a uno rpg rt 0 0 Ponemos parte alta del regis rt a cero else Si rsnosigon no es menor que inmenosigno rpg rt 1 0x00000000 Ponemos parte baja del registro rt a cero rpg rt 0 0 Ponemos parte alta del registro rt a cero else Si la parte alta de los dos datos es igual a cero if rsnosigno lt inmenosigno Si rsnosigno es menor que inmenosigno rpg rt 1 0x00000001 Ponemos parte baja del registro rt a uno rpg rt 0 0 Ponemos parte alta del registro rt a cero Ap ndice II C digo fuente del simulador P g 256 Simulador de instrucciones del microprocesador MIPS R4000 else Si rsnosigno no es menor que inmenosigno I rpg rt 1 0x00000000 Ponemos parte baja del registro rt a cero rpg rt 0 0 Ponemos parte alta del registro rt a cero Fin de la instrucci n SLTI void SLTIU ULONG instruccion Set on Less Than Immediate Unsigned Se ex
6. Excepci n Vector de desplazamiento TLB refill EXL 0 0x000 XTLB refill EXL 0 X TLB de 64 bits 0x080 Cache Error 0x100 Otras 0x180 Reset Soft Reset NMI Ninguno Caracter sticas generales del procesador MIPS R4000 P g 32 Simulador de instrucciones del microprocesador MIPS R 4000 PRIORIDAD DE LAS EXCEPCIONES Cuando en la ejecuci n de una instrucci n simple puede ocurrir m s de una excepci n solo se atiende la excepci n que tiene mayor prioridad En la siguiente tabla se muestra la prioridad de las excepciones adem s de enumerarlas Reset prioridad m s alta Soft Reset causada por la se al Reset indica se al activa a nivel bajo Interrupci n No enmascarable NMI Soft reset causada por NMI Address error B squeda de la instrucci n TLB refill B squeda de la instrucci n TLB invalid B squeda de la instrucci n Cache error B squeda de la instrucci n Virtual Coherency B squeda de la instrucci n Bus error B squeda de la instrucci n Integer Overflow Trap System Call Breakpoint Reserved Instruction Coprocessor Unusable Floating Point Excepcion Address error Acceso a Datos TLB refill Acceso a Datos TLB invalid Acceso a Datos TLB modified Escritura de Datos Cache error Acceso a Datos Watch Virtual Coherency Acceso a Datos Bus error Acces
7. El contenido del registro rt se desplaza a la derecha sa bits extendiendo bit de mayor peso el resultado se guarda en el registro rd UCHAR rt rd sa Para n fmero de registro y desplazamiento ULONG auxi auxi2 Variables auxiliares Ap ndice II C digo fuente del simulador P g 243 Simulador de instrucciones del microprocesador MIPS R4000 rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn auxi instruccion 0x00007C0 Cogemos el campo sa de la instrucci tn auxi auxi gt gt 6 Lo desplazamos 6 bits hacia la derecha sa UCHAR auxi Lo convertimos al tipo unsigned char if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits auxi rpg rt 0 En auxi metemos la parte alta del reg rt auxi auxi gt gt 31 Lo desplazamos hacia la derecha 31 bits auxi2 rpg rt 0 En auxi2 metemos la parte alta del reg rt auxi2 auxi2 lt lt 32 sa La desplazamos hacia la izq 32 sa bits if auxi 0 Si auxi es distinto de cero auxi 0xFFFFFFFF En auxi metemos todo unos auxi auxi gt gt 32 sa corremos hacia la derecha 32 sa bits auxisauxi lt lt 32 sa Tenemos la extension de signo else if auxi 0 Si auxi es igual
8. Fin de la instruccitn BEQ void BEQL ULONG instruccion Branch On Equal Likely Se comparan los contenidos de los registros rs y rt Si los dos registros son iguales el programa hace un salto relativo marcado por el campo offset Si la condici n no se cumple la instrucci n a continuaci tn de esta se anula no se ejecuta UCHAR rs rt Para coger el nfmero de los registros signed long int offset Para el offset ULONG auxi Variable auxiliar rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instruccitn offset instruccion Ox0000FFFF Cogemos el offset de la instrucci n offset offset lt lt 2 Lo desplazamos dos bits hacia la izquierda auxi offset en auxi metemos offset auxi auxi gt gt 17 Lo desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCOO0OO Hacemos extensin de signo con unos if Estado UX 0 Para 32 bits if rpg rs 1 rpg rt 1 Si la parte baja de los registros es igual rpg 34 1 rpg 34 1 offset Se suma el offset al CP else Si la parte baja de los registros es distinta rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction pasa de la sig else if Estado UX 1 Para 64 bits if rpg rs 0 rpg rt 0 amp amp rpgirs 1 rpg rt 1 Si son iguales rpg 34 1 rpg 34 1 off
9. regrsl rpg rs 1 El registro rs se queda como est porque es positivo regrs0 rpg rs 0 regrtl rpg rt 1 El registro rt se queda como est porque es positivo regrt0 rpg rt 0 cambio 0 No hay que hacer cambio de signo al resultado final if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits Hacemos la multiplicaci n y lo guardamos en su correspondiente reg rpg 32 0 multiplicacion regrs0 regrs1l regrt0 regrtl ALTA rpg 32 1 multiplicacion regrs0 regrs1l regrt0 regrtl ALTAMEDIA rpg 33 0 multiplicacion regrs0 regrs1l regrt0 regrtl BAJAMEDIA rpg 33 1 multiplicacion regrs0 regrs1l regrt0 regrtl BAJA if cambio 1 Ahora vamos a ver si hay que hacer el cambio de signo en el resultado de la multiplicacitn rpg 33 1 rpg 33 1 1 cambiamos de signo en Ca2 0 31 rpg 33 0 rpg 33 1 01 invertimos todos los bits 32 63 rpg 32 1 1 rpg 321 11 invertimos todos los bits 64 95 rpg 32 0 rpg 321 01 invertimos todos los bits 96 127 if rpg 33 11 0 rpg 331 0 Transmitimos el acarreo si lo hay if rpg 33 0 0 rpg 32 1 if rpg 32 1 0 rpg 32 0 Fin de la instrucci n DMULT void DMULTU ULONG instruccion Doubleword Multiply Unsigned
10. void BGEZAL ULONG instruccion Brch On Greater than or Equal to zro and Link 1 UCHAR rs Para coger el n fmero de registro signed long int offset Para el desplazamiento ULONG auxi condicion Variable auxiliar y condicicn rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el offset de la instrucci n offset offset lt lt 2 Desplazamos 2 bits hacia la izquierda auxi offset En auxi metemos offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCO0O000 Hacemos la extensi n de signo con unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 rpg 31 1 rpg 34 1 8 Metemos direcci n de instr despu s de delay slot if condicion 0 Si el bit 32 es igual a cero rpg 34 1 rpg 34 1 offset Sumamos al CP el desplazamiento Ap ndice II C digo fuente del simulador P g 267 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 rpg 31 1 rpg 34 1 8 Metemos direcci n de instr despu s de delay slot if condicion 0 Si el bit 64 es igual a cero rpg 34 1 rpg 34 1 offset Sumamos al CP el desplazamiento Fin de la instrucci n BGEZA
11. Campo RS instruccion cogemos el campo rs Campo RT instruccion cogemos el campo rt Campo RD instruccion cogemos el campo rd cs rpg rs 1 en regrs metemos los 32 bits bajos del reg rs rt rpg rt 1 en regrt metemos los 32 bits bajos del reg rt acemos una suma con signo y el resultado se mete en regrd reg aux aux aux aux aux aux if i e rd regrs regrt rd regrd Metemos los valores en var auxiliares para rs regrsS ver el bit 31 y poder comprobar si hay t regrt overflow d auxrd gt gt 31 cada una de estas variables auxiliares se s auxrs gt gt 31 desplazan 31 bit a la derecha t auxrt gt gt 31 Estado UX 0 para 32 bits f auxrs auxrt amp amp auxrd auxrs la nica condici n para que haya overflow es que los bit de signo de los dos operandos sean iguales y el bit de signo del resultado sea distinto que el de los operandos General _Exception Integer overflow exception gotoxy 30 23 printf Integer overfl exception lse en caso de que no haya overflow rpg rd 1 regrd metemos el resultado en el registro rd Ap ndice II C digo fuente del simulador P g 217 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado UX 1 para 64 bits if auxrs auxrt amp amp auxrd auxrs General _Exce
12. else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else if destino 2 0 Si la direcci n es multiplo de dos General Exception Se produce un error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango y no se produce error de direccionamiento fseek pf destino SEEK SET Nos posicionamos en el fichero de memoria if fread 8 datol sizeof UCHAR 1 pf 0 leemos el datol Error Error al acceder a memoria if fread amp dato2 sizeof UCHAR 1 pf 0 leemos el dato2 Error Error al acceder a memoria if Estado RE 0 Si es little endian auxi dato2 En auxi metemos dato2 auxi auxi lt lt 8 Desplazamos 8 bits hacia la izquierda auxi auxi datol Hacemos la or de auxi con datol rpg rt 1 auxi En la parte baja del registro rt metemos auxi else if Estado RE 1 Si es big endian auxi datol En auxi metemos datol auxi auxi lt lt 8 Desplazamos 8 bits hacia la izquierda auxi auxi dato2 Hacemos la or de auxi y dato2 rpg rt 1 auxi En la parte baja del reg rt metemos auxi rpg rt 1 rpg rt 1 amp 0Ox0000FFFF hacemos una extensi n con ceros rpg rt 0 0 ponemos la pa
13. regrs0 rpg rs 0 El primer operando se deja como est regrsl rpg rs 1 regrt0 rpg rt 0 Al segundo operando se le cambia de signo regrtl rpg rt 1 1 if regrti 0 regrt0 grd0 regrs0 regrt0 Se hace la suma de la parte alta grdl regrsl regrt1 Se hace la suma de la parte baja aca acarreo regrsl regrt1 si hay acarreo intermedio if aca 1 regrd0 se le suma uno a la parte alta auxrs regrs0 metemos en las variables aux el contenido de auxrt regrt0 las variables reg 0 auxrd regrd0 auxrs auxrs gt gt 31 Desplazamos 31 bits hacia la derecha para auxrt auxrt gt gt 31 poder quedarnos con el bit 64 auxrd auxrd gt gt 31 if auxrs auxrt amp amp auxrs auxrd Vemos si se produce overflow General_Exception Integer overflow exception gotoxy 30 23 printf Integer Overfl exception else Si no se produce overflow rpg rd 0 regrd0 metemos el resultado en la parte alta rpg rd 1 regrdl metemos el resultado en la parte baja fin de la instrucci n DSUB void DSLL ULONG instruccion Doubleword Shift Left Logical UCHAR rt rd sa Indican el n mero de registro y desplazamiento ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instruccitn rd Campo RD instruccion Cogemos el campo rd de la instruccitn Ap ndice II C digo fuente del simu
14. n SLLV Ap ndice II C digo fuente del simulador P g 249 Simulador de instrucciones del microprocesador MIPS R4000 vo ce En vo po id SRL ULONG instruccion Shift Right Logical El contenido del registro rt se desplaza a la derecha sa bits insertando ros en los bits de orden alto El resultado se guarda en el registro rd 64 bits se hace una extensin de signo UCHAR rt rd sa Para el n mero de registro y desplazamiento ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn auxi instruccion 0x00007C0 Cogemos el campo sa de la instrucci n auxi auxi gt gt 6 Desplazamos 6 bits a la derecha sa UCHAR auxi Lo convertimos a unsigned char if Estado UX 0 Para 32 bits rpg rd 1 rpg rt 1 gt gt sa Se desplaza sa bits drcha parte baja else if Estado UX 1 Para 64 bits auxi rpg rt 1 gt gt sa En auxi metemos la parte baja gt gt sa bits auxi auxi gt gt 31 Se desplaza 31 bits hacia la derecha if auxi 0 Si auxi es distinto de cero rpg rd 0 0xFFFFFFFF Ponemos la parte alta toda a unos else if auxi 0 Si auxi es igual a cero rpg rd 0 0x00000000 Ponemos la parte alta toda a ceros rpg rd 1 rpg rt 1 gt gt sa Ponemos resultado en parte
15. unsigned long temp Variable temporal unsigned char car int i 0 Para el contador do do car toupper getch Lee el primer car cter introducido if car 8 amp amp i gt 0 printf Sc car printi Ter car while car lt 0 car gt 9 amp amp car 27 if car 27 Si se ha pulsado la tecla esc return 0 Se sale de la funcitn else Si no se ha pulsado la tecla esc tecla i car printf Sc tecla il i Ap ndice II C digo fuente del simulador P g 216 Simulador de instrucciones del microprocesador MIPS R4000 jwhile 1 lt 2 te cla i X0 Ponemos al final M0 para saber fin de cadena v unsigned char strtoul tecla endptr 10 Lo pasamos a unsigned char Te A x x x void Es tado regi UCH sig ULO rs rt rd reg reg h turn 1 Devuelv l1 nfmero partir de aqui voy a implementar todas las instrucciones OA RRA RH RRA RRA TNSTRUCCIONES A AAA RARA RARA RARAS OA ADD ULONG instruccion Add ta funci n hace la suma con signo de los registros rs y rt y el resul lo mete en el registro rd Para 64 bits los 32 bits de mayor peso del stro rd son una extensi n del bit 31 del resultado AR rs rt rd indican el n fmero de registro ned long int regrs regrt regrd porque es suma con signo NG auxrs auxrt auxrd es para ver el bit 31 de cada registro
16. En modo 32 bits causa una reserved instruction exception En 64 bits multiplica sin signo el contenido de los registros rs y rt Los 64 bits mas bajos del resultado se guardan en el registro LO y los 64 bits m s altos del resultado se guardan en el registro HI UCHAR rt rs sa Para coger el n mero de los registros ULONG auxi Variable auxiliar rs Campo RS instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n if Estado UX 0 Para 32 bits Ap ndice II C digo fuente del simulador P g 329 Simulador de instrucciones del microprocesador MIPS R4000 reg rpg 32 1 multiplicacion rpg rs 0 rpg rs 1 rpg rt 0 rpg rt 1 ALTAM DIA rpg 33 0 multiplicacion rpg rs 0 rpg rs 1 rpg rt 0 rpg rt 1 BAJAM DIA General Exception Reserved instruction exception Si modo kernel no s jecuta excepcion gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits Hacemos la multiplicaci n y el result lo guardamos en su corresp reg 32 0 multiplicacion rpg rs 0 rpglrs 1 rpg rt 1 0 1 rpg rt 1 ALTA Eal El reg 33 1 multiplicacion rpg rs 0 rpglrs 1 rpg rt 1 01 rpg rt 1 BAJA Fin de la instr
17. Metemos en auxi el dato de mayor peso del reg rt auxi auxi gt gt 31 lo desplazamos hacia la derecha para ver bit de sa gt 32 si sa es mayor de 32 if auxi 0 si auxi es distinto de cero rpg rd 1 rpg rt 0 en parte baja de rd metemos parte alta de rt rpg rd 1 rpg rd 1 gt gt sa 32 desplazamos a la drcha sa 32 bits rpg rd 0 0xFFFFFFFF en parte alta de rd extendemos signo auxi 0xFFFFFFFE lt lt 64 sa desplazamos izq 64 sa bits rpg rd 1 reg rd 1 auxi hacemos la or de rd y auxi else if auxi 0 si auxi es igual a cero rpg rd 1 rpg rt 1 0 en parte baja de rd metemos parte alta de rt rpg rd 1 rpg rd 1 gt gt sa 32 desplazamos a la drcha sa 32 bits rpg rd 0 0x00000000 la parte alta la ponemos a cero else si sa no es mayor de 32 auxi2 rpg rt 0 en auxi2 metemos el registro rt parte alta auxi2 auxi2 lt lt 32 sa lo desplazamos hacia la izq 32 sa bits if auxi 0 Si auxi es distinto de cero auxi 0xFFFFFFFF en auxi metemos todo a unos auxi auxi gt gt 32 sa lo desplazamos hacia la derecha 32 sa bits auxi auxi lt lt 32 sa Tenemos la extension de signo else if auxi 0 si auxi es igual a cero auxi 0x00000000 en auxi metemos todo a ceros rpg rd 0 rpg rt 0 gt gt sa metemos parte alta de rt despl drch sa rpg rd 1 rpg rt 1 gt gt sa metem
18. Operaci n 32 64 GPR rd lt GPR rs xor GPR rt Excepciones Ninguna XORI Exclusive OR Immediate El formato de la instrucci n es XORI rt rs mmediate Descripci n de la instrucci n Ap ndice 1 Descripci n de las instrucciones implementadas en el simulador P g 182 Simulador de instrucciones del microprocesador MIPS R4000 En el dato inmediato de 16 bits se hace una extensi n de ceros y se combina con el contenido del registro rs en una operaci n l gica XOR El resultado se guarda en el registro rt Operaci n 32 GPR rt lt GPR rs xor 0 immediate 64 GPR rt lt GPR rs xor 028 immediate Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 183 AP NDICE II C DIGO FUENTE DEL SIMULADOR DE INSTRUCCIONES MIPS R4000 Simulador de instrucciones del microprocesador MIPS R4000 include lt stdio h gt Utilizamos las librerias include lt conio h gt include lt stdlib h gt include lt ctype h gt include lt string h gt define ULONG unsigned long int renombramos para hacerlo mas corto define UCHAR unsigned char define NUMERO 192 Numero de bytes de memoria que aparecen en pantalla void lineas void pinta las l neas del interfaz de usuario void limpia int x1 int yl int x2 int y2 limpia cierta zona de pantalla void menu void saca el menu de opciones por pantalla
19. Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits La direcci n de la instrucci n siguiente a la instrucci n siguiente a la instrucci n de salto se guarda en el registro 31 Si el contenido del registro rs es menor que cero el programa salta a la direcci n que se ha formado de la suma anterior Operaci n 32s 64 target offsetis offset 0 condicion GPR rs lt 0 GPR 31 E PC 8 if condicion then PC E PC target endif target offset s ff offset 0 condicion GPR rs lt 0 GPR 31 amp PC 8 1f condicion then Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 112 Simulador de instrucciones del microprocesador MIPS R4000 PC PC target endif Excepciones Ninguna BLTZALL Branch On Less Than Zero And Link Likely El formato de la instrucci n es BLTZALL rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits La direcci n de la instrucci n siguiente a la instrucci n siguiente a la instrucci n de salto se guarda en el registro 31 Si el contenido del registro rs es menor que cero el programa salta a
20. if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos extensi n de signo con unos off0 OXFFFFFFFF Extendemos a unos la parte alta del offset else if auxi 0 Si auxi es igual a cero off0 0 Extendemos a ceros la parte alta del offset destino rpg base 1 offset Metemos en destino reg base offset dest0 rpgl base 0 off0 Metemos en dest0 parte alta reg base off0 aca acarreo rpg base 1 offset Vemos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si se sale del rango gotoxy 30 23 Nos posicionamos printf Direcci n fuera de rango Informamos else Si no se sale del rango de direcciones fseek pf destino SEEK_ SET Nos posicionamos en el fichero memoria if fread 8 dato sizeof UCHAR 1 pf 0 Leemos el dato Error Error al acceder a memoria rpg rt 1 dato Metemos el dato en el registro rpg rt 1 rpeg rt 1 0x000000FF Extend el resto del reg con ceros else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 Nos posicionamos printf Direcci n fuera de rango Informamos else Si no se sale del rango de di
21. sa bits derch sa bits derech Se hace una or de parte baja y auxi parte alta de rt se despl parte baja de rt se despl auxi fin de la instrucci n DSRLV 32 inser resultado se guarda en el registro truccion Doubleword Shift Right Logical El rd UCHAR rt rd sa Para el n mero de registro y desplazamiento ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn auxi instruccion 0x00007C0 Cogemos el campo sa de la instrucci n auxi auxi gt gt 6 Lo desplazamos 6 bits hacia la derecha sa UCHAR auxi lo convertimos a unsigned char sa sa 0x20 sumamos a sa 32 if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits if sa gt 32 rpg rd 0 0 dsp else auxi rpg rt 0 lt lt 32 sa rpg rd 0 rpg rt 0 gt gt sa 1 rpg rt 1 gt gt sa 1 rpg rd 1 rpg rd rpg rd nama Si sa es mayor de 32 En la parte alta ponemos un cero rpg rd 1 rpg rt 0 gt gt sa 32 En parte baja ponemos parte alta Si sa no es mayor de 32 En auxi metemos parte alta desp 32 sa En parte alta metemos parte alta desp sa En parte baja metemos
22. 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 11 LD 0 NULL 0 NULL 0 NU 1 0 NU 1 0 NU 0 NULL 0 NU L 11 SD 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL void tablaf ULONG UCHAR Formato cero Formato uno Formato dos Formato tres Formato cuatro Formato cinco Formato _seis Formato siete Formato_ocho Formato nueve Formato diez Formato_once Formato doce Formato trece Formato cator
23. 1f condicion then PC E PC target endif 64 target offset s ff offset 0 condicion GPR rs gt 0 if condicion then PC E PC target endif Excepciones Ninguna BGTZL Branch On Greater Than Zero Likely El formato de la instrucci n es BGTZL rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es mayor que cero el programa salta a la direcci n que se ha formado de la suma anterior Si no se cumple la condici n la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Operaci n 32 target e offset s f offset 0 condicion GPR rs gt 0 Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 103 Simulador de instrucciones del microprocesador MIPS R4000 if condicion then PC E PC target else se anula la siguiente instr endif 64 target lotfseti offset 0 condicion GPR rs gt 0 if condicion then PC E PC target else se anula la siguiente instr endif Excepciones Ninguna BLEZ Branch on Less Than Or Equal To Zero El formato de la instrucci n es BLEZ rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la dire
24. GPR rs mod 0 GPR rt Excepciones Reserved instruction exception En modo 32 bits DIV Divide El formato de la instrucci n es DIV rs rt Descripci n de la instrucci n El contenido del registro rs se divide por el contenido del registro rt tratando ambos operandos como valores en complemento a dos No ocurre ninguna excepci n de desbordamiento y el resultado de esta operaci n es indefinido cuando el divisor es cero En modo 64 bits los operandos deben ser valores de 32 bits con extensi n de signo Cuando la operaci n se completa el cociente se carga en el registro LO y el resto se carga en el registro HI Operaci n 32 LO lt GPR rs div GPR rt HI lt GPR rs mod GPR rt 64 a lt GPR rs l31 0 div GPR rtl31 0 lt GPR rs 31 0 div GPR rtl31 0 Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 120 Simulador de instrucciones del microprocesador MIPS R4000 je LO lt q31 q31 ET gira la Excepciones Ninguna 0 0 DIVU Divide Unsigned El formato de la instrucci n es DIVU rs rt Descripci n de la instrucci n El contenido del registro rs se divide por el contenido del registro rt tratando ambos operandos como valores sin signo No ocurre ninguna excepci n de desbordamiento y el resultado de esta operaci n es indefinido cuando el divisor es cero En modo 64 bits los operandos deben ser valores d
25. en auxi metemos el desplazamiento de bits s UCHAR auxi metemos el desplazamiento en la variable s if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits if s gt 32 si el desplazamiento es mayor de 32 bits rpg rd 0 rpg rt 1 metemos la parte baja de rt en alta de rd rpg rd 1 0x00000000 ponemos ceros en la baja de rd rpg rd 0 rpg rd 0 lt lt s 32 desplazamos hacia la izq la alta else si el desplazamiento no es mayor de 32 bits rpg rd 0 rpg rt 0 lt lt s metemos en rd la parte baja de rt desplazada auxi rpg rt 1 1 en auxi mentemos la parte baja de rt Ap ndice IT C digo fuente del simulador P g 242 Simulador de instrucciones del microprocesador MIPS R4000 ba VO auxi auxi gt gt 32 s lo desplazamos hacia la derecha 32 s bits rpg rd 0 reg rd 0 auxi hacemos la or de parte alta y auxi rpg rd 1 rpg rt 1 lt lt s desplazamos hacia la izq la parte ja Fin de la instrucci n DSLLV id DSLL32 ULONG instruccion Doubleword Shift Left Logical 32 El contenido del registro rt se desplaza 32 sa bits insertando ceros en los bits de orden bajo La ejecuci n de esta instrucci tn en modo 32 bits ca usa una reserved instruction excep
26. if fread amp dato2 sizeof UCHAR 1 pf 0 Leemos el otro byte Error Error al acceder a memoria auxi 0 if Estado RE 0 Si es little endian auxi dato2 En auxi metemos el dato2 auxi auxi lt lt 8 Desplazamos auxi 8 bits hacia la izquierda auxi auxi datol Hacemos la or con datol rpg rt 1 auxi En la parte baja del reg rt metemos auxi else if Estado RE 1 Si es big endian auxi datol En auxi metemos el datol auxi auxi lt lt 8 Desplazamos 8 bits hacia la izquierda auxi auxi dato2 Hacemos la or con dato2 rpg rt 1 auxi En la parte baja del reg rt metemos auxi Ahora vamos a hacer la extensi n de signo auxi auxi gt gt 15 Desplazamos auxi 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero rpg rt 1 rpeg rt 1 OxFFFF0000 Extendemos signo con unos else if auxi 0 Si auxi es igual a cero rpg rt 1 rpg rt 1 amp 0Ox0000FFFF Extendemos signo con ceros else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else if destino 2 0 Si la direcci n es multiplo de dos General_Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rang
27. rpg rs 0 0 amp amp rpg rs 1 0 Si menor o cero rpg 34 1 rpg 34 1 offset Al CP se le suma el offset Fin de la instrucci tn BLEZ void BLEZL ULONG instruccion Branch on Less Than Or Equal to Zero Likely Si el registro rs es menor o igual que cero el programa hace un salto relativo marcado por el campo offset Si la condicit tn no se cumple la siguiente instrucci n que hay en memoria despu s de esta no se ejecuta UCHAR rs Para cog l nfmero de registro rs signed long int offset Para el desplazamiento ULONG auxi condicion Para variable auxiliar y condici n TE rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFF Cogemos el camo offset de la instr offset offset lt lt 2 Desplazamos offset hacia la izquierda dos bits Ap ndice IT C digo fuente del simulador P g 263 Simulador de instrucciones del microprocesador MIPS R4000 auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCO0O000 Hacemos la extensi fn de signo a unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 rpg rs 1 0 Si es menor o igual que cero rpg 34 1 rpg 34 1 offset Al CP le sumamos el offset else rpg 3
28. void BNEL ULONG instruccion void DADDIU ULONG instruccion void DADDI ULONG instruccion void J ULONG instruccion void JAL ULONG instruccion void LB ULONG instruccion void LBU ULONG instruccion void LD ULONG instruccion void LDL ULONG instruccion void LDR ULONG instruccion void LH ULONG instruccion void LHU ULONG instruccion void LUI ULONG instruccion void LW ULONG instruccion void LWL ULONG instruccion void LWR ULONG instruccion void LWU ULONG instruccion void ORI ULONG instruccion void SB ULONG instruccion void SD ULONG instruccion void SDL ULONG instruccion void SDR ULONG instruccion void SH ULONG instruccion void SW ULONG instruccion void SWL ULONG instruccion void SWR ULONG instruccion void SLTI ULONG instruccion void SLTIU ULONG instruccion void XORI ULONG instruccion void ERET ULONG instruccion A partir de aqui son de tablal void BGEZ ULONG instruccion void BGEZAL ULONG instruccion void BGEZALL ULONG instruccion void BGEZL ULONG instruccion void BLTZ ULONG instruccion void BLTZAL ULONG instruccion void BLTZALL ULONG instruccion void BLTZL ULONG instruccion void TEQI ULONG instruccion void TGEI ULONG instruccion void TGEIU ULONG instruccion void TLTI ULONG instruccion Branch On Greater Than Or Equal To Zero Brch On Grtr Thn Or Eql to Zero And Link Bch On Gtr Thn Or E
29. void creditos void saca los datos del autor del proyecto void ini memoria void Inicializa la memoria a cero void ini regs void Inicializa los registros a cero void Ver memoria ULONG direccion ense a contenido de memoria void Ver registros int nreg ensexa contenido de registros void Ver CP void Ensesa el contenido del contador de programa int Coger instruccion void Coge instr de mem la decodifica y ejecuta int Registros void Modifica los registros de proposito general int Meter Instrucce void Mete instrucciones en memoria int Introducir datos void Mete datos en memoria int opcion int Reiniciar CP void pone el CP al principio del programa int configuracion void establece la configuraci tn del simulador void Error char c Saca un mensaje de error si lo hay UCHAR lontocar ULONG x transforma 32 bits a 4 posiciones de 8bits ULONG chartolong UCHAR x transforma 4 pos de 8 bits a 32 bits UCHAR acarreo ULONG n1 ULONG n2 Mira acarreo intermedio en sumas de 64 bits UCHAR Cod op ULONG instr ULONG mascara Saca el c digo de op de una instr UCHAR Estado char c devuelve el valor del registro de estado corresp void Pon estado void UCHAR Campo char c ULONG instruccion devuelve valor de campo que indiquemos int leeinstr unsigned long v Lee una instrucci
30. Devuelv 1 n mero int leebyte unsigned char v Esta instrucci n lo que hac s leer un byte desd l teclado del ordenador Si se pulsa escape se sale de la opcitn indicada Hay que meter el byte con sus dos numeros char tecla 3 endptr array de tres caracteres y puntero unsigned long temp Variable temporal unsigned char car int i 0 Para el contador do do car toupper getch Lee el primer car cter introducido if car 8 amp amp 1 gt 0 Ap ndice II C digo fuente del simulador P g 215 Simulador de instrucciones del microprocesador MIPS R4000 printf Sc car printf Sc car 1 5 while car lt 0 car gt 9 amp amp car lt A car gt F amp amp car 27 if car 27 Si se ha pulsado la tecla esc return 0 Se sale de la funcitn else Si no se ha pulsado la tecla esc tecla i car printf Sc tecla il ttk while i lt 2 tecla i 0 Ponemos al final M0 para saber fin de cadena v unsigned char strtoul tecla tendptr 16 Lo pasamos a unsigned char return 1 Devuelv l1 n mero int leebytedecimal unsigned char v Esta instrucci n lo que hac s leer un byte en decimal desde el teclado del ordenador Si se pulsa escape se sale de la opcitn indicada Hay que meter el byte con sus dos numeros char tecla 3 endptr array de tres caracteres y puntero
31. El contenido del registro rt se desplaza hacia la derecha el n mero de bits especificados por los cinco bits de orden bajo del registro rs haciendo una extensi n de signo de los bits del orden alto en el resultado El resultado se guarda en el registro rd En modo 64 bits el operando debe ser un valor de 32 bits con extensi n de signo Operaci n 32 s E GPR rs 4 o GPR rd lt GPR rt 3 GPR rt 31 s 64 s lt GPR rsla 0 temp GPR rtl31 GPR rtla1 s GPR rd temp31 temp Excepciones Ninguna SRL Shift Right Logical El formato de la instrucci n es SRL rd rt sa Descripci n de la instrucci n El contenido del registro rt se desplaza a la derecha sa bits insertando ceros en los bits de orden alto El resultado se guarda en el registro rd En modo 64 bits el operando debe ser un valor de 32 bits con extensi n de signo Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 167 Simulador de instrucciones del microprocesador MIPS R4000 Operaci n 32 GPR rd lt 0 GPR rtl31 sa 64 s amp 0 sa temp 0 GPR rtla1 s GPR rd lt temps temp Excepciones Ninguna SRLV Shift Right Logical Variable El formato de la instrucci n es SRLV rd rt rs Descripci n de la instrucci n El contenido del registro rt se desplaza a la derecha el n mero de bits especificados por los cinco bits de orden bajo del r
32. En la parte alta se pone todo a ceros Fin de la instrucci n LH void LHU ULONG instruccion Load Halfword Unsigned UCHAR rt base datol dato2 aca base es el campo de rs datos y acarreo signed long int off0 offset dest0 destino Partes alta y baja de off y dest ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el campo rs de la isntruccitn offset instruccion amp 0x0000FFFF Cogemos el campo offset de la instrucc auxi offset En auxi metemos el contenido de offset auxi auxi gt gt 15 Desplazamos auxi 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero Ap ndice II C digo fuente del simulador P g 286 Simulador de instrucciones del microprocesador MIPS R4000 offset offset OxFFFFO000 Hacemos la extensitn de offset con unos off0 OxFFFFFFFF La parte alta de offset lo ponemos todo a unos else if auxi 0 Si auxi es igual a cero off0 0 La parte alta de offset lo ponemos todo a ceros destino rpg base 1 offset Hacemos registro base mas desplazamiento dest0 rpglbase 0 off0 Hacemos registro base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta del destino if Estado UX 0 Para 32 bits if des
33. La parte alta del reg rt se pone a cero Fin de la instrucci n SLTIU void BEQ ULONG instruccion Branch On Equal Se comparan los contenidos de los registros rs y rt Si los dos registros son iguales el programa hace un salto relativo marcado por el campo offset UCHAR rs rt Para coger el nfmero de los registros signed long int offset El offset para que se desplac ULONG auxi Variable auxiliar rs Campo RS instruccion Cogemos el campo rs de la instruccitn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn offset instruccion 0x0000FFFF Cogemos el campo offset de instr offset offset lt lt 2 Lo desplazamos dos bits hacia la izquierda auxi offset En auxi metemos offset auxi auxi gt gt 17 Desplazamos auxi 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero Ap ndice II C digo fuente del simulador P g 258 Simulador de instrucciones del microprocesador MIPS R4000 offset offset OxFFFCO0O00 Hacemos la extensitfn de signo if Estado UX 0 Para 32 bits if rpg rs 1 rpg rt 1 Si la parte baja de los dos reg es igual rpg 34 1 rpg 34 1 offset El contador de programa salta else if Estado UX 1 Para 64 bits if rpg rs 0 rpg rt 0 68 rpeg rs 1 rpg rt 1 Si son iguales rpg 34 1 rpg 34 1 offset El contador de programa salta
34. La siguiente figura ilustra lo explicado en este apartado COP A f EA Primer tipo de instr 000000 COP E RM ES Segundo tipo de instr Tercer tipo de instr Proceso de decodificaci n de una instrucci n Este proceso de decodificaci n se hace para que antes de ejecutar una instrucci n aparezca el mnem nico de la misma en la pantalla del simulador De este modo el usuario del simulador podr saber en todo momento que instrucci n va a ejecutar Estructuras de datos utilizadas En este apartado voy a explicar las estructuras de datos que he utilizado para decodificar una instrucci n He utilizado un array de estructuras llamado formatos de 256 posiciones y la estructura que hay en cada posici n del array est formada por los campos formato y nombre Las instrucciones est n divididas en 16 formatos Cada una de ellas pertenece a un formato El campo Descripci n del dise o del simulador de instrucciones P g 87 Simulador de instrucciones del microprocesador MIPS R4000 formato de la estructura es de tipo char y va a contener el n mero de formato al que pertenece la instrucci n 0 15 y el campo nombre que es un puntero de tipo char contiene el nombre del mnem nico de la instrucci n En el array formatos est n ordenadas todas las instrucciones del repertorio del simulador siguiendo un criterio El criterio de ordenaci n es el siguiente No podemos ordenar las instrucciones por el c digo de operaci n debi
35. Por si se ha equivocado de nfmero tablal cop auxiliar ejecutamos la instrucci n corresp break default if cop lt 64 Para que no se pase del array y no haya error if tabla cop NULL Por si se ha equivocado de nfmero tabla cop auxiliar llamamos a la funcit n qu jecuta ese codigo de operaci tn break rpg 0 0 0 Como el registro r0 siempre tiene que tener el valor cero rpg 0 1 0 y no se puede modificar ponemos su parte alta y baja a cero if ejecucion 2 paralelo incremente paralelo if registros 0 Visualizamos los registros Ver registros 0 else if registros 1 Ap ndice II C digo fuente del simulador P g 205 Simulador de instrucciones del microprocesador MIPS R4000 Ver registros 16 cont ultimadir fseek pf cont SEEK SET Posicionamos el cursor del fichero en la direcci n indicada por la variable cont gotoxy 2 3 El cursor de la pantalla va a la posicitn 2 3 Ahora vamos a mostrar la memoria por pantalla for m 0 m lt NUMERO m El for va desde cero hasta NUMERO if fread amp caracter sizeof UCHAR 1 pf 0 lee un dato del fichero Error Error al leer de la memoria imprimimos mensaje if m 16 0 si el contador i es multiplo de 16 printf An pasa a la siguiente linea printf 04X cont escribe la direcci tn
36. RF DF DS TC WB dos instr de retardo de IF Is RE EX DF Ds TC WB carga f load 8 gt Load Delay Figura 26 Retardo de Carga del Pipeline de la CPU Caracter sticas generales del procesador MIPS R4000 P g 57 Simulador de instrucciones del microprocesador MIPS R 4000 DIBUJO DE LAS SE ALES DEL MICRO En este apartado solo se va a mostrar en la figura 27 las se ales del SCData 127 0 SCDChk 15 0 SCTaz 24 0 SCTChk 6 0 SCAddr 17 1 SCAddrO w x v z SCAPar 2 0 SCOE SCWr w x v z SCDCS SETES microprocesador SysAD 63 0 SysADC 7 0 SvsCmd 8 0 SysCmdP ValidIn ValidOut ExtRast Release Interface de Sistema RdRdy WrRdy Interface de Cach Secundaria 1 IvdAck 3 Ae IvdErr 3 SE ALES a Tclock 1 0 DEL Y 2 Int 5 1 2 e Relock 1 0 R4000 9 9 Int0 S E Masterclock D E 3 NME 58 ha MasterQut EN e l 5 SyncOut ModeClock 2 Syncln 8 O ModeIN o a IOOut o Q VCCOk Sn O IO In B a L ColdReset E Q E Fault E D Reset z VecP VssP 10 JTDI lt Status 7 0 4 E JTDO ma VcecSense 1 g JTMS S VssSense 1 D JTCK E pr 1 Solo R4000SC y R4000MC 2 Solo R4000PC 3 Solo R4000MC 4 Solo R4400 Figura 27 Se ales del Procesador R4000 Caracter sticas generales del procesador MIPS R4000 P g 58 Simulador de instrucciones del microprocesador MIPS R 4000 DIAGRAMA DE BLOQUES INTERNO D
37. Store Doubleword Left Esta instrucci n puede usarse con la instrucci n SDR para almacenar el contenido de un registro en 8 bytes consecutivos de memoria cuando los bytes cruzan un limite de palabra SDL almacena la parte izquierda del registro en la parte alta correspondiente de memoria UCHAR rt base desplaz aca base es el campo de rs signed long int off0 offset dest0 destino Parte alta y baja de off y dest ULONG datomenorpeso datomayorpeso auxi Dato de mayor y menor peso y auxi UCHAR doble0 NULL doble1 NULL Para convertir long a cadena de caracteres int i j Se utilizan como ndices rt Campo RT instruccion Cogemos el campo rt de la instruccitn base Campo RS instruccion Cogemos el campo base de la instruccicn offset instruccion 0x0000FFFF Cogemos el offset de la instrucci n auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 15 Desplazamos hacia la derecha 15 bits if auxi 0 Si auxi es distinto de cero offset offset 0OxFFFF0000 Hacemos la extensi n de signo con unos off0 OxFFFFFFFF La parte alta de offset la ponemos toda a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta de offset toda a ceros destino rpg base 1 offset Hacemos registro base mas offset dest0 rpg base 0 off0 Hacemos reg base off0 parte alta aca acarreo rpg base 1 offset Miramos
38. rt Cam rd Cam rs Cam auxi r sa UC p Hh m u ta Genera gotoxy printf else if if sa en modo 32 bits se produce una reserved instruction exception bits se hace un desplazamiento l gico hacia la derecha rd rs sa Para los nfmeros de registros y desplazam de bits xi Variable auxiliar po RT instruccion Cogemos el campo rt de la instruccicn po RD instruccion Cogemos el campo rd de la instruccicn po RS instruccion Cogemos el campo rs de la instruccicn pglrs 1 amp 0x0000003F en auxi metemos el desplaz de bits HAR auxi en sa metemos el desplazamiento do UX 0 Para 32 bits 1 Exception Reserved instruction exception 30 23 Reserved Instr exception Estado UX 1 Para 64 bits gt 32 Si sa es mayor de 32 Ap ndice IT C digo fuente del simulador P g 247 Simulador de instrucciones del microprocesador MIPS R4000 rpg rd 0 0 La parte alta del registro rd se pone a cero rpg rd 1 rpg rt 0 gt gt sa 32 else auxi rpg rt 0 lt lt 32 sa bits rpg rd 0 rpg r rpg rd 1 rpg r rpg rd 1 rpg r void DSRL32 ULONG ins El contenido del registro rt se desplaza a la derecha 32 sa bits tando ceros en los bits de orden alto si sa no es mayor de 32 bits parte alta de rt desplazada izq 32 sa t 0 gt gt sa t 1 gt gt sa a 1
39. toffsetis offset 0 condicion lt GPR rs lt 0 if condicion then PC E PC target else se anula la siguiente instr endif 64 target offset s ff offset 0 condicion lt GPR rs lt 0 if condicion then PC E PC target else se anula la siguiente instr endif Excepciones Ninguna BGEZ Branch On Greater Than Or Equal To Zero El formato de la instrucci n es BGEZ rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es mayor o Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 106 Simulador de instrucciones del microprocesador MIPS R4000 igual que cero el programa salta a la direcci n que se ha formado de la suma anterior Operaci n 32 target offset s f offset 0 condicion lt GPR rs gt 0 if condicion then PC lt PC target endif 64 target ocres ff offset 0 condicion lt GPR rs gt 0 if condicion then PC E PC target endif Excepciones Ninguna BGEZAL Branch On Greater Than Or Equal To Zero And Link El formato de la instrucci n es BGEZAL rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci
40. 1 0x00000001 El registro rd se pone a uno rpg rd 0 0 else Si rssigno no es menor que rtsigno rpg rd 1 0x00000000 El registro rd se pone a cero rpg rd 0 0 else if rpg rs 0 rpg rt 0 Si las dos son iguales if rsnosigno lt rtnosigno Si rsnosig es menor que rtnosig bajas rpg rd 1 0x00000001 El registro rd se pone a uno rpg rd 0 0 else Si Yrsnosigno no es menor que rtnosigno rpg rd 1 0x00000000 El registro rd se pone a cero rpg rd 0 0 else Si las partes altas son igual a cero Ap ndice II C digo fuente del simulador P g 253 Simulador de instrucciones del microprocesador MIPS R4000 void S if rsnosigno lt rtnosigno Si rsnosigno es menor que rtnosigno rpg rd 1 0x00000001 El registro rd se pone a uno rpg rd 0 0 else Si rsnosigno no es menor que rtnosigno rpg rd 1 0x00000000 El registro rd se pone a cero rpg rd 0 0 fin de la instrucci n SLT LTU ULONG instruccion Set On Less Than si e el res a cero ULON rS rt rd regr regr if if el else if 1 contenido del registro rs es menor que el contenido del registro rt ultado se pone a uno en Caso de que no sea menor el resultado se pone los datos tienen que ser sin signo UCHAR rs rt rd Para coger el n mero del registro G regrs regrt unsigned long i
41. AND And El formato de la instrucci n es AND rd rs rt Descripci n de la instrucci n El contenido del registro rs hace la operaci n l gica AND con el contenido del registro rt y el resultado es guardado en el registro rd Operaci n 32 GPR rd GPR rs and GPR rt 64 GPR rd lt GPR rs and GPR rt Excepciones Ninguna ANDI And Immediate El formato de la instrucci n es ANDI rt rs mmediate Descripci n de la instrucci n Al dato inmediato de 16 bits se le hace una extensi n a 32 bits poniendo los bits 16 al 32 a cero o a 64 bits poniendo los bits 16 a 63 a cero depende del modo de Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 97 Simulador de instrucciones del microprocesador MIPS R4000 operaci n y se hace la operaci n l gica AND con el registro rs El resultado se guarda en el registro rt Operaci n 32 GPR rt e 0 immediate and GPR slis 0 64 GPR rt 0 immediate and GPR rs s 0o Excepciones Ninguna BEQ Branch On Equal El formato de la instrucci n es BEQ rs rt offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits El contenido del registro rs y el contenido del registro rt se comparan Si los dos registros son iguales el progr
42. Bit m s alta Palabra 31 24 23 16 15 8 7 0 Sc sc ca ca A CI CI CI CIN rasta ES EA m s baja Figura 3 Ordenaci n de bytes en big endian Cuando est configurado como un sistema en little endian el byte O es siempre el byte menos significativo lo cual es compatible con APX x86 y DEC VAXO La figura 4 muestra esta configuraci n Caracter sticas generales del procesador MIPS R4000 P g 16 Simulador de instrucciones del microprocesador MIPS R 4000 Direcc Direcc Bit m s alta Palabra z m s baja Figura 4 Ordenaci n de bytes en little endian La CPU usa direccionamiento para media palabra halfword palabra word y doble palabra doubleword con las siguientes restricciones de alineaci n e Los accesos a media palabra halfword deben estar alineados en un l mite de byte divisible por dos 0 2 4 e Los accesos a palabras word deben estar alineados en un l mite de byte divisible por cuatro 0 4 8 e Los accesos a dobles palabras doubleword deben alinearse en un l mite de byte divisible por ocho 0 8 16 Las siguientes instrucciones especiales cargan y almacenan palabras que no est n alineadas en l mites de 4 bytes word 8 bytes doubleword LWL LWR SWL SWR LDL LDR SDL SDR Estas instrucciones se usan en pareja para proporcinar el direccionamiento de palabras no alineadas Las figuras 5 y 6 muestran el acceso a una palabra no alineada que tiene direcci n de
43. C digo fuente del simulador P g 294 Simulador de instrucciones del microprocesador MIPS R4000 auxi chartolong dato En auxi metemos el dato convertido a long if Estado RE 0 Si es little endian auxi auxi gt gt desplaz 8 Desplazamos else if Estado RE 1 Si es Big endian auxi auxi gt gt 3 desplaz 8 Desplazamos if desplaz 0 Si desplazamiento es igual a cero if Estado RE 1 Si es Big endian rpg rt 1 rpg rt 1 amp OxFFFFFFOO Hacemos and con parte baja rpg rt 1 srpg rt 1 auxi Hacemos or de auxi con parte baja else if Estado RE 0 rpg rt 1 auxi En parte baja metemos auxi else if desplaz 1 Si desplazamiento es igual a uno if Estado RE 1 rpg rt 1 1 rpg rt 1 OxFFFF0000 else if Estado RE 0 rpg rt 1 rpg rt 1 amp 0xFF000000 rpg rt 1 reg rt 1 auxi hacemos la or de auxi con parte baja else if desplaz 2 Si desplazamiento es igual a dos if Estado RE 1 rpg rt 1 rpg rt 1 OxFFO00000 else if Estado RE 0 rpg rt 1 rpg rt 1 amp OxFFFFO0O00 rpg rt 1 rpeg rt 1 auxi Hacemos la or de auxi con parte baja else if desplaz 3 Si desplazamiento es igual a tres if Estado RE 1 rpg rt 1 auxi En parte baja metemos auxi else if Estado RE 0 Si es lit
44. NULL abrimos el fichero para lectura Error Error al acceder a memoria Escribimos mensaje de error fseek pf cont SEEK SET Posicionamos el cursor del fichero en la direcci n indicada por la variable cont for i 0 i lt 12 1 gotoxy 2 4 i printf mm gotoxy 2 3 El cursor de la pantalla va a la posicitn 2 3 for 1 0 lt NUMERO i El for va desde cero hasta NUMERO Ap ndice II C digo fuente del simulador P g 196 Simulador de instrucciones del microprocesador MIPS R4000 if fread 8 car sizeof UCHAR 1 pf 0 lee un dato del fichero Error Error al leer de la memoria imprimimos mensaje if i 16 0 si el contador i es multiplo de 16 printf NAN pasa a la siguiente linea printf 04X cont escribe la direcci n en la que est printf 02X car escrib l byte correspondiente en pantalla if cont 0xFFFE break cont incrementa la variable cont fclose pf cerramos el fichero void Ver CP void Esta funci n visualiza el contador de programa por pantalla gotoxy 33 22 Nos posicionamos printf PC Vemos el registro PC printf 081X rpg 34 0 Imprimimos la parte alta del registro printf 081X rpg 34 1 Imprimimos la parte baja del registro void Ver registros int nreg Pasamos como par me
45. Pedimos longitud de dato gotoxy 7 19 print 1 1 gt 32 bits 2 gt 64 bits gotoxy 29 17 do Ap ndice II C digo fuente del simulador P g 210 Simulador de instrucciones del microprocesador MIPS R4000 tecla getch while tecla 1 amp amp tecla 2 amp amp tecla 27 switch tecla case 1 limpia 2 17 56 20 gotoxy 2 17 printf Escribe dato Pide un dato escape leeinstr amp menorpeso lee 32 bits if escape 0 return 0 Si ha pulsado escape Se sale de la funci tn rpg registro 1 menorpeso Se guarda en el registro break case 2 limpia 2 17 56 20 gotoxy 2 17 printf 32 bits mayor peso Pide bits mayor peso escape leeinstr 8mayorpeso if escape 0 return 0 Si ha pulsado escape Se sale de la funcitn gotoxy 2 18 printf 32 bits menor peso Pide bits menor peso escape leeinstr 8menorpeso if escape 0 return 0 Si ha pulsado escape Se sale de la funcitn rpg registro 0 mayorpeso Se guarda en el registro rpglregistrol 1 menorpeso break Case 27 return 0 if registros 0 Ver registros 0 else if registros Ver registros 16 gotoxy 2 20 Visualizamos los registros printf Desea modificar otro S N gt do resp toupper getch lee tecla y la pasa a may sculas while resp S amp amp resp N amp amp resp
46. RE 0 Si es little endian datomenorpeso chartolong doble0 Datomenorpeso metemos doble0 datomayorpeso chartolong doble1 Datomayorpeso metemos doblel if desplaz 0 Si el desplazamiento es igual a cero rpg rt 0 datomayorpeso En parte alta metemos datomayorpeso rpg rt 1 datomenorpeso En parte baja metemos datomenorpeso else if desplaz 1 Si desplazamiento es igual a uno l auxi datomayorpeso gt gt 8 En auxi metemos datomayorpeso desplazado rpg rt 0 reg rt 0 amp 0xFF000000 Hacemos and con parte alta datomenorpeso datomenorpeso gt gt 8 Desplazamos datomenorpeso 8 bits datomayorpeso datomayorpeso lt lt 24 Desplazamos hacia izq 24 bits rpg rt 1 datomenorpeso datomayorpeso Hacemos or de ambas rpg rt 0 reg rt 0 auxi Hacemos or de parte alta y auxi else if desplaz 2 Si desplazamiento es igual a dos 1 auxi datomayorpeso gt gt 16 En auxi metemos datomayorpeso desplazado rpg rt 0 rpg rt 0 amp OxFFFFOOOO Hacemos and con parte alta datomenorpeso datomenorpeso gt gt 16 Desplazamos datomenor peso 16 bits datomayorpeso datomayorpeso lt lt 16 Desplazamos 16 bits hacia la izq rpg rt 1 datomenorpeso datomayorpeso Hacemos or de ambas rpg rt 0 reg rt 0 auxi Hacemos or de parte alta y auxi else if desplaz 3 Si desplazamiento es igual a tres auxi datomayorpeso gt gt 24 En auxi metemos dat
47. Segunda mitad e RF B squeda de registros e EX Ejecuci n e DF B squeda de datos Primera mitad e DS B squeda de datos Segunda mitad e TC Chequeo de etiqueta e WB Post escritura Write back IF B squeda de la instrucci n Primera mitad Durante el estado IF ocurre lo siguiente e La l gica de salto selecciona una direcci n de instrucci n y la b squeda en la cach de instrucciones comienza e El TLB de instrucciones ITLB comienza la traducci n de direcci n virtual a f sica IS B squeda de la instrucci n Segunda mitad Durante es estado IS la b squeda en la cach de instrucciones y la traducci n de direcci n virtual a f sica se completan RF B squeda de registros Durante el estado RF ocurre lo siguiente e El decodificador de instrucciones IDEC decodifica la instrucci n e La etiqueta de la cach de instrucciones se compara con el n mero de marco de p gina obtenido del ITLB e Algunos operandos requeridos se cogen de los registros EX Ejecuci n Durante el estado EX ocurre un de los siguientes puntos e La ALU Unidad aritm tico l gica realiza la operaci n aritm tica o l gica para instrucciones de registro a registro Caracter sticas generales del procesador MIPS R4000 P g 54 Simulador de instrucciones del microprocesador MIPS R 4000 e La ALU calcula la direcci n virtual para instrucciones de carga y almacenamiento e La ALU determina si la condici
48. ULONG instruccion Move to LO El contenido del registro rs se carga en el registro especial LO UCHAR rs Para guardar el nfmero de registro rs Campo RS instruccion Cogemos el campo rs de la instrucci n if Estado UX 0 para 32 bits rpg 33 1 rpg rs 1 Parte baja de rs se met n parte baja de LO else if Estado UX 1 para 64 bits rpg 33 0 rpg rs 0 Parte alta de rs se met n parte alta de LO rpg 33 1 rpg rs 1 Parte baja de rs se met n parte baja de LO Fin de la instrucci n MTLO void NOR ULONG instruccion Esta instrucci n lo que hac s hacer la operaci tn NOR l gica de los re gistros rs y rt y el resultado se guarda en el registro rd UCHAR rs rt rd Para coger el n mero del registro ULONG auxi 1 2 variable auxiliar rs Campo RS instruccion Cogemos campo rs de la instrucci n rt Campo RT instruccion Cogemos campo rt de la instrucci n rd Campo RD instruccion Cogemos campo rd de la instrucci n if Estado UX 0 Para 32 bits auxi 0 1 rpg rs 1 1 rpg rt 1 11 Hacemos la or del reg rs y rt rpg rd 1 auxi 0 1 OXFFFFFFFF hacemos la xor de auxi y OxXFFFFF else if Estado UX 1 Para 64 bits auxi 0 1 rpg rs 1 rpg rt 1 Or del reg rs y rt parte baja rpg rd 1 auxi 0 1 OXFFFFFFFF Xor de auxi y OxXFFFFFFFF auxi 0 0 rpg rs 0 rpg rt 0 Or del reg rs y rt parte al
49. amp amp destino gt 65535 destino lt 0 Si se sale l gotoxy 30 23 printf Direccitn fuera de rango else if destino 4 0 Si la direcci n no es m ltiplo de 4 General_Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango de direcc y no hay error de direcc fseek pf destino SEEK SET Nos posicionamos en el fichero memoria for 1 0 1 lt 4 1i if Estado RE 0 Si es little endian J S 15 else if Estado RE 1 Si es big endian j i if fread amp dato j sizeof UCHAR 1 p 0 Cogemos 4 bytes Error Error al acceder a memoria auxi chartolong dato Metemos el dato en auxi lo convertimos a long rpg rt 1 auxi En la parte baja del reg rt metemos auxi auxi auxi gt gt 31 Desplazamos 31 bits hacia derecha para ver signo if auxi 0 Si auxi es distinto de cero rpg rt 0 0xFFEFFEFE La parte alta del reg dest se pone a unos else if auxi 0 Si auxi es igual a cero rpg rt 0 0 La parte alta del reg destino se pone toda a ceros fin de la instruccitn LW void LWL ULONG instruccion Load Word Left Esta instrucci n puede usarse en combinaci n con la instrucci n LWR para cargar un registro con cuatro bytes consecutivos desde memoria cuando los bytes atraviesan el limite de palabra LWL c
50. cuando los bytes atraviesan un l1 mite de doblepalabra Carga la parte derecha del registro con la parte apropiada de orden bajo de la doble palabra UCHAR rt base desplaz aca base es el campo de rs desplazamiento y acarreo signed long int off0 offset dest0 destino parte alta y baja de off y despl ULONG datomenorpeso datomayorpeso auxi Dato de mayor y menor peso y auxiliar UCHAR doble0 4 doble1 4 Para coger los bytes de la memoria int 1 3 Estas variables se utilizar n como ndices Ap ndice II C digo fuente del simulador P g 303 Simulador de instrucciones del microprocesador MIPS R4000 rt Campo RT instruccion Cogemos el campo rt de la instrucci n base Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el campo offset de la instr auxi offset En auxi metemos el contenido de la variable offset auxi auxi gt gt 15 Se desplaza 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Se hace una extensi n con unos off0 OxFFFFFFFF La parte alta se pone todo a unos else if auxi 0 Si auxi es igual a cero off0 0 La parte alta se pone todo a ceros destino rpg base 1 offset Hacemos registro base offset dest0 rpgl base 0 off0 Hacemos registro base off0 parte alta aca acarreo rpg base 1 offset Miramo
51. desplaz 7 Si desplazamiento es cuatro cinco seis siete for 1 0 i lt desplaz 4 1 1 j desplaz 4 i if fwrite 8 doble0 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria for i 0 i lt 4 i j 3 1 if fwrite 8 doblel 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria Ap ndice II C digo fuente del simulador P g 319 Simulador de instrucciones del microprocesador MIPS R4000 if Estado RE 1 si es big endian reg doble0 lontocar rpg rt 0 Metemos en doble0 la parte alta del doblel lontocar rpg rt 1 Convertimos un long a array de caracteres fseek pf destinotdesplaz SEEK SET Nos situamos en el fichero if desplaz 0 desplaz 1 desplaz 2 desplaz 3 Si desplazamiento es cero uno dos tres for 1 0 1 lt 4 1 j 1 if fwrite 8 doble0 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria for i 0 i lt 4 desplaz i J51 if fwrite 8 doblel 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria else if desplaz 4 desplaz 5 desplaz 6 desplaz 7 Si desplazamiento es cuatro cinco seis siete for i 0 i
52. if desplaz 0 Si el desplazamiento es cero datomenorpeso datomenorpeso lt lt 24 Desplazamos 24 bits hacia izq rpg rt 0 rpg rt 0 amp Ox00FFFFFF Hacemos la and en parte alta rpg rt 0 reg rt 0 datomenorpeso Hacemos or con datomenorp else if desplaz 1 Si el desplazamiento es uno datomenorpeso datomenorpeso lt lt 16 Se desplaza 16 bits hacia la izq rpg rt 0 rpg rt 0 amp 0x0000FFFF Hacemos la and en parte alta rpg rt 0 rpg rt 0 datomenorpeso Hacemos or con datomenorp else if desplaz 2 Si el desplazamiento es dos datomenorpeso datomenorpeso lt lt 8 Desplazamos 8 bits hacia la izq rpg rt 0 reg rt 0 amp 0x000000FF Hacemos la and en parte alta rpg rt 0 reg rt 0 datomenorpeso hacemos la or con datomenorp Ap ndice II C digo fuente del simulador P g 301 Simulador de instrucciones del microprocesador MIPS R4000 else if desplaz 3 rpg rt 0 datomenorpeso Si desplaz 3 met todo else if desplaz 4 Si desplazamiento es igual a cuatro auxi datomenorpeso lt lt 24 En auxi metemos datomenorpeso desp 24 bits rpg rt 1 rpg rt 1 amp Ox00FFFFFF Hacemos la and en parte baja datomenorpeso datomenorpeso gt gt 8 Desplazamos 8 bits hacia la derecha datomayorpeso datomayorpeso lt lt 24 Desplazamos 24 hacia la izq rpg rt 0 datomenorpeso datomayorpeso hacemos or de uno y otro rpg rt
53. immediate1s immediate s o Excepciones Reserved instruction exception En modo 32 bits DADDU Doubleword Add Unsigned El formato de la instrucci n es DADDU rd rs rt Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 117 Simulador de instrucciones del microprocesador MIPS R4000 Descripci n de la instrucci n El contenido del registro rs y el contenido del registro rt se suma para formar el resultado que se guarda en el registro rd No ocurre Integer overflow exteption bajo ninguna circunstancia La nica diferencia entre esta instrucci n y la instrucci n DADD es que DADDU nunca causa una Integer overflow exception Esta operaci n est definida solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 GPR rd lt GPR rs GPR rt Excepciones Reserved instruction exception En modo 32 bits DDIV Doubleword Divide El formato de la instrucci n es DDIV rs rt Descripci n de la instrucci n El contenido del registro rs se divide por el contenido del registro rt tratando ambos operandos como valores en complemento a dos No ocurre ning na Integer overflow excepci n y el resultado de esta operaci n es indefinido cuando el divisor es cero Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 118 Simu
54. instruccion Se convierte el long en 4 bytes if escape 0 si no se ha pulsado escape se ha copiado la instr for 3 0 3 lt 4 3 if Estado RE 0 3i es little endian k 3 3 else if Estado RE 1 Si es big endian k 3 Ap ndice II C digo fuente del simulador P g 199 Simulador de instrucciones del microprocesador MIPS R4000 if fwrite 8 car k sizeof UCHAR 1 pf 0 escribimos en fichero Error Error al escribir en memoria mensaje de error gotoxy x y posicionamos el cursor printf 02X car k imprimimos car cter en pantalla x x 3 sumamos 3 a la x if x 57 si la x ha llegado a 57 x 9 inicializamos otra vez xa 9 yt pasamos a la siguiente linea cuenta cuenta 4 incrementamos cuenta al siguiente byte while escape 0 haz mientras instruccion sea distinto de la cond de parada fclose pf cerramos el fichero return 0 int opcion4 void Esta funci n solo permite visualizar la memoria a partir de la direcci n que nosotros indiquemos ULONG dir int escape limpia 2 17 56 20 Limpia una zona de la pantalla gotoxy 2 17 Se posiciona printf Direccitn Pide direcci n escape leedir 8dir La lee de teclado if escape 0 return 0 Ver memoria dir Muestra la memoria por pantalla return 0 UCHAR lontocar ULONG x Convier
55. la CPU CPU del R 4000 lez i O E E on O 22 I cach D cach Cach primaria g p Q le O Cach Secundaria i i i Tiempo de Acceso Incremento de la m s r pido Capacidad de datos si E Memoria Principal g O gt Disco CD ROM S E Cinta etc 2 a D A Caracter sticas generales del procesador MIPS R4000 P g 41 Simulador de instrucciones del microprocesador MIPS R 4000 Figura 17 Jerarqu a de Memoria El R 4000 tiene dos cach s primarias en el chip una contiene instrucciones la cach de instrucciones y la otra contiene datos la cach de datos Fuera del chip el R 4000 tiene una cach secundaria pero solo en los modelos R40005C y R4000MC OPERACIONES DE LA CACH Las cach s proporcionan un r pido almacenamiento temporal de datos En general el procesador accede a instrucciones datos a trav s de los siguientes procedimientos 1 El procesador a trav s de un controlador de cach en el chip intenta acceder a la siguiente instrucci n dato en la cach primaria 2 El controlador de cach hace un chequeo para ver si esta instrucci n o dato est presente en la cach primaria e Sila instrucci n dato est presente el procesador la coge Esto es lo que se llama un acierto de cach primaria e Si la instrucci n dato no est presente en la cach primaria el controlador de cach debe cogerla de la cach secundaria o de memoria Esto es lo que
56. n de 8 num hex int leedir unsigned long v Lee una direcc de 4 n meros hex int leebyte unsigned char v Lee un byte de 2 n meros hex int leebytedecimal unsigned char v Lee un byte de 2 n meros decimal ULONG multiplicacion ULONG m12 ULONG m11 ULONG m22 ULONG m21 char c hace la multiplicacion de 64 bits por 64 bits ULONG dividir ULONG dividendo0 ULONG dividendo ULONG divisor0 ULONG divisor char car Hace la divisi n de 64 bits entre 64 bits void General Exception void pone el registro de estado a modo kernel Ap ndice II C digo fuente del simulador P g 186 Simulador de instrucciones del microprocesador MIPS R4000 Aqu empieza la declaracitn del 4000 A partir de aqui son de tabla0 void ADD ULONG instruccion void ADDU ULONG instruccion void AND ULONG instruccion void DADD ULONG instruccion void DDIV ULONG instruccion void DDIVU ULONG instruccion void DIV ULONG instruccion void DIVU ULONG instruccion void DMULT ULONG instruccion void DMULTU ULONG instruccion void DSLL ULONG instruccion void DSLLV ULONG instruccion void DSLL32 ULONG instruccion void DSRA ULONG instruccion void DSRAV ULONG instruccion void DSRA32 ULONG instru
57. n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits La direcci n de la instrucci n siguiente a la instrucci n siguiente a la instrucci n de salto se guarda en el registro 31 Si el Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 107 Simulador de instrucciones del microprocesador MIPS R4000 contenido del registro rs es mayor o igual que cero el programa salta a la direcci n que se ha formado de la suma anterior Operaci n 32 target offset s f offset 0 condicion lt GPR rs gt 0 GPR 31 E PC 8 if condicion then PC E PC target endif 64 target Oreste offset 0 condicion lt GPR rs gt 0 GPR 31 E PC 8 if condicion then PC E PC target endif Excepciones Ninguna BGEZALL Branch On Greater Than Or Equal To Zero And Link Likely El formato de la instrucci n es BGEZALL r5s offset Descripci n de la instrucci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 108 Simulador de instrucciones del microprocesador MIPS R4000 Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits La direcci n de la instrucci n siguiente a la instrucci n siguiente a la instrucci n de salto se gu
58. n de las instrucciones implementadas en el simulador P g 175 Simulador de instrucciones del microprocesador MIPS R4000 Operaci n 32 if GPR rs gt immediate s immediate s o then TrapException endif 64 if GPR rs gt immediates immediate s o then TrapException endif Excepciones Trap exception TGEIU Trap If Greater Than Or Equal Immediate Unsigned El formato de la instrucci n es TGEIU rs immediate Descripci n de la instrucci n El dato inmediato de 16 bits con su extensi n de signo se compara con el contenido del registro rs Considerando ambas cantidades como enteros sin signo si el contenido del registro rs es mayor que o igual al dato inmediato con su extensi n de signo ocurre una Trap exception Operaci n 32 if O GPR rs gt 0 immediate s immediate s 0 then TrapException endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 176 Simulador de instrucciones del microprocesador MIPS R4000 64 if O GPR rs gt 0 immediate s immediate s 0 then TrapException endif Excepciones Trap exception TGEU Trap If Greater Than Or Equal Unsigned El formato de la instrucci n es TGEU rs rt Descripci n de la instrucci n El contenido del registro rt se compara con el contenido del registro rs Considerando ambas cantidades como enteros sin signo si el contenido del registro
59. offsetis offset s GPR base temp E GPR rtl gt 7 0 direcci n de memoria lt temp Excepciones Ninguna SD Store Doubleword El formato de la instrucci n es SD rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar la direcci n a la que vamos a acceder El contenido del registro rt se almacena a partir de la direcci n de memoria especificada Si alguno de los tres bits menos significativos de la direcci n a la que vamos a acceder es distinto de cero ocurre una Address error exception Esta operaci n est definida solo para modo 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 154 Simulador de instrucciones del microprocesador MIPS R4000 Operaci n 64 direccion offset s5 f loffset s 0 GPR base temp GPR rt direcci n de memoria lt temp Excepciones Address error exception Reserved instruction exception En modo usuario 32 bits o supervisor 32 bits SDL Store Doubleword Left El formato de la instrucci n es SDL rt offset base Descripci n de la instrucci n Esta instrucci n puede usarse con la instrucci n SDR para almacenar el contenido de un registro en ocho bytes de memoria consecutivos
60. printf else if General Exception gotoxy 30 23 printf Address else fseek pf destino S dest0 0 II a 30 23 Direcci n destino 4 y F a Si no se sal Estado RE Error exception pmu Si es big endian j sizeof UCHAR 1 pf 0 Escribe en fichero acceder a memoria 1 Para 64 bits est0 0 amp amp destino gt 65535 destino lt 0 Si se sale fuera de rango 0 Si no es m ltiplo de 4 Error de direccionamiento de e del rango y no es m ltiplo 4 EK S ET Nos situamos en el fichero memoria for 1 0 1 lt 4 1 ET j 3 i else if j i mu Estado RE if fwrite amp dato Error Error al Fin de la instruc d SWL ULONG instrucc UCHAR rt base desplaz dato NULL aca Estado RE Si little endian es pmu 1 Si es big endian j sizeof UCHAR 1 pf 0 Escribe en memoria acceder a memoria ci n SW ion Store Word Left base es el campo de rs signed long int off0 offset dest0 destino Parte alta y baja de off y des U 1 oR LONG auxi datoalmac nt i j Se van a u t Campo RT instr ase Campo RS ins ffset instruccion amp uxi offset En a uxi auxi gt gt 15 Variable auxiliar y dato almacenado tilizar
61. que trata las excepciones basado en el resultado de una comparaci n Caracter sticas generales del procesador MIPS R4000 P g 8 Simulador de instrucciones del microprocesador MIPS R 4000 Estas instrucciones tienen los formatos R Type los operandos y el resultado son registros y I Type un operando es un valor inmediato de 16 bits A continuaci n vamos a mostrar la lista de instrucciones de la CPU Instrucciones de Carga y Almacenamiento OpCode Descripci n LB Load Byte LBU Load Byte Unsigned LH Load Halfword LHU Load Halfword Unsigned LW Load Word LWL Load Word Left LWR Load Word Right SB Store Byte SH Store Halfword SW Store Word SWL Store Word Left SWR Store Word Right Instrucciones Aritm ticas dato inmediato Opcode Descripci n ADDI Add Immediate ADDIU Add Immediate Unsigned SLTI Set on Less Than Immediate SLTIU Set on Less Than Immediate Unsigned ANDI AND Immediate ORI OR Immediate XORI Exclusive Or Immediate LUI Load Upper Immediat Caracter sticas generales del procesador MIPS R4000 P g 9 Simulador de instrucciones del microprocesador MIPS R 4000 Instrucciones Aritm ticas 3 operandos R Type OpCode Descripci n ADD Add ADDU Add Unsigned SUB Subtract SUBU Subtract Unsig
62. r3 que hace la OR l gica de los registros r5 y r3 y el resultado se guarda en el registro r7 El c digo que corresponde a esta instrucci n concreta es 00A33825 que es el que tenemos que introducir en memoria Manual de Usuario del simulador de instrucciones MIPS R4000 P g 74 Simulador de instrucciones del microprocesador MIPS R4000 MIPS R4000 RO D0000000000000000 R1 0000000000000000 R 2 D0000000000000000 R3 0000000000000000 R4 0000000000000000 R5 00000000000000OQ R6 0000000000000000 R7 0000000000000000 R3 0000000Q000000OQ R9 0000000000000000 R10 0000000000000000 R11 0000000000000000 R12 0000000000000000 Escribe una instrucci n completa Salir Esc R13 0000000000000000 0010 00A3382_ R14 0000000000000000 R15 0000000000000000 gt 16 31 HT 0000000000000000 PC 0000000000000000 LO 0000000000000000 Figura 3 En la figura 4 vemos que despu s de escribir la instrucci n sta se mete en la memoria y el simulador nos pide la siguiente instrucci n Las instrucciones se pueden meter en memoria de dos formas little endian y big endian La diferencia entre las dos es la ordenaci n de los bytes en memoria En este ejemplo el simulador est configurado en little endian Como no vamos a meter ninguna otra instrucci n pulsaremos la tecla escape para salir de la opci n 1 MIPS R4000 RO 0000000000000000 R1 0000000000000000 R2 0000000000000000 R3 0000000000000000 R4 00000000
63. rpg 3 rpg 3 rpg 3 3 c 3 3 2 2 anasa rpg if reg 33 1 rpg 33 1 1 hacemos el positivo en complemento a dos rpg 33 0 rpeg 33 0 invertimos todos los bits if rpg 33 1 1 0 rpg 33 0 1 si hay acarreo al sumar a regrtl 1 inc regrt 0 reg 32 1 rpg 32 1 1 hacemos el positivo en complemento a dos rpg 32 0 rpg 32 0 invertimos todos los bits if rpg 32 1 11 0 rpg 32 0 1 si hay acarreo al sumar a regrtl 1 inc regrt0 else if rsnosigno lt rtnosigno rpg 33 0 0 En el cociente hay un cero rpg 33 1 0 rpg 32 0 rpg rs 0 El resto es igual que el dividendo rpg 32 1 rpg rs 1 fin de la instrucci n DDIV void DDIVU ULONG instruccion Doubleword Divide Unsigned Esta instrucci n hace la divisi tn de 64 bits sin signo de los registros rs y rt El cociente es guardado en el registro LO y el resto es guardado en el registro HI Para 32 se produce una Reserved Instruction Exception ULONG auxi cociente resto variable auxiliar cociente y resto de div ULONG regrs regrt UCHAR rs rt indican el n mero de registro rs Campo RS instruccion cogemos el campo rs de la instrucciftn rt Campo RT instruccion cogemos el campo rt de la instrucciftn if Estado UX 0 para 32 bits Ap ndice IT C digo fuente del simulador P
64. 1 gt 0000 X 76 31 29 X X X X 2 gt 0000 X X 76 31 X X X X 3 gt 0000 X X X 76 X X X X Para Little Endian Registro rt XX XX XX XX 76 31 29 2A Memoria Despla DEP Direcciones de memoria Z 0 gt 0000 76 IX X X X X X X 1 gt 0000 31 76 X X X X X X 2 gt 0000 29 31 76 X X X X X Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 171 Simulador de instrucciones del microprocesador MIPS R4000 3 gt 0000 2A 29 31 76 X X X X X Lo que hab a en memoria antes de SWL Excepciones Ninguna SWR Store Word Right El formato de la instrucci n es SWR rt offset base Descripci n de la instrucci n Esta instrucci n puede usarse con la instrucci n SWL para almacenar el contenido de un registro en cuatro bytes de memoria consecutivos cuando los bytes cruzan el l mite de una palabra Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario Se almacenar n de uno a cuatro bytes dependiendo del byte de comienzo especificado Operaci n Tenemos una palabra word que es 7631292A Para Big Endian Registro rt XX XX XX XX 76 31 29 2A Memoria Despla Dir Direcciones de
65. 1 temp Metemos tempo en el contador de programa Fin de la instruccitn J void JAL ULONG instruccion Jump And Link ULONG target Para el campo target signed long int temp Variable temporal target instruccion amp 0x03FFFFFF Cogemos el campo target de la instr temp target lt lt 2 Desplazamos 2 bits hacia la izquierda if Estado UX 0 para 32 bits if temp gt 65535 temp lt 0 temp porque es la direcci n completa Ap ndice II C digo fuente del simulador P g 323 Simulador de instrucciones del microprocesador MIPS R4000 gotoxy 30 23 printf Direccitn fuera de rango else si no se sale del rango de direcciones rpg 31 1 rpg 34 1 8 Metemos direcc de sig instr al delay slot temp temp 4 porque al salir de esta funci n se incrementa en 4 rpg 34 1 temp En el CP metemos temp else if Estado UX 1 para 64 bits if temp gt 65535 temp lt 0 temp porque es la direcci n completa gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones rpg 31 1 rpg 34 1 8 Metemos direcc de sig instr al delay slot temp temp 4 porque al salir de esta funci n se incrementa en 4 rpg 34 1 temp En CP metemos temp Fin de la instruccitn JAL void JALR ULONG instruccion Jump And Link Register El programa salta a la dir
66. Campo RT instruccion cogemos el n fmero de registro rt cd Campo RD instruccion cogemos el n fmero de registro rd regrsO rpg rs 0 metemos la parte alta del reg rs en regrs0 regrs1 rpglrs 1 metemos la parte baja del reg rs en regrsl regrt0 rpg rt 0 metemos la parte alta del reg rt en regrtO regrti rpg rt 1 metemos la parte baja del reg rt en regrtl regrd0 regrs0O regrt0 sumamos la parte alta de los reg rs rt regrdl regrsl regrt1 sumamos la parte baja de los reg rs rt aca acarreo regrs1l regrt1 miramos si hay acarreo en la parte baja if aca 1 regrd0 si hay acarreo incrementamos en uno la parte alta auxrs0O regrs0 en auxrs0 metemos lo que hay en regrs0 auxrt0O regrt0 en auxrt0 metemos lo que hay en regrtO auxrd0 regrd0 en auxrt0 metemos lo que hay en regrdO auxrs0 auxrs0 gt gt 31 desplazamos a la derecha 31 bits auxrtO0 auxrt0 gt gt 31 para ver el valor del bit 64 de los tres auxrd0 auxrd0 gt gt 31 registros rs rt rd y as sabemos si hay overflow if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits if auxrs0 auxrt0 amp amp auxrd0 auxrs0 la nica condici n para que haya overflow es que los bit de signo de los dos operandos sean
67. Eq to Zero BLTZAL Branch on Less Than Zero And Link BGEZAL Brnch on Less Thn Zro And Link Likely Instrucciones de desplazamiento de bits OpCode Descripci n SLL Shift Left Logical SRL Shift Right Logical SRA Shift Right Arithmetic SLLV Shift Left Logical Variable SRLV Shift Right Logical Variable SRAV Shift Right Arithmetic Variable Manual de Usuario del simulador de instrucciones MIPS R4000 P g 63 Simulador de instrucciones del microprocesador MIPS R4000 Extensiones a ISA Instrucciones de carga y almacenamiento OpCode Descripci n LD Load Doubleword LDL Load Doubleword Left LDR Load Doubleword Right LWU Load Word Unsigned SD Store Doubleword SDL Store Doubleword Left SDR Store Doubleword Right Extensiones a ISA Instrucciones Aritm ticas dato inmediato OpCode Descripci n DADDI Doubleword Add Immediate DADDIU Doubleword Add Immediate Unsigned Extensiones a ISA Instrucciones de Multiplicaci n y Divisi n OpCode Descripci n DMULT Doubleword Multiply DMULTU Doubleword Multiply Unsigned DDIV Doubleword Divide DDIVU Doubleword Divide Unsigned Manual de Usuario del simulador de instrucciones MIPS R4000 P g 64 Simulador de instrucciones del microprocesador MIPS R4000 Extensiones a ISA Instrucciones de salto relativo OpCode Descripci
68. Instrucciones de Multiplicaci n y Divisi n OpCode Descripci n DMULT Doubleword Multiply DMULTU Doubleword Multiply Unsigned DDIV Doubleword Divide DDIVU Doubleword Divide Unsigned Extensiones a ISA Instrucciones de salto relativo OpCode Descripci n BEOL Branch on Equal Likely BNEL Branch on Not Equal Likely BLEZL Branch on Less Than or Equal to Zro Likely BGTZL Branch on Greater Than Zero Likely BLTZL Branch on Less Than Zero Likely BGEZL Brnch on Greatr Thn or Equal to Zro Likely BLTZALL Branch on Less Than Zero And Link Likely BGEZALL Branch on Greater Than or Equal to Zero And Link Likely BCzZTL Branch on Coprocessor True Likely BCzZFL Branch on Coprocessor False Likely Caracter sticas generales del procesador MIPS R4000 P g 13 Simulador de instrucciones del microprocesador MIPS R 4000 Extensiones a ISA Instrucc Aritm ticas 3 operandos R Type OpCode Descripci n DADD Doubleword Add DADDU Doubleword Add Unsigned DSUB Doubleword Subtract DSUBU Doubleword Subtract Unsigned Extensiones a ISA Instrucciones de desplazamiento de bits
69. MIPS R4000 Ver_registros Ver_registros Cada opci n del switch contiene un procedimiento que ejecuta la opci n exceptuando las opciones 5 y Cada uno de estos procedimientos hace llamadas a otros procedimientos En los cuadros siguientes vamos a ver las llamadas que se hacen dentro de cada procedimiento Descripci n del dise o del simulador de instrucciones P g 91 Simulador de instrucciones del microprocesador MIPS R4000 METER_INSTRUCC Limpia Limpia una zona de la pantalla Leedir Lee direcci n desde teclado Ver_memor la Visualiza la memoria por pantalla Leeinstr Lee instrucci n desde teclado Lontocar pasa un dato de 32 bits a 4 datos de 8 bits INTROD_DATOS Limpia Limpia una zona de la pantalla Leedir Lee direcci n desde teclado Ver_memor la Visualiza la memoria por pantalla Leebyte Lee byte desde teclado COGER_INSTR Limpia Limpia una zona de la pantalla Leedir Lee direcci n desde teclado Pon_Estado Pone en pantalla el estado del micro Chartolong Pasa 4 datos de 8 bits a uno de 32 bits Cod_op Coge el c d de operaci n de la instrucci n Decodificaci n INSTRUCCI N Ejecuci n De instr Ver_Registros Visualiza los registros Ver_Cp Visualiza el contador de Programa INSTRUCCI N Campo Coge de la instr el campo indicado Estado Devuelve estado de micro 32 o 64 bits r Acarreo Mira si hay acarreo entre bits 31 y 32 l l Multiplicaci n H
70. Operaci n 32 64 temp lt GPR rs PC lt temp Excepciones Address Error Exception Error de direccionamiento LB Load Byte El formato de la instrucci n es LB rt offset base Descripci n de la instrucci n En el desplazamiento de 16 bits se hace una extensi n de signo y se suma a el contenido del registro base para formar la direcci n a la que vamos a acceder Al byte localizado en la direcci n de memoria especificada se le hace una extensi n de signo y se carga en el registro rt Operaci n 32 direccion offset loffsetis 0 GPR base temp byte de la direcci n especificada GPR rt temp temp 64 direccion tofEsetre loffset is 0 GPR base temp lt byte de la direcci n especificada GPR rt lt temps temp Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 134 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Ninguna LBU Load Byte El formato de la instrucci n es LBU rt offset base Descripci n de la instrucci n En el desplazamiento de 16 bits se hace una extensi n de signo y se suma a el contenido del registro base para formar la direcci n a la que vamos a acceder Al byte localizado en la direcci n de memoria especificada se le hace una extensi n con ceros y se carga en el registro rt Operaci n 32 direccion 4 offset is loffsetis 0 GPR bas
71. P g 114 Simulador de instrucciones del microprocesador MIPS R4000 64 Excepciones if condicion then PC E PC target else se anula la siguiente instr endif target lotfseti offset 0 condicion GPR rs lt 0 if condicion then PC E PC target else se anula la siguiente instr endif Ninguna DADD Doubleword Add El formato de la instrucci n es DADD rd rs rt Descripci n de la instrucci n El contenido del registro rs y el contenido del registro rt se suma para formar el resultado que se guarda en el registro rd Ocurre una Integer overflow exception si hay un desbordamiento en complemento a dos El registro destino no se modifica cuando ocurre una Integer overflow exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 115 Simulador de instrucciones del microprocesador MIPS R4000 Esta operaci n est definida solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 GPR rd lt GPR rs GPR rt Excepciones Integer overflow exception Reserved instruction exception En modo 32 bits DADDI Doubleword Add Immediate El formato de la instrucci n es DADDI rt rs i mmediate Descripci n de la instrucci n En el dato inmediato de 16 bits se hace una extensi n de signo y se suma con el cont
72. RT OFFSET BASE 100010 LWR RT OFFSET BASE 100110 LWU RT OFFSET BASE 100111 SB_RT OFFSET BASE 101000 SD RT OFFSET BASE 111111 SDL RT OFFSET BASE 101100 SDR RT OFFSET BASE 101101 SH RT OFFSET BASE 101001 SW RT OFFSET BASE 101011 SWL RT OFFSET BASE 101010 SWR RT OFFSET BASE 101110 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 71 Simulador de instrucciones del microprocesador MIPS R4000 INSTRUCCION C DIGO DE OPERACION COP BGEZ RS OFFSET 00001 BGEZAL RS OFFSET 10001 BGEZALL RS OFFSET 10011 BGEZL RS OFFSET 00011 BLTZ RS OFFSET 00000 BLTZAL RS OFFSET 10000 BLTZALL RS OFFSET 10010 BLTZL RS OFFSET 00010 K 26 25 21 20 16 15 0 31 REGIMM rs COP immediate 000001 6 5 5 16 INSTRUCCION C DIGO DE OPERACION COP TEQI_RS INMEDIATO 01100 TGEI RS INMEDIATO 01000 TGEIU RS INMEDIATO 01001 TLTI RS INMEDIATO 01010 TLTIU_ RS INMEDIATO 01011 TNEI RS INMEDIATO 01110 31 26 25 0 6 26 INSTRUCCION C DIGO DE OPERACION COP J TARGET 000010 JAL TARGET 000011 ERET gt C digo de la instrucci n 42000018 c digo a introducir en el simulador Manual de Usuario del simulador de instrucciones MIPS R4000 P g 72 Simulador de instrucciones del microprocesador MIPS R4000 EXPLICACI N DE LAS OPCIONES DEL MEN PRINCIPAL A partir de aqu se van a explicar todas y cada una de las opcione
73. Sumamos offset al CP Fin de la instrucci n BLTZ Ap ndice II C digo fuente del simulador P g 264 Simulador de instrucciones del microprocesador MIPS R4000 void BLTZL ULONG instruccion Branch On Less Than Zero Likely UCHAR rs Para el nfmero de registro signed long int offset Para el desplazamiento ULONG auxi condicion Para variable auxiliar y condicitn rs Campo RS instruccion Cogemos el campo rs de la instruccitn offset instruccion 0x0000FFFF Cogemos el campo offset de instrucci tn offset offset lt lt 2 Desplazamos dos bits hacia la izquierda auxi offset En auxi metemos el contenido de offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCO0O00 Hacemos la extensi fn de signo con unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 Si el bit 32 es distinto de cero rpg 34 1 rpg 34 1 offset Sumamos al CP el offset else rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 if condicion 0 Si el bit 64 es distinto de cero rpg 34 1 rpg 34 1 offset Sumamos al CP el offset else rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction Fin de la instrucci tn BLTZL void BLTZ
74. UX 1 Para 64 bits if rpg rs 0 0 inme0 0 Si la parte alta es distinta de cero if rpg rs 0 inme0 y son distintas entre ellas regrs rpg rs 0 en regrs metemos la parte alta del reg rs if regrs lt inme0 Si regrs es menor que inme0 rpg rt 1 0x00000001 La parte baja del reg rt se pone a uno Ap ndice II C digo fuente del simulador P g 257 Simulador de instrucciones del microprocesador MIPS R4000 rpg rt 0 0 La parte alta del reg rt se pone a cero else Si regrs no es menor que inme0 rpg rt 1 0x00000000 La parte baja del reg rt se pone a cero rpg rt 0 0 La parte alta del reg rt se pone a cero else if rpglrs 0 inme0 Si son iguales entre ellas if regrs lt inmediato Comparamos las partes bajas rpg rt 1 0x00000001 Se pone a uno la parte baja de rt rpg rt 0 0 Se pone a cero la parte alta de rt else Si regrs no es menor que inmediato rpg rt 1 0x00000000 Se pone a cero la parte baja de rt rpg rt 0 0 Se pone a cero la parte alta de rt else Si la parte alta de los dos datos es cero if regrs lt inmediato Si regrs es menor que inmediato rpg rt 1 0x00000001 La parte baja del reg rt se pone a uno rpg rt 0 0 La parte alta del reg rt se pone a cero else Si regrs no es menor que inmediato rpg rt 1 0x00000000 La parte baja del reg rt se pone a cero rpg rt 0 0
75. Variable auxiliar rs Campo RS instruccion Cogemos el rt Campo RT instruccion Cogemos el if Estado UX 0 Para 32 bits Hacemos la multiplicaci n y guardamos r rpg 32 1 multiplicacion 0 rpglrs 1 0 rpg 33 1 multiplicacion 0 rpglrs 1 0 else if Estado UX 1 Para 64 bits Hacemos la multiplicaci n y guardamos r rpg 32 1 multiplicacion 0 rpg rs 1 0 auxi rpg 32 1 gt gt 31 Vamos a hacer if auxi 0 Si auxi es distinto de c rpg 32 0 0xFFFFFFFE ponemos la pa else if auxi 0 Si auxi es igual a rpg 32 0 0x00000000 ponemos la pa hacemos la multiplicaci n y guardamos r rpg 33 1 multiplicacion 0 rpglrs 1 0 auxi rpg 33 1 gt gt 31 Vamos a hacer 1 if auxi 0 Si auxi es distinto de ce rpg 33 0 0xFFFFFFFE ponemos la pa else if auxi 0 Si auxi es igual a rpg 33 0 0x00000000 ponemos la pa fin de la instrucci n MULTU void ERET ULONG instruccion Exception Re sr sr amp OxFC Limpiamos los dos bits sr sr 0x02 Ponemos en modo usuario gotoxy 2 19 printf Usuario 10d n 64 bits se hace una extensin esultado los registros campo rs de la instruccitn campo rt de la instruccitn esultado en los registros rpg rt 1 BAJAMEDIA rpg rt 1 BAJA esultado en los registros rpg rt 1 BAJAMEDIA la extensi
76. a cero auxi 0x00000000 ponemos todo a ceros rpg rd 0 rpg rt 0 gt gt sa Desplazamos la parte alta sa bits drcha rpg rd 1 rpg rt 1 gt gt sa Desplazamos la parte baja sa bits drcha rpg rd 0 reg rd 0 auxi Hacemos parte alta or auxi rpg rd 1 rpg ra 1 auxi2 Hacemos parte baja or auxi2 fin de la instrucci n DSRA void DSRAV ULONG instruccion Si se ejecuta en 32 bits se produce una reserved instruction excepction En 64 bits puede desplazar de cero a 64 bits hacia la derecha haciendo una extensi n del bit 64 UCHAR rt rd rs sa Para coger los registros y desplazamiento de bits ULONG auxi auxi2 variables auxiliares rs Campo RS instruccion cogemos el campo rs de la instruccion rt Campo RT instruccion cogemos el campo rt de la instrucci n rd Campo RD instruccion cogemos el campo rd de la instrucciftn auxi rpg rs 1 amp 0x0000003F en auxi metemos el desplazamiento de bits sa UCHAR auxi lo guardamos en la variable sa if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 Ap ndice IT C digo fuente del simulador P g 244 Simulador de instrucciones del microprocesador MIPS R4000 printf Reserved Instr exception else if Estado UX 1 Para 64 bits signo If bits bits auxi rpg rt 0
77. a cero rpg rt 0 datomayorpeso En parte alta metemos datomayorpeso rpg rt 1 datomenorpeso En parte baja metemos datomenorpeso else if desplaz 1 Si el desplazamiento es igual a uno auxi datomenorpeso lt lt 8 En auxi metemos datomenorpeso desplazado rpg rt 1 srpg rt 1 amp 0x000000FF Hacemos and con parte baja datomenorpeso datomenorpeso gt gt 24 Desplazamos hacia derecha 24 bits datomayorpeso datomayorpeso lt lt 8 Desplazamos hacia izq 8 bits rpg rt 0 datomenorpeso datomayorpeso Hacemos la or de uno y otro rpg rt 1 reg rt 1 auxi Hacemos la or de menorpeso y auxi else if desplaz 2 Si desplazamiento es igual a dos Ap ndice IT C digo fuente del simulador P g 302 Simulador de instrucciones del microprocesador MIPS R4000 auxi datomenorpeso lt lt 16 En auxi metemos datomenorpeso desplazado rpg rt 1 srpg rt 1 amp 0x0000FFFF Hacemos and con parte baja datomenorpeso datomenorpeso gt gt 16 Desplazamos 16 bits hacia derecha datomayorpeso datomayorpeso lt lt 16 Desplazamos 16 bits hacia izq rpg rt 0 datomenorpeso datomayorpeso Hacemos or de ambas rpg rt 1 srpg rt 1 auxi Hacemos or de menor peso y auxi else if desplaz 3 Si desplazamiento es igual a tres auxi datomenorpeso lt lt 24 En auxi metemos datomenorpeso desplazado rpg rt 1 rpg rt 1 amp 0x00FFFFFF
78. amp amp ejecucion 3 amp amp ejecucion 27 if ejecucion 27 return 0 fflush stdin if ejecucion 3 Si la ejecuci n es igual a breakpoint do limpia 2 17 56 20 limpia zona de la pantalla gotoxy 2 17 Se mueve printf Punto de parada Pide punto de parada escape leedir amp breakpoint Lee punto de parada de teclado if escape 0 Si se ha pulsado escape se sale de la opci n return 0 while breakpointS 4 0 limpia 2 17 56 20 Limpia zona de pantalla gotoxy 18 16 Ap ndice II C digo fuente del simulador P g 201 Simulador de instrucciones del microprocesador MIPS R4000 printf E gotoxy 18 21 printf gotoxy aia 7 printf a gotoxy 2 switch N En caso de que la ejecuci tn case 1 printf Secuencial Sea 1 secuencial break case 2 printf Paralelo Smyk Sea 2 Paralelo break case 3 printf Breakpoint am Sea 3 Breakpoint break Pon_estado Escribe algunos estados del micro para la ejecucicn if pf fopen memoria rb NULL abrimos fichero para lectura Error Error al acceder a memoria while 1 rpg 34 1 final amp amp rpg 34 1 lt final if ejecucion 3 amp amp rpg 34 1 breakpoint break auxiliar rpg 34 1 Cogemos la direcc de inic
79. asume que contiene informaci n v lida Shared Una l nea de cach que est presente en ai Cach Primaria Solo m s de una cach en el sistema es l Secundaria R4000MC shared Una l nea de cach dirty shared contiene informaci n v lida y puede ser Dirty Solo Cach Solo presentada en otra cach Esta l nea de l Shared Secundaria R4000MC cach es inconsistente con la memoria Caracter sticas generales del procesador MIPS R4000 P g 51 Simulador de instrucciones del microprocesador MIPS R 4000 Una l nea de cach clean exclusive contiene informaci n valida y esta l nea Clean Cach Primaria R40005C de cach no est presente en cualquier Exclusive Secundaria R4000MC otra cach La l nea de cach es consistente con la memoria Una l nea de cach dirty exclusive contiene informaci n v lida y no est R4000PC Dirty Cach Primaria presente en cualquier otra cach La R40005C Exclusive Secundaria l nea de cach es inconsistente con la R4000MC memoria Estados de la cach Primaria Cada l nea de cach de datos primaria est en uno de los siguientes estados e Invalid e Shared e Clean exclusive e Dirty exclusive Cada l nea de la cach de instrucciones primaria est en uno de los siguientes estados e Invalid e Valid Estados de la Cach Secundaria Cada l nea de cach secundaria est en uno de los siguientes estados e Invalid e Shar
80. bit EXL otra vez a cero Cuando se restaura el estado y se reinicia la ejecuci n se restaura el valor previo del campo KSU y se pone el bit EXL a 1 Al volver de una excepci n instrucci n ERET el bit EXL se pone a cero Caracter sticas generales del procesador MIPS R4000 P g 31 Simulador de instrucciones del microprocesador MIPS R 4000 LOCALIZACI N DE LOS VECTORES DE EXCEPCI N Las excepciones Reset Soft Reset y NMI tienen el mismo vector de excepci n en una direcci n no cacheable y no mapeable Las direcciones para las dem s excepciones son una combinaci n de un vector desplazamiento offset y una direcci n base Cuando el bit BEV 1 en el registro de estado los vectores est n en direcciones no cacheables y no mapeables Durante una operaci n normal BEV 0 las excepciones normales tienen vectores en espacios de direcci n cacheables La tabla que se muestra a continuaci n ense a el vector de direcci n base para todas las excepciones en modo 64 bits las direcciones en modo 32 bits son los 32 bits de orden bajo por ejemplo la direcci n base para NMI en modo 32 bits es OXBFCO 0000 BEV Excepci n 0 1 Cache Error OxFFFF FFFF A000 0000 OxFFFF FFFF BFCO 0200 Otras OxFFFF FFFF 8000 0000 OxFFFF FFFF BFCO 0200 Reset NMI Soft OxFFFF FFFF BFCO 0000 Reset En la tabla que se muestra a continuaci n podemos ver los desplazamientos de los vectores de excepci n
81. break case 5 do case limpia 2 17 56 20 gotoxy 3 17 printf Resetear el Simulador S N respuesta toupper getch jwhile respuesta S amp amp respuesta N amp amp respuesta 27 if respuesta S ini memoria inicializa toda la memoria a cero ini regs inicializa todos los registros a cero Ver memoria 0000 Vemos memoria a partir de la direcc 0 Ver registros 0 Vemos los registros del cero al 15 Ver CP Vemos el contador de programa break 6 Registros 6 Introducimos datos en los registros 1 30 Ap ndice II C digo fuente del simulador P g 191 Simulador de instrucciones del microprocesador MIPS R4000 break case 7 Reiniciar CP 7 Pone el CP a una direcci n break case 8 configuracion break case 9 creditos muestra por pantalla datos del autor del proyecto break Case if registros 0 controlamos que al pulsar cambie regs registros si registros es cero lo ponemos a uno Ver registros 16 y visualizamos los registros 16 31 else si registros no es cero es uno registros lo ponemos a cero Ver registros 0 visualizamos los registros 0 15 break case S clrscr Borra la pantalla exit 1 Se sale del programa while 1 bucle infinito FIN DEL PROGRAMA PRINCIPAL A partir de aqu voy a empezar a implementar las funcio
82. byte 3 Caracter sticas generales del procesador MIPS R4000 P g 17 Simulador de instrucciones del microprocesador MIPS R 4000 Direcc Bit m s alta Direcc m s baja Figura 5 Direccionamiento de una palabra no alineada Big endian Direcc Bit m s alta Direcc m s baja Figura 6 Direccionamiento de una palabra no alineada Little endian Caracter sticas generales del procesador MIPS R4000 P g 18 Simulador de instrucciones del microprocesador MIPS R 4000 COPROCESADORES CP0 CP2 MIPS ISA define tres coprocesadores De CPO a CP2 e El coprocesador O CP0 est incorporado en el chip de la CPU y soporta el sistema de memoria virtual y el manejo de las excepciones CPO tambi n se llama Coprocesador de control del sistema e El coprocesador 1 CP1 est reservado en el chip para la unidad de coma flotante FPU e El coprocesador 2 CP2 est reservado para definiciones futuras por MIPS Coprocesador de Control del Sistema CP0 CPO traduce las direcciones virtuales a direcciones f sicas y maneja excepciones y transiciones entre los estados de kernel supervisor y usuario CPO tambi n controla el subsistema de cach as como tambi n proporciona facilidades para el control de diagnostico y la recuperaci n de errores Los registros del CPO se muestran en la figura 7 Estos registros son capaces de manipular el manejo de la memoria y el tratamiento de las excepciones de
83. cambio 1 Para hacer el cambio de signo en el resultado final Ap ndice II C digo fuente del simulador P g 330 Simulador de instrucciones del microprocesador MIPS R4000 regrs rpg rs 1 1 El registro rs se queda como est else if regrs 0 amp amp regrt 0 Si los dos registros son positivos regrs rpg rs 1 El registro rs se queda como est regrt rpg rt 1 El registro rt se queda como est cambio 0 No hace falta hacer un cambio de signo en el resultado if Estado UX 0 Para 32 bits Hacemos la multiplicaci n y guardamos el resultado en los registros rpg 32 1 multiplicacion 0 regrs 0 regrt BAJAMEDIA Reg HI rpg 33 1 multiplicacion 0 regrs 0 regrt BAJA Reg LO if cambio 1 Vamos a hacer el cambio de signo al resultado si la variable cambio es igual a uno rpg 33 1 1 rpg 33 1 1 Se hace el complemento a dos rpg 32 11 rpg 321 1 1 Se invierten los bits if rpg 33 1 0 Si la parte baja es igual a cero es que hay carry rpg 32 1 y se incrementa en uno la parte alta else if Estado UX 1 Para 64 bits Hacemos la multiplicaci n y guardamos el resultado en el reg LO rpg 33 1 multiplicacion 0 regrs 0 regrt BAJA if cambio 1 Hacemos el cambio de signo rpg 33 1 rpg 33 1 1 Hacemos el complemento a dos auxi rpg 33 1 gt gt 31 Vamos a hacer la extens
84. como ndices uccion Cogemos el campo rt de la instrucci n truccion Cogemos el campo base de la instruccitn Ox0000FFFF Cogemos el campo offset de la instr uxi metemos lo que hay en offset Desplazamos 15 bits hacia la derecha Ap ndice II C digo fuente del simulador P g 312 Simulador de instrucciones del microprocesador MIPS R4000 if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos la extensi n con unos off0 O0OxFFFFFFFF Ponemos la parte alta de offset a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta de offset a ceros destino rpg base 1 offset Hacemos registro base offset dest0 rpg base 0 off0 Hacemos registro base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno desplaz destino amp 0x00000003 Cogemos el desplazamiento a partir del limite destino destino amp 0xFFFFFFFC Cogemos el limite datoalmac rpg rt 1 En datoalmac metemos la parte baja del reg dato lontocar datoalmac Convertimos de long a array de caracteres if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si no est dentro del rango gotoxy 30 23 printf Direccitn fuera de rango else si est dentro del rango if Estado RE 0 si e
85. contador de programa PC e Dos registros que mantienen los resultados de las operaciones de multiplicaci n y divisi n entera HI y LO Los registros de la unidad de coma flotante ser n descritos m s adelante Los registros de la CPU pueden ser de 32 o de 64 bits dependiendo del modo de Operaci n en el que estemos trabajando La figura 1 muestra los registros de la CPU 63 32 31 0 63 32 31 0 RO HI RI R2 LO Registros de multip y divisi n R29 R30 PC R31 Contador de programa Registros de proposito general Figura 1 Registros de la CPU Dos de los registros de prop sito general de la CPU tienen funciones asignadas e RO est inicializado a cero y puede ser usado como el registro target para algunas instrucciones cuyo resultado va a ser descartado RO puede usarse tambi n como fuente cuando se necesita un valor cero e R31 es el registro de enlace usado por instrucciones de salto y enlace No deber a ser usado por otras instrucciones La CPU tiene tres registros de proposito especial e PC Registro contador de programa Caracter sticas generales del procesador MIPS R4000 P g 5 Simulador de instrucciones del microprocesador MIPS R 4000 e HI Registro de multiplicaci n y divisi n parte alta e LO Registro de multiplicaci n y divisi n parte baja Los registros de multiplicaci n y divisi n HI LO almacenan e El producto de las operaciones de mu
86. cuando los bytes cruzan el l mite de una doble palabra Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario Se almacenar n de uno a ocho bytes dependiendo del byte de comienzo especificado Si la instrucci n de ejecuta en modo de operaci n 32 bits se produce una Reserved instruction Exception Operaci n Tenemos una doble palabra doubleword que es 3945 73587631292A Para Big Endian Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 155 Simulador de instrucciones del microprocesador MIPS R4000 Registro rt 39 45 73 58 76 31 29 2A Memoria Despla Dir Direcciones de memoria Zz 0 gt 0000 39 45 73 58 76 31 29 2A 1 gt 0000 X 39 45 73 58 76 31 29 2 gt 0000 X X 39 45 73 58 76 31 3 gt 0000 X X X 39 45 73 58 76 4 gt 0000 X X X X 39 45 73 58 S gt 0000 X X X X X 39 45 73 6 gt 0000 X X X X X X 39 45 7 gt 0000 X X X X X X X 39 Para Little Endian Registro rt 39 45 73 58 76 31 29 2A Memoria Despla Dir Direcciones de memoria Z 0 gt 0000 39 IX X X X X X X 1 gt 0000 45 39 X X X X X X 2 gt 0000 73 45 39 X X X X X 3 gt 0000 58 73 45 39
87. de instrucciones del microprocesador MIPS R4000 aux aux lt lt 3 aux aux gt gt 7 else if aux aux lt lt 4 aux aux gt gt 71 else if aux aux lt lt 5 aux aux gt gt 7 else if aux aux lt lt 6 aux aux gt gt 6 strcmp c SX 0 strcmp c UX 0 strcmp c KSU 0 return aux Ocupa un bit Ocupa un bit Este campo del reg estado ocupa 2 bits Devuelve el estado que posee el bit de cada campo Dependiendo del campo que le pasemos como par metro void Pon estado void Esta funci n pone el estado del micro para que a la hora de ejecutar aparezca el estado en el que estamos trabajando UCHAR est subest est Estado RE gotoxy 2 18 if est 0 printf lse if est 1 printf gotoxy 2 19 est Estado KSU 1 Little endian gt Big endian 2 1 switch est case 0 printf Kernel Trj gotoxy 2 20 subest Estado KX if subest 0 printf 32 bits E else if subest 1 printf 64 bits ss break case 1 printf Supervisor Tj gotoxy 2 20 subest Estado SX if subest 0 printf 32 bits Snye else if subest 1 printf 64 bits 20 break case 2 printf Usuario gotoxy 2 20 subest Estado UX if subest 0 printf 32 bits SN Ap ndice II C digo fuente del simulador P g 208 Simulador de instruccio
88. de rs signed long int off0 offset dest0 destino Partes alta y baja de off y dest ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci n base Campo RS instruccion Cogemos el campo base de la instrucci n offset instruccion amp 0x0000FFFF Cogemos el campo offset de instruccitn auxi offset En auxi metemos el contenido de offset auxi auxi gt gt 15 Desplazamos auxi 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos la extensi n de signo con unos off0 0OxFFFFFFFF La parte alta de offset la ponemos toda a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta de offset a cero destino rpg base 1 offset Hacemos registro base desplazamiento dest0 rpgl base 0 off0 Hacemos reg base desplaz parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno if Estado RE 0 coger el dato en little endian datol rpg rt 1 amp 0x000000FF En datol metemos el byte mas bajo dato2 rpg rt 1 amp 0x0000FF00 gt gt 8 En dato2 metemos el 25 byte bajo else if Estado RE 1 cogemos el dato en big endian datol rpg rt 1 amp 0x0000FF00 gt gt 8 En datol metemos el 25 byte bajo dato2 rpg rt
89. else if Estado UX 1 Para 64 bits rssigno rpg rs 0 Metemos la parte alta del reg rs en rssigno rsnosigno rpg rs 1 Metemos la parte baja del reg rs en rsnosigno rtsigno rpg rt 0 Metemos la parte alta del reg rt en rtsigno rtnosigno rpg rt 1 Metemos la parte baja del reg rt en rtnosigno rpg rt 0 0 si parte alta de alg n reg 0 if rpg rs 0 0 if rpg rs 0 rpg rt 0 Si las dos partes altas son distintas if rssigno gt rtsigno rssigno rtsigno y rssigno gt rtsigno General Exception Trap exception gotoxy 30 23 printf Trap exception raa else if rpg rs 0 rpg rt 0 Si las dos partes altas son iguales if rsnosigno gt rtnosigno rsnosigno rtnosigno si mayor o igual General_Exception Trap exception gotoxy 30 23 print o Trap exception wa else Si la parte alta de los dos registros es cero if rsnosigno gt rtnosigno rsnosigno rtnosigno si mayor o igual General_Exception Trap exception gotoxy 30 23 printi 1 Trap exception Tz Fin de la instrucci tn TGE void TGEU ULONG instruccion Trap if Greater Than or equal Unsigned Si el contenido del registro rs es mayor o igual que el contenido del registro rt ocurre una Trap exception Los dos regs deben ser sin signo UCHAR rs rt Para coger el nf fmero del registro ULONG regrs regrt Para cog
90. g 231 Simulador de instrucciones del microprocesador MIPS R4000 Ge go pr else if el rpg 33 rpg 33 rpg 32 rpg 32 rpg 33 rpg 33 rpg 32 rpg 32 neral Exception toxy 30 23 intf Reserved Inst TE Estado UX rpg rt 1 30 23 T gotoxy printf se if regrs rpg rs 0 regrt rpg rt 0 if regrs gt regrt 1 0 dividir rpgl rs 1 dividir rpg rs 0 dividir rpg rs 1 dividir rpgl rs else if regrs lt regr rpg 33 0 0 rpg 33 1 0 rpg 32 0 rpg rs rpg 321 11 rpg rs else if regrs rpglrs 1 regrt rpgl rt 1 if regrs gt regrt 0 dividir rpg rs 0 1 dividir rpg rs 0 0 dividir rpg rs 0 1 dividir rpg rs 0 AT if regrs lt regrt i rpg 33 0 0 En Es 1 excep pa reg Reserved instruction exception tion ra 64 bits rt 0 0 si el divisor es cero co informamos de que no se pued Divisi n por ce si el divisor es distinto d rpg rs 0 rpg rt 0 regrs regrt rpg l reg l reg l reg l rpg rs 0 rpg rt 0 regrs regrt reg reg l reg l reg l el cociente hay un s cero puede hacer la divisicn Si las dos partes altas son distintas y regrs gt regrt rs 1
91. g 35 Simulador de instrucciones del microprocesador MIPS R 4000 es igual a cero Los FPRs mantienen valores en formato de simple doble precisi n e Como 32 registros de coma flotante cada uno de ellos es de 64 bits de ancho cuando el bit FR en el registro de estado de la CPU es igual a uno Los FPRs mantienen valores en formato coma flotante de simple doble precisi n En la figura 13 se muestran los registros de la unidad de coma flotante FPU Registros de Registros de Registros de coma prop sito general de Registros de coma prop sito general de flotante FPR coma flotante flotante FPR coma flotante FR 0 31 FGR 0 FR 1 63 FGR 0 least FGRO FPRO FGRO FPRO most FGR1 FPR1 FGR1 least FGR2 FPR2 FGR2 FPR2 most FGR3 FPR3 FGR3 Oo Oo Oo Oo Oo Oo Oo Oo least FGR28 FPR28 FGR28 FPR2 most FGR29 FPR29 FGR29 least FGR30 FPR30 FGR30 FPR3 most FGR31 FPR31 FGR31 Registros de control en coma flotante FCR Reg de Control Estado Reg Implement Revisi n 31 FCR31 0 31 FCRO 0 Figura 13 Registros de la FPU Caracter sticas generales del procesador MIPS R4000 P g 36 Simulador de instrucciones del microprocesador MIPS R 4000 REGISTROS DE CONTROL EN COMA FLOTANTE La FPU tiene 32 registros de control FCRs a los que solo se puede acceder por operaciones de movimiento e El registro de Implementaci n Revisi n FCRO contiene informa
92. if fwrite amp dato j sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria fin de la instrucci n SWL void SWR ULONG instruccion Store Word Right UCHAR rt base desplaz dato NULL aca base es el campo de rs signed long int off0 offset dest0 destino Parte alta y baja de off y dest ULONG auxi datoalmac Variable auxiliar y dato almacenado int i j Se utilizan como ndices t Campo RT instruccion Cogemos el campo rt de la instruccitn ase Campo RS instruccion Cogemos el campo base de la instruccictn ffset instruccion 0x0000FFFF Cogemos el offset de la instrucci tn uxi offset En auxi metemos lo que hay en offset uxi auxi gt gt 15 Desplazamos 15 bits hacia la derecha o oOnR if auxi 0 Si auxi es distinto de cero Ap ndice II C digo fuente del simulador P g 314 Simulador de instrucciones del microprocesador MIPS R4000 offset offset OxFFFFO000 Hacemos la extensi n de signo con unos off0 OXFFFFFFFF Ponemos la parte alta de offset a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta de offset a cero destino rpg base 1 offset Hacemos registro base offset dest0 rpg base 0 off0 Hacemos reg base off0 aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la pa
93. if fwrite 8 doble0 3 sizeof UCHAR 1 pf 0 Escribe en fich Error Error al acceder a memoria Ap ndice II C digo fuente del simulador P g 321 Simulador de instrucciones del microprocesador MIPS R4000 for i 0 i lt 4 desplaz i j 3 i if fwrite 8 doblel 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria else if desplaz 4 desplaz 5 desplaz 6 desplaz 7 Si desplazamiento es cuatro cinco seis siete for 1 0 i lt 7 desplaz 1 1 j 3 i if fwrite amp doble0 j sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria if Estado RE 1 si es big endian doble0 lontocar rpg rt 0 En doble0 metemos la parte alta de rt doblel lontocar rpg rt 1 Pasamos de long a cadena de caracteres fseek pf destino SEEK SET Nos situamos en el fichero de memoria if desplaz 0 desplaz 1 desplaz 2 desplaz 3 Si desplazamiento es cero uno dos tres for i desplaz i gt 0 1i j 3 1 if fwrite 8 doblel 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria else if desplaz 4 desplaz 5 desplaz 6 desplaz 7 Si desplazamiento es cuatro cinco seis siete for i d
94. instrucci n El contenido del registro de proposito general rs se carga en el registro de proposito especial HI Operaci n 32 64 HI lt GPR rs Excepciones Ninguna MTLO Move To Lo El formato de la instrucci n es MTLO rs Descripci n de la instrucci n El contenido del registro de proposito general rs se carga en el registro de proposito especial LO Operaci n 32 64 LO lt GPR rs Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 149 Simulador de instrucciones del microprocesador MIPS R4000 MULT Multiply El formato de la instrucci n es MULT rs rt Descripci n de la instrucci n El contenido del registro rs y rt se multiplican tratando ambos operandos como valores de 32 bits en complemento a dos No ocurre ninguna Integer overflow exception En modo 64 bits los operandos deben ser valores de 32 bits con extensi n de signo Cuando la operaci n se completa la parte baja del resultado se guarda en el registro LO y la parte alta del resultado se guarda en el registro HI Operaci n 32 t lt GPR rs GPR rt LO E t31 0 HI lt tez3 32 64 E lt GPR rsl3 0 GPR rtl31 0 LO ta1 t31 0 HI tes te Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 150 Simulador de instrucciones del microprocesador MIPS
95. la instrucci n no se ejecutar y se sale al men principal Tambi n se puede pulsar para ver el contenido de todos los registros Si pulsamos Paralelo opci n 2 las instrucciones se ejecutar n de dos en dos es decir salen por pantalla los dos mnem nicos de las dos instrucciones que se van a ejecutar si se pulsa E esas dos instrucciones se ejecutar n y pasar a las dos siguientes Al igual que en secuencial si se pulsa P las instrucciones no se ejecutan y despu s de pulsar una tecla se sale al men principal Por ltimo si pulsamos Breakpoint opci n 3 el simulador pide una direcci n que ser la direcci n de punto de parada Al meter la direcci n inmediatamente comienza a ejecutar instrucciones una a una hasta que llega a ese punto de parada Despu s sale al men principal En la figura 9 se puede ver un ejemplo de un tipo de ejecuci n en este caso paralelo Previamente hemos introducido las instrucciones ORI R3 R0 00FFh y ADDIU R4 R4 0001h Sus c digos son respectivamente 340300FF y 24840001 En la parte izquierda del cuadro de ejecuci n se puede ver c mo est configurado el simulador Ejecuci n paralela tambi n puede ser secuencial breakpoint ordenaci n de bytes little endian tambi n puede ser big endian modo Usuario tambi n puede ser Supervisor y Kernel y modo de ejecuci n 32 bits tambi n puede ser 64 bits Manual de Usuario del simulador de instrucciones MIPS R4000 P
96. lt 7 desplaz 1 1 j i if fwrite amp doble0 j sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria Fin de la instrucci n SDL void S Esta el con los by DR ULONG instruccion Store Doubleword Right instrucci n puede usarse con la instrucci n SDL para almacenar tenido de un registro en 8 bytes consecutivos de memoria cuando tes cruzan un 1 mite de palabra SDR almacena la parte derecha del registro en la parte baja correspondiente de memoria UCHA R rt base desplaz aca base es el campo de rs desplazam y aca signed long int off0 offset dest0 destino Parte alta y baja de off y dest ULONG datomenorpeso datomayorpeso auxi Dato de menor y mayor peso y auxi UCHAR doble0 NULL doblel NULL Para pasar de long a array de char Ap ndice IT C digo fuente del simulador P g 320 Simulador de instrucciones del microprocesador MIPS R4000 int i j Se utilizan como ndice rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el campo base de la instruccicn offset instruccion Ox0000FFFF Cogemos el campo offset de la instru auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 15 Desplazamos 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos la extensi n de si
97. memoria Z 0 gt 0000 2A IX X X X X X X Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 172 Simulador de instrucciones del microprocesador MIPS R4000 1 gt 0000 29 2A X X X X X X 2 gt 0000 31 29 2A X X X X X Sn 0000 76 31 29 2A X X X X Para Little Endian Registro rt XX XX XX XX 76 31 29 2A Memoria Despla Dir Direcciones de memoria Z 0 gt 0000 2A 29 31 76 X X X X Ll gt 0000 X 2A 29 31 X X X X 2 gt 0000 X X 2A 29 X X X X yo gt 0000 X X X 2A X X X X X Lo que hab a en memoria antes de SWR Excepciones Ninguna TEO Trap if Equal El formato de la instrucci n es TEQ rs rt Descripci n de la instrucci n El contenido del registro rt se compara con el registro rs Si el contenido del registro rs es igual al contenido del registro rt ocurre una Trap exception Operaci n 32 64 if GPR rs GPR rt then Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 173 Simulador de instrucciones del microprocesador MIPS R4000 TrapException endif Excepciones Trap exception TEQI Trap If Equal Immediate El formato de la instrucci n es TEQI rs immediate Descripci n de la instrucci n El dato inmediato de 16 bits con su extens
98. modo 32 bits DSRA Doubleword Shift Right Arithmetic El formato de la instrucci n es DSRA rd rt sa Descripci n de la instrucci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 125 Simulador de instrucciones del microprocesador MIPS R4000 El contenido del registro rt es desplazado a la derecha sa bits haciendo una extensi n de signo en los bits de mayor peso El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s amp 0 sa GPR rd lt EPR rtles GPR rt 63 s Excepciones Reserved instruction exception En modo 32 bits DSRAV Doubleword Shift Right Arithmetic Variable El formato de la instrucci n es DSRAV rd rt rs Descripci n de la instrucci n El contenido del registro rt se desplaza a la derecha el n mero de bits especificado por los seis bits de orden bajo del registro rs haciendo una extensi n de signo en los bits de mayor peso El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s lt GPR rs s5 o GPR rd GPR rtlez GPR rt e3 s Ap ndice I Descripci n de las instrucciones implementad
99. modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n Tenemos una doble palabra doubleword que es 394573587631292A Para Big Endian Memoria 0000 39 45 73 58 76 31 29 2A Registro Desplazam Registro rt 0 gt X X X X X X X 39 L gt X X X X X X 39 45 2 gt X X X X X 39 45 73 3 gt X X X X 39 45 73 58 4 gt X X X 39 45 73 58 76 5 gt X X 39 45 FRS 58 76 31 6 gt X 39 45 73 58 76 31 29 T 39 45 73 58 76 31 29 2A Para Little Endian Memoria 0000 2A 29 31 76 58 73 45 39 Registro Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 139 Simulador de instrucciones del microprocesador MIPS R4000 Desplazam Registro rt 0 gt 39 45 JS 58 76 31 29 2A 1 gt X 39 45 73 58 76 3 29 2 gt X X 39 45 73 58 76 31 3 gt X X X 39 45 73 58 76 4 gt X X X X 39 45 73 58 5 gt X X X X X 39 45 73 6 gt X X X X X X 39 45 7 gt X X X X X X X 39 X Lo que hab a en el registro antes de LDR Excepciones Reserved instruction exception En modo 32 bits LH Load Halfword El formato de la instrucci n es LH rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma a el contenido del regi
100. n Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d formatos dec nombre rd void Formato seis ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RS NOMBRE_INSTR RD RS Las instrucciones que usan este formato son JALR RS JALR RD RS UCHAR rd rs Para coger los nfmeros de registro rd Campo RD instruccion Cogemos el campo rd de la instrucci n rs Campo RS instruccion Cogemos el campo rs de la instrucci n Ahora vamos a imprimir el mnem nico por pantalla if rd 0 printf Ss rd formatos dec nombre rs else if rd 0 printf Ss r d r d formatos dec nombre rd rs void Formato siete ULONG instruccion UCHAR dec Ap ndice II C digo fuente del simulador P g 334 Simulador de instrucciones del microprocesador MIPS R4000 Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RT RS INMEDIATO Las instrucciones que usan este formato son ADDI ADDIU ANDI DADDI DADDIU ORI SLTI SLTIU XORI 1 UCHAR rt rs Para coger los nf fmeros de registro ULONG inmediato Para coger el dato inmediato rt Campo RT instruccion Cogemos el campo rt de la instrucci n rs Campo RS instruccion Cogemos el campo rs de la instrucci n inmediato instruccion 0x0000FFFF Cogemos el campo
101. n BEQL Branch on Equal Likely BNEL Branch on Not Equal Likely BLEZL Branch on Less Than or Equal to Zro Likely BGTZL Branch on Greater Than Zero Likely BLTZL Branch on Less Than Zero Likely BGEZL Brnch on Greatr Thn or Equal to Zro Likely BLTZALL Branch on Less Than Zero And Link Likely BGEZALL Branch on Greater Than or Equal to Zero And Link Likely Extensiones a ISA Instrucc Aritm ticas 3 operandos R Type OpCode Descripci n DADD Doubleword Add DADDU Doubleword Add Unsigned DSUB Doubleword Subtract DSUBU Doubleword Subtract Unsigned Extensiones a ISA Instrucciones de desplazamiento de bits OpCode Descripci n DSLL Doubleword Shift Left Logical DSRL Doubleword Shift Right Logical DSRA Doubleword Shift Right Arithmetic DSLLV Doublewrd Shift Left Logical Variable DSRLV Doublwrd Shift Right Logical Variable DSRAV Doublwrd Shift Right Arithmetic Variable DSLL32 Doubleword Shift Left Logical 32 DSRL32 Doubleword Shift Right Logical 32 DSRA32 Doubleword Shift Right Arithmetic 32 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 65 Simulador de instrucciones del microprocesador MIPS R4000 Estensiones a ISA Instrucciones de excepciones OpCode Descripci n TGE Trap if Greater Than or Equal TGEU Trap if Gre
102. n ADD que es 100000 Special rs rt Rd 0 ADD 000000 00101 00110 00100 00000 100000 Por tanto si estos 32 bits los separamos de 4 en cuatro bits para poderlo pasar a hexadecimal nos queda lo siguiente 0000 0000 1010 0110 0010 0000 0010 0000 0 0 A 6 2 0 2 0 El c digo de la instrucci n ADD r4 r5 r6 es 00A62020 y es el que debemos de introducir en el simulador para que ste lo entienda Manual de Usuario del simulador de instrucciones MIPS R4000 P g 85 CAP TULO 3 DESCRIPCI N DEL DISE O DEL SIMULADOR DE INSTRUCCIONES Simulador de instrucciones del microprocesador MIPS R4000 C MO SE DECODIFICA Y SE EJECUTA UNA INSTR EN EL SIMULADOR En este apartado se va a explicar c mo el simulador a partir del c digo de la instrucci n introducido en memoria decodifica dicha instrucci n para despu s poder ejecutarla Por lo tanto primero vamos a explicar el proceso de decodificaci n y seguidamente el proceso de la ejecuci n de la instrucci n pero antes debemos saber lo siguiente El c digo de operaci n de algunas instrucciones est localizado en los 6 bits de orden m s alto pero hay otros dos tipos de instrucciones en el primero de los cuales los seis bits de orden m s alto son 000000 y el c digo de operaci n est situado en los seis bits de orden m s bajo y en el segundo los seis bits de orden m s alto contienen 000001 y el c digo de operaci n es de cinco bits desde el bit 16 hasta el 20 inclusive
103. parte baja desp sa auxi Hacemos or de parte baja y auxi Fin de la instrucci n DSRL32 Ap ndice II C digo fuente del simulador P g 248 Simulador de instrucciones del microprocesador MIPS R4000 vo 141 in vo da un de id SLL El contenido del regis UCHAR rt rd sa Pa ULONG auxi rt rd auxi auxi sa RT instr RD instr Campo Campo auxi gt gt 6 UCHAR auxi if Estado UX 0 rpg rd 1 1 rpg rt 1 else if auxi rpg rt 1 lt lt sa auxi auxi gt gt 31 ULONG instruccion instruccion amp 0x00007C0 Desplazamos 6 bits hacia la derecha Estado UX 1 Shift Left Logical tro rt se desplaza hacia la izquierda sa bits sertando ceros en los bits de orden bajo ra coger el n fmero de registro y desplazamiento Variable auxiliar Cogemos el campo rt de la instruccicn Cogemos el campo rd de la instruccicn Cogemos el campo sa de la instruccicn uccion uccion Lo convertimos a unsigned char Para 32 bits lt lt sa Para 64 bits sa bits Metemos en auxi parte baja despl izq Lo desplazamos 31 bits hacia la derecha if auxi 0 Si auxi es distinto de cero rpg rd 0 0xFFFFFFEF Ponemos la parte alta del reg todo a unos else if auxi 0 Si auxi es igual a cero rpg rd 0 0x00000000 Ponemos la
104. registro rt se resta con el contenido del registro rs para formar un resultado que se guarda en el registro rd En modo 64 bits los operandos deben ser valores de 32 bits con extensi n de signo La nica diferencia entre esta instrucci n y la instrucci n SUB es que SUBU nunca causa desbordamiento No ocurre una Integer overflow exception Operaci n 32 GPR rd GPR rs GPR rt 64 temp GPR rs GPR rt GPR rd lt temp31 temp31 o Excepciones Ninguna SWL Store Word Left El formato de la instrucci n es SWL rt offset base Descripci n de la instrucci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 170 Simulador de instrucciones del microprocesador MIPS R4000 Esta instrucci n puede usarse con la instrucci n SWR para almacenar el contenido de un registro en cuatro bytes de memoria consecutivos cuando los bytes cruzan el l mite de una palabra Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario Se almacenar n de uno a cuatro bytes dependiendo del byte de comienzo especificado Operaci n Tenemos una palabra word que es 7631292A Para Big Endian Registro rt XX XX XX XX 76 31 29 2A Memoria Despla Dir Direcciones de memoria Z 0 gt 0000 76 31 29 2A X X X X
105. rpg rt 0 rpg rt 1 COCIENTEO rs 1 rpg rt 0 rpglrt 1 COCIENTE rs 1 rpg rt 0 rpglrt 1 1 RESTOO cs 1 rpg rt 0 rpg rt 1 RESTO En el cociente hay un cero El resto es igual que el dividendo Si las dos partes altas son iguales si mayor o igual rs 1 rpg rt 0 rpgirt 1 COCIENTE0 rs 1 rpg rt 0 rpg rt 1 COCIENTE rs 1 rpg rt 0 rpgirt 1 RESTO0 rs 1 rpg rt 0 rpg rt 1 RESTO cero Ap ndice II C digo fuente del simulador P g 232 Simulador de instrucciones del microprocesador MIPS R4000 rpg 33 1 0 rpg 32 0 rpg rs 0 El resto es igual que el dividendo rpg 32 1 rpg rs 1 fin de la instrucci n DDIVU void MFHI ULONG instruccion Move From Hi El contenido del registro especial HI se carga en el registro rd UCHAR rd Para tener el n mero del registro rd Campo RD instruccion Cogemos el campo rd de la instrucci n if Estado UX 0 para 32 bits l rpg rd 1 rpg 32 1 Metemos parte baja de HI en parte baja de rd a if Estado UX 1 para 64 bits i rpg rd 0 rpg 32 0 Metemos parte alta de HI en parte alta de rd rpg rd 1 rpg 32 1 Metemos parte baja de HI en parte baja de rd Fin de la instrucci n MEHI void MFLO ULONG i
106. rs Campo RS instruccion Cogemos el campo rs de la instrucci tn ut Campo RT instruccion Cogemos el campo rt de la instruccitn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn Ap ndice IT C digo fuente del simulador P g 252 Simulador de instrucciones del microprocesador MIPS R4000 E rs baja Ft baja Estado UX 0 Para 32 bits signo rpg rs 1 En rssig ponemos lo que hay en el reg rs parte signo rpg rt 1 1 En rtsig ponemos lo que hay en el reg rt parte Hacemos esto porque los operandos tienen que ser con signo BE el rssigno lt rtsigno Si rssigno es menor que rtsigno rpg rd 1 0x00000001 El registro rd se pone a uno se si rssigno no es menor que rtsigno rpg rd 1 0x00000000 El registro rd se pone a cero else if Estado UX 1 Para 64 bits rssigno rpg rs 0 En rssig ponemos lo que hay en el reg rs parte alta rtsigno rpg rt 0 En rtsig ponemos lo que hay en el reg rt parte alta rsnosigno rpg rs 1 En rsnosigno est la parte baja del reg rs rtnosigno rpg rt 1 En rtnosigno est la parte baja del reg rt if rpg rs 0 0 rpg rt 0 0 Si la parte alta de cualquiera de los dos es distinta de cero if rpg rs 0 rpg rt 1 0 Si las dos son distintas if rssigno lt rtsigno Si rssigno es menor que rtsigno rpg rd
107. rs 0 inme0 Si las partes altas son iguales Ap ndice II C digo fuente del simulador P g 273 Simulador de instrucciones del microprocesador MIPS R4000 if rsnosigno lt inmenosigno Comparamos las partes bajas General_Exception Trap exception gotoxy 30 23 print qu Trap exception A else Si las partes altas son cero if rsnosigno lt inmenosigno Comparamos las partes bajas General_Exception Trap exception gotoxy 30 23 print Trap exception DD fin de la instrucci tn TLTI void TLTIU ULONG instruccion Trap If Less Than Immediate Unsigned Al dato inmediato de 16 bits se le hace una extensi n de signo y se compara con el contenido del registro rs Considerando ambas cantidades como enteros sin signo si el contenido del registro rs es menor que el dato inmediato con extensi n ocurre una Trap exception UCHAR rs Para coger el nfmero de registro rs ULONG inmediato inme0 auxi regrs Variables sin signo rs Campo RS instruccion Cogemos el campo rs de la instruccicn regrs rpg rs 1 En regrs metemos parte baja del reg rs inmediato instruccion amp 0x0000FFFF Cogemos el dato inmediato auxi inmediato gt gt 15 En auxi metemos inmediato desplazado 15 bits drcha if auxi 0 Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Hacemos la extensi n de signo inme0 0xFFFF
108. rt void Formato uno ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RD RT RS Las instrucciones que usan este formato son DSLLV DSRAV DSRLV SLLV SRAV SRLV UCHAR rs rt rd Para coger el n fmero de los registros rs Campo RS instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n rd Campo RD instruccion Cogemos el campo rd de la instrucci n Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d rd r d formatos dec nombre rd rt rs void Formato dos ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RS RT Las instrucciones que usan este formato son DDIV DDIVU DIV DIVU DMU TGEU TLT TLTU TNE LT DMULTU MULT MULTU TEQ TGE UCHAR rs rt Para coger el nfmero de los registros rs Campo RS instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d r d formatos dec nombre rs rt void Formato tres ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RD R
109. se le pasa el c digo de la instrucci n y una m scara Esta m scara se compara y devuelve el valor del c digo de operacitn ULONG auxi Variable auxiliar UCHAR retorno Lo que va a devolver auxi instr amp mascara Se coge el valor de la m scara if mascara 0xFC000000 Vemos si el c d de operaci n est al principio auxi auxi gt gt 26 Desplazamos 26 bits hacia la derecha else if mascara 0x0000003F Vemos si el COP est al final auxi auxi gt gt 0 No desplazamos ning n bit else if mascara 0x001F0000 Vemos si est en medio aprox auxi auxi gt gt 16 Desplazamos 16 bits hacia la derecha retorno UCHAR auxi En retorno metemos auxi pasado a unsigned char return retorno Devuelve el valor del c d de operac de la instr UCHAR Estado char c A esta funci n se le pasa como par metro una cadena que va a comparar Devuelve el estado del microprocesador Los par metros pueden ser RE Reverse endian KX 32 64 SX 32 64 UX 32 64 KSU Usu Kern Sup UCHAR aux Variable auxiliar aux sr En aux metemos el valor del registro de estado if strcmp c RE 0 Compara el par metro con RE aux aux lt lt 2 Si son iguales desplaza aux dos bits hacia la izq aux aux gt gt 7 Desplaza siete bits hacia la derecha else if strcmp c KX 0 Ocupa un bit Ap ndice IT C digo fuente del simulador P g 207 Simulador
110. si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno Ap ndice II C digo fuente del simulador P g 318 Simulador de instrucciones del microprocesador MIPS R4000 desplaz destino 0x00000007 Cogemos el desplazamiento hasta el l mite destino destino amp OxFFFFFFF8 Ponemos destino en el l1 mite de doubleword Lf Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits reg memoria if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale i gotoxy 30 23 printf Direccitn fuera de rango a si no se sale del rango de direcciones Se Estado RE 0 si es little endian doble0 lontocar rpg rt 1 En doble0 metemos la parte baja del doblel lontocar rpg rt 0 Convertimos long a array de caracteres fseek pf destino SEEK SET Nos posicionamos en el fichero de if desplaz 0 desplaz 1 desplaz 2 desplaz 3 Si desplazamiento es cero uno dos tres for i 0 i lt desplaz 1 1 j desplaz i if fwrite 8 doblel 3 sizeof UCHAR 1 pf 0 Escribimos en mem Error Error al acceder a memoria else if desplaz 4 desplaz 5 desplaz 6
111. signo ULONG rsnosigno rtnosigno ULONG regrs0 regrs1l regrt0 regrtl UCHAR rs rt cambio 0 indican el n mero de registro rs Campo RS instruccion cogemos el campo rs de la instruccitn rt Campo RT instruccion cogemos el campo rt de la instruccitn regrs0 rpg rs 0 gt gt 31 Guardamos en regrs0 la parte alta del reg rs regrtO rpg rt 0 gt gt 31 Guardamos en regrt0 la parte alta del reg rt if regrs0 0 amp amp regrt0 0 Si los dos operandos son negativos regrsl rpglrs 1 regrs0 rpg rs 0 if regrsi 0 regrs0 regrs0 regrtl rpg rt1 11 1 el otro operando tambi n le cambiamos el signo regrt0 rpg rt 0 if regrtl 0 regrt0 1 hacemos el positivo en complemento a dos invertimos todos los bits t si hay acarreo al sumar a regrs1l 1 inc cambio 0 No hay que hacer cambio de signo al final else if regrs0 0 amp amp regrt0 0 Si solo el reg rs es negativo regrsl rpg rs 1 1 hacemos el positivo en complemento a dos regrs0 rpg rs 0 1 invertimos todos los bits if regrsl1 0 regrs0 si hay acarreo al sumar a regrs1l 1 inc regrs0 cambio 1 Hay que hacer un cambio de signo al resultado regrtl rpg rt 1 El registro rt al ser positivo se queda como est regrt0 rpg rt 0 else if regrt0 0 amp amp regrs0 0 Si solo el reg rt es negativo regrtl rpg rt 1 1 hace
112. son rpg 34 1 rpg 34 1 offset Al contador CP se le suma el offset Fin de la instrucci n BNE void BNEL ULONG instruccion Branch if Not Equal Likely Se comparan los contenidos de los registros rs y rt Si los son distintos el programa hace un salto relativo marcado por offset Si la condici n no se cumple la instrucci n a continuacitn de no se ejecuta f UCHAR rs rt Para el n fmero de los registros signed long int offset Para el desplazamiento dos registros el campo esta se anula ULONG auxi Variable auxiliar rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el campo offset de la instru offset offset lt lt 2 Desplazamos dos bits hacia la izquierda auxi offset En auxi metemos offset auxi auxi gt gt 17 Lo desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCO0O000 Hacemos la extensi fn de signo con unos Ap ndice II C digo fuente del simulador P g 260 Simulador de instrucciones del microprocesador MIPS R4000 if Estado UX 0 Para 32 bits if rpg rs 1 rpg rt 1 Si la parte baja de los registros es distinta rpg 34 1 rpg 34 1 offset Al CP se le suma el offset else Si la parte baja de los registros no es distinta r
113. struction exception UCHAR rt base desplaz aca base es el campo de rs desplazamiento y arreo signed long int off0 offset dest0 destino parte alta y baja de offs y st ULONG datomenorpeso datomayorpeso auxi dato de mayor y menor peso y xiliar UCHAR doble0 4 doble1l 4 Para coger los bytes de la memoria int ij Variables que se utilizan como ndice rt Campo RT instruccion Cogemos el campo rt de la instrucci n base Campo RS instruccion Cogemos el campo base de la instruccicn offset instruccion Ox0000FFFF Cogemos el campo offset de la instr auxi offset En auxi metemos el contenido de la variable offset auxi auxi gt gt 15 Desplazamos auxi 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO0000 Extendemos el signo con unos off0 0OxFFFFFFFF La parte alta del offset la ponemos toda a unos else if auxi 0 Si auxi es igual a cero off0 0 La parte alta del offset la ponemos toda a ceros destino rpg base 1 offset hacemos registro base desplazamiento dest0 rpglbase 0 off0 hacemos registro base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta del destino en uno desplaz destino 0x00000007 Cogemos el desplazamiento desde el 1 mite destino destino amp OxFFF
114. void BGEZALL ULONG instruccion Brch On Grtr Thn Or Eql to Zro and Lnk Likely 1 UCHAR rs Para el n mero de registro signed long int offset Para el desplazamiento ULONG auxi condicion Variable auxiliar y condicicn rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el campo offset de la instr offset offset lt lt 2 Desplazamos 2 bits hacia la izquierda auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero of fset offset OxFFFCO000 Hacemos la extensi n de signo if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 rpg 31 1 rpg 34 1 8 Metemos direcci n de instr despues de delay slot if condicion 0 Si el bit 32 es igual a cero rpg 34 1 rpg 34 1 offset Sumamos el desplazamiento al CP else rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction pasa de la sig else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 rpg 31 1 rpg 34 1 8 Metemos direcci n de intr despues de delay slot if condicion 0 Si el bit 64 es igual a cero rpg 34 1 rpg 34 1 offset Sumamos el desplazamiento al CP else rpg 34 1 rpg 34 1 1 4 NullifyCurrentInstruction pasa de la sig Fin de la instrucci n BGEZ
115. 0 P g 28 Simulador de instrucciones del microprocesador MIPS R 4000 En la siguiente tabla veremos los segmentos en modo Kernel 64 bits Valores de los Valores de bits del bits de la registro de estado Nombre Rango de Tama o direcci n KSU EXL ERL KX Segmento direcciones segmento A 63 62 00 i A 0x0000000000000000 1 Tbyte 62 xksuse 5 0x000000FFFFFFFFFF 2 bytes A 63 62 01 1 k 0x4000000000000000 1 Tbyte s XKSSE i S 0x400000FFFFFFFFFF 2 bytes 36 0x8000000000000000 8 2 byte A6307 L ekphys OxBFFFFFFFFFFFFFFF espacios KSU 00 07 A 63 6D 11 d j e 0xC000000000000000 2 2 gt i gt OxCO0000FF7FFFFFFF bytes EXL 1 A 63 62 11 gt x i ksegg OFFEEBRRESOOO0000 512 MB A 61 31 1 A Ai OxFFFFFFFF9FFFFFFF 2 bytes A 63 62 11 gt i seo OFFFFFFFFA0000000 512 MB A 61 31 1 a OxFFFFFFFFBFFFFFFF 27 bytes A 63 62 11 gt i n OxFFFFFFFFC0000000 512 MB A 61 31 1 5888 OxFFFFFFFFDFFFFFFF 2 bytes A 63 62 11 gt kseg3 OFFFFFFFFE0000000 512 MB A 61 31 1 AS OxFFFFFFFFFFFFFFFF 27 bytes C MO TRABAJA EL PROCESAMIENTO DE EXCEPCIONES El procesador recibe excepciones de un n mero de fuentes incluyendo los fallos del TLB Translation Lookaside Buffer desbordamientos aritm ticos interrupciones de Entrada Salida y llamadas al sistema Cuando la CPU detecta una de estas excepciones la secu
116. 0 m11 0x000000EFF i a l m11 amp 0x0000FF00 gt gt 8 j a 2 m11 amp 0x00FF0000 gt gt 16 a 3 m11 amp OxFF000000 gt gt 24 a 4 m12 0x000000FF a 5 m12 amp 0x0000FF00 gt gt 8 a 6 m12 amp Ox00FFO0O000 gt gt 16 a 7 m12 amp OxFF000000 gt gt 24 b 0 m21 amp 0x000000FF b 1 m21 amp 0x0000FF00 gt gt 8 b 2 m21 amp 0x00FF0000 gt gt 16 Ap ndice II C digo fuente del simulador P g 326 Simulador de instrucciones del microprocesador MIPS R4000 b 3 m21 0xFFO000000 gt gt 24 b 4 m22 0x000000FF b 5 m22 amp 0x0000FF00 gt gt 8 b 6 m22 amp 0x00FF0000 gt gt 16 b 7 m22 amp OxFF000000 gt gt 24 for i 0 i lt 9 i for 3 0 3 lt 16 3 resul i j 0 for i 0 i lt 8 i k 1 acarreo 0 for 3 0 3 lt 8 3 resul i k b i a j acarreo acarreo unsigned int b i a j acarreo gt gt 8 if j 7 amp amp acarreo 0 resul i k 1 acarreo k acarreo 0 for 1 0 1 lt 16 1 suma 0 for 3 0 3 lt 8 3 suma suma resul 3 i suma resulf 8 acarreo i suma suma acarreo JE suma gt gt 8 ahora guardamos la parte alta y la baja for i 15 i gt 12 i alta 15 i resul 8 i for i 11 i gt 8 i altamedia 11 i resul 8 i for i 7 i gt 4 i bajamed
117. 000 R6 DO000000000000000 R7 D000000000000000 R3 0000000000000000 R9 0000000000000000 R10 0000000000000000 R11 0000000000000000 R12 0000000000000000 Memoria R13 0000000000000000 R14 0000000000000000 R15 0000000000000000 gt 16 31 HT 0000000000000000 PC 0000000000000000 LO 0000000000000000 Figura 6 Metemos el byte A3 por ejemplo Mete el dato en la direcci n especificada y nos pregunta si queremos meter otro dato en la siguiente direcci n en otra direcci n distinta O si queremos terminar Solo tenemos que pulsar una de las tres opciones Si pulsamos la primera solo tenemos que introducir el byte que nos piden que es el de la siguiente Manual de Usuario del simulador de instrucciones MIPS R4000 P g 76 Simulador de instrucciones del microprocesador MIPS R4000 direcci n Si pulsamos la segunda tenemos que introducir la direcci n y luego el byte y si pulsamos la tercera volvemos al men principal La figura 7 muestra lo explicado hasta este punto MIPS R4000 RO OO00000D00000000 00 R1 0000000 00000000 Rz O000000000000000 R3 O0000000000000000 R4 0000000 D ODO a00 E5 0000000000000 000 Re OO000000000000000 Es OOOO OOODOOD DOdId RS 000000000000 0000 RS O000000000000000 R10 5 DOD0OOODODO DOI F11 0000000000000000 R1 z 000000000000 0000 otro dato 1305 0000000000000 1 En la siguiente direcci n R14 D0000000000000000 2 2 En otra direcci n distinta R15 D00000000
118. 000 0000 R11 0000000000000000 R1 2500000000000 0000 R1 33 0000000000000000 14 2000000000000 0000 R15 5000000000000 0000 HI OOOO OOO0000000000 L OOOO OOOOOOODOaa Figura 13 Cuando lo hemos introducido en este ejemplo registro 10 nos piden si la longitud del dato que vamos a introducir en el registro es de 32 de 64 bits En el ejemplo de la figura 14 le diremos al simulador que el dato va a ser de 64 bits MIPS R4000 RO 0000000000000 R1 3000000000000 0000 R 22 O0000000000000000 R 3 O0000000000000000 R4 0000000000 0O0ODD RS 2 O0000000000000000 R O000000000000000 RF O0000000000000c00 RS O0000000000000000 RS D000000000000000 R10 0000000000000000 R11 0000000000000000 R12 20000000000000000 dato a meter R13 1 D000000000000000 R14 0000000000000000 1 32 bits z gt 64 bits R15 0000000000000000 16 31 HAT OOOO 0OOOO00000000 PEIO0000000000000000 LO OOOO OOOO Figura 14 A continuaci n nos va a pedir los 32 bits de mayor peso del dato de 64 bits Una vez metido nos pedir los siguientes 32 bits que ser n los de menor peso Ver figura 15 Despu s de introducir todo el dato este se guarda en el registro indicado en este caso Manual de Usuario del simulador de instrucciones MIPS R4000 P g 81 Simulador de instrucciones del microprocesador MIPS R4000 10 y pregunta si se desea modificar otro registro Si se hubiese elegido introducir un dato de 32 bits nicamente hubiesemos
119. 0000 0x 0000 0000 0000 0000 Mapeados Figura 10 Espacio de dirs virtuales modo supervisor A continuaci n vamos a ver la tabla de los segmentos en modo Supervisor Valores de los Valores de bits del bits de la registro de estado Nombre Rango de Tama o direcci n KSU EXL ERL sx segmento direcciones segmento 32 bits 0x00000000 2 Gbyte 015 0 0 0 suseg 3i A 31 0 0x7FFFFFFF 2 bytes 32 bits 0xC000 0000 512 MB 01 0 0 0 ssseg 30 A 31 29 1102 OxDFFF FFFF 2 bytes 64 bits 0x0000000000000000 1 Tbyte 015 0 0 1 xsuseg F A 63 32 002 0x000000FFFFFFFFFF 24 bytes 64 bits 0x4000000000000000 1 Tbyte 015 0 0 1 xsseg M A 63 32 012 0x400000FFFFFFFFFF 2 bytes 64 bits OxFFFFFFFFC0000000 512 MB 015 0 0 1 csseg E A 63 32 11 gt OxFFFFFFFEDFFFFFFF 27 bytes Caracter sticas generales del procesador MIPS R4000 P g 26 Simulador de instrucciones del microprocesador MIPS R 4000 Operaciones en modo Kernel El procesador entra en modo Kernel siempre que se produce una excepci n y permanece en modo Kernel hasta que se ejecuta una instrucci n de Retorno de Excepci n ERE T La instrucci n ERET restaura el procesador al modo que ten a antes de la excepci n La figura 11 muestra el espacio de direcciones virtuales en modo Kernel 32 bits 64 bits Ox FFFF FEFF E 0x FFFF FFFF FFFF FFFF EGE Mapead ctas Ox FFFF FFFF E000 0000 Mapeables 0x
120. 00000000 3 No quiero meter otro dato HI OOOO OO0000000000 PC OOOO O0OOOD 00D000d LO OOO OOOOOOOODDOda Figura 7 3 Ejecuci n Esta opci n sirve para ejecutar nuestro programa a partir de la direcci n a la que apunta el CP Esta direcci n se puede modificar con la opci n 7 del men principal Si en el men principal pulsamos la opci n 3 aparece un submen en el que muestra al usuario las tres opciones que tiene para ejecutar un programa Secuencialmente en paralelo y poniendo un punto de parada breakpoint En la figura 8 se puede ver el submen con las tres opciones de ejecuci n MIPS R4000 RO OO000OO0000000000 R1 0000000000000 000 200000000000 00000 R3 O0000000000000000 R4 000000000000000 E5 A O000000000000000 Re O000000000000000 RF OOOO Ra 000000000000 0000 R9 OD000000000000 001 R10 5 0000001000000 R11 DO00000000000000 R12 0000000000000000 Modo de ejecuci n R13 0000000000000000 R14 DO00000000000000 1 Secuencial 2 Paralelo 2 Breakpoint R155O000000000000000 HI OOOO 000000000000 POD OOOO 00D000d L OOOO OOOOOODDO Dad Manual de Usuario del simulador de instrucciones MIPS R4000 P g 77 Simulador de instrucciones del microprocesador MIPS R4000 Figura 8 Si pulsamos Secuencial opci n 1 las instrucciones se ejecutar n de una en una es decir sale el mnem nico por pantalla si se pulsa E la instrucci n ser ejecutada y pasar a la siguiente Si se pulsa P
121. 00000000 R5 DOO0O0000000000000 R6 0000000000000000 R7 0000000000000000 RS DODODOOO0D0000000 R9 0000000000000000 R10 0000000000000000 R11 0000000000000000 R12 0000000000000000 Escribe una instrucci n completa Salir Esc R13 0000000000000000 0014 R14 D000000000000000 R15 0000000000000000 gt 16 31 HT 0000000000000000 PC DO000000000000000 LO 0000000000000000 Figura 4 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 75 Simulador de instrucciones del microprocesador MIPS R4000 2 Introducir datos Esta opci n sirve para introducir datos en memoria byte a byte Cuando pulsamos esta opci n nos piden la direcci n a modificar seg n se muestra en la figura 5 MIPS R4000 RO 0000000000000000 R1 0000000000000000 R2 0000000000000000 R 3 0000000000000000 R4 0000000000000000 R5 0000000000000000 R6 0000000000000000 R7 0000000000000000 R3 0000000000000000 R9 0000000000000000 R10 0000000000000000 R11 0000000000000000 R12 0000000000000000 Memoria R13 0000000000000000 R14 DO000000000000000 HT 0000000000000000 LO 0000000000000000 R15 DOO0O0D00000000000 Figura 5 Cuando introducimos esta direcci n a continuaci n se muestra por pantalla la memoria a partir de esa direcci n y pide el byte a introducir figura 6 RO D0000000000000000 R1 0000000000000000 R2 0000000000000000 R3 0000000000000000 R4 D0000000000000000 R5 0000000000000
122. 0000000000 0000 RAMO RE OO000000000000000 R3 3DOOOODONODO00000 R10 DOOO000000000000 R11 D000000000000000 R1 2300000000000 Modo de operaci n E R13 0000000000000000 1 32 bits R14 D000000000000000 2 64 bits R15 0000000000000000 HI jgo000000000OOOO Pc 0g0ooop0gg0oooni L OO OOOOOOOOOOOOOa Figura 17 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 83 Simulador de instrucciones del microprocesador MIPS R4000 9 Cr ditos Como se ve en la figura 18 la nica funci n que realiza esta opci n es mostrar los datos del creador de este proyecto Los datos que figuran son nombre apellidos carrera y a o de finalizaci n de este proyecto MIPS R4000 RO 0000000000000000 R1 D0000000000000000 R2 D000000000000000 R 3 D0000000000000000 R4 0000000000000000 R5 0000000000000000 R6 0000000000000000 R 0000000000000000 R8 0000000000000000 R9 0000000000000000 R10 0000000000000000 R11 0000000000000000 R12 0000000000000000 Carrera Ingeniero T cnico en Inform tica de Sistemas R13 DO000000000000000 Autor Miguel Angel Hern ndez Pinto R14 0000000000000000 A o 1999 R15 0000000000000000 Pulsa tecla _ gt 16 31 HT 0000000000000000 PC D000000000000000 LO 0000000000000000 Figura 18 S Salir Se sale del simulador de instrucciones del MIPS R 4000 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 84 Simulador de instrucciones del
123. 1 amp 0x000000FF En dato2 metemos el byte mas bajo if Estado UX 0 Para 32 bits Ap ndice II C digo fuente del simulador P g 309 Simulador de instrucciones del microprocesador MIPS R4000 if destino gt 65535 destino lt 0 Si se sale del rango gotoxy 30 23 printf Direccitn fuera de rango else if destino 2 0 Si no es m ltipo de dos General_Exception Se produce un error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango de direcciones y no se produce excepcifn fseek pf destino SEEK SET Nos posicionamos en el fichero memoria if fwrite 8 datol sizeof UCHAR 1 pf 0 Escribimos el datol Error Error al acceder a memoria if fwrite 8 dato2 sizeof UCHAR 1 pf 0 Escribimos el dato2 Error Error al acceder a memoria else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else if destino 2 0 Si no es multiplo de dos General_Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango y no hay error de direccionamiento fseek pf destin
124. 1 rpeg rt 1 auxi Hacemos la or de parte baja y auxi else if desplaz 5 Si desplazamiento es igual a cinco auxi datomenorpeso lt lt 16 En auxi metemos dato menorpeso desplazado rpg rt 1 rpg rt 1 amp 0x0000FFFF Hacemos and con parte baja datomenorpeso datomenorpeso gt gt 16 Desplazamos 16 bits hacia derecha datomayorpeso datomayorpeso lt lt 16 Desplazamos 16 bits hacia izq rpg rt 0 datomenorpeso datomayorpeso Hacemos or de uno y otro rpg rt 1 reg rt 1 auxi Hacemos or de parte baja y auxi else if desplaz 6 Si desplazamiento es igual a seis auxi datomenorpeso lt lt 8 En auxi metemos datomenorpeso desplazado rpg rt 1 srpg rt 1 amp 0x000000FF Hacemos la and con parte baja datomenorpeso datomenorpeso gt gt 24 Desplazamos 24 bits hacia derecha datomayorpeso datomayorpeso lt lt 8 Desplazamos 8 hacia izquierda rpg rt 0 datomenorpeso datomayorpeso Hacemos or de uno y otro rpg rt 1 srpg rt 1 auxi Hacemos or de parte baja y auxi else if desplaz 7 Si desplazamiento es igual a siete rpg rt 0 datomayorpeso En la parte alta metemos el datomayorp rpg rt 1 datomenorpeso En la parte baja mentemos datomenorpeso else if Estado RE 1 Si el big endian datomayorpeso chartolong doble0 En datomayorpeso metemos doble0 datomenorpeso chartolong doblel En datomenorpeso metemos doblel if desplaz 0 Si el desplazamiento es igual
125. 2 bits printf 2 64 bits 6 64 bits do Haz modop getch coger opci n de las dos mostradas while modop 1 modop 2 amp amp modop 27 mientras 1 y 2 y 2 if modop 27 Si se ha pulsado el car cter escape return 0 Se sale de la funci n limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 25 18 nos situamos el cursor printf 1 Big endian gotoxy 25 19 big endian printf 2 Little endian Little endian do Haz bigen getch coger opci tn de las dos mostradas TN bigen 1 amp amp bigen 2 amp amp bigen 27 mientras 1 2 y a if bigen 27 Si se ha pulsado el car cter escape return 0 Se sale de la funci n ahora vamos a hacer los cambios si antes no se ha pulsado la tecla esc sr 0 ponemos el registro de estado a cero if modop 1 si la variable modop es uno sr sr 0x02 32 bits usuario else if modop 2 si la variable modop es dos sr sr 0x1E 64 bits usuario if bigen 1 si la variable bigen es uno sr sr 0x22 big endian usuario else if bigen 2 si la variable bigen es dos sr sr 0x02 little endian usuario limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 nos situamos en la pantalla printf Configuraci n actual ponemos informaci n gotoxy 25 18 situamos el cursor if Estado UX 0 prin
126. 27 hasta que pulse S N o esc while resp S Hace el bucle mientras resp sea S in LZ el return 0 t Reiniciar CP void Esta funcit n pide al us uario la direcci n de inicio que queremos poner en contador de programa El usuario no se puede salir de los limites estable cidos y la direcci tn debe ser m ltiplo de cuatro debe estar alineada ULONG dircp La direcci n a la que queremos inicializar el CP int escape do Ap ndice II C digo fuente del simulador P g 211 Simulador de instrucciones del microprocesador MIPS R4000 in S limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 Llevamos el cursor a una zona de la pantalla printf Inicio de CP Pedimos donde queremos que empiece el CP escape leedir 8edircp lee el dato if escape 0 Si se ha pulsado la tecla escape return 0 jwhile dircp 4 0 coge el dato si es m ltiplo de cuatro rpg 34 1 dircp Guardamos la direcci n introducida en el CP Ver CP Ver memoria dircp return 0 t configuracion void Esta funci n lo que hace es mostrar la configuraci tn actual del simulador pide si se quiere cambiar la configuracitn Si la respuesta es Sj nos pi de us bi us de una serie de datos y el registro de estado del simulador se configura la forma que nosotros hemos pedido Por defecto siempre se pon n mo
127. 3 DSRL 3 DSRA 3 DSLL32 0 NULL 3 DSRL32 3 DSRA32 12 BLTZ 12 BGEZ 12 BLTZL 12 BGEZL 0 NULL 0 NULL 0 NULL 1f0 NULL 13 TGEI 13 TGEIU 13 TLT1I 13 TLTIU 13 TEOI 0 NULL 13 TNEI 0 NULL 12 BLTZAL 12 BGEZAL 12 BLTZALL 12 BGEZALL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 14 3 14 JAL 8 BEO 8 BNE 9 BLEZ 9 BGTZ 7 ADDI 7 ADDIU 7 SLTI 7 SLTIU 7 ANDI 7 ORI Ap ndice II C digo fuente del simulador P g 189 Simulador de instrucciones del microprocesador MIPS R4000 7 XORI 10 LUI 15 ERET 0 NULL 0 NULL 0 NULL 8 BEOL 8 BNEL 9 BLEZL 9 BGTZL 7 DADDI 7 DADDIU 11 LDL 11 LDR 0 NULL 0 NULL 0 NULL 0 NULL 11 LB 11 LH 11 LWL 11 LW 11 LBU 11 LHU II LWR 11 LWU 11 SB II SHm ALL SWE yA Li SWE Ey 11 SDL 11 SDR 11 SWR 0 NULL 0 NULL 0 NULL
128. 4 1 rpg 34 1 4 NullifyCurrentInstruction else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 if condicion 0 rpg rs 0 0 amp amp rpg rs 1 0 Si menor o igual rpg 34 1 rpg 34 1 offset Al CP le sumamos el offset else rpg 341 11 rpg 34 1 4 NullifyCurrentInstruction fin de la instrucci n BLEZL void BLTZ ULONG instruccion Branch On Less Than Zero UCHAR rs Para coger el nfmero de registro signed long int offset Para el desplazamiento ULONG auxi condicion Variable auxiliar y condicicn rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion 0x0000FFFF Cogemos el campo offset de la instr offset offset lt lt 2 Desplazamos dos bits hacia la izquierda auxi offset En auxi metemos el offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset 0xFFFC0000 Hacemos extensin de signo con unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 Si condici n es distinto de cero rpg 34 1 rpg 34 1 offset Sumamos offset al CP else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 if condicion 0 Si condici n es distinto de cero rpg 34 1 rpg 34 1 offset
129. 4 8 16 32 palabras Los bits del estado de la cach secundaria CS indican si e El dato de la l nea de cach y etiqueta son validos e El dato est potencialmente presente en las cach s de otros procesadores shared contra exclusive e Fl procesador es responsable de actualizar la memoria principal clean contra dirty Acceso a la cach secundaria La figura 23 muestra el ndice de la direcci n virtual VA en las cach secundaria La cach secundaria tiene un rango de tama o de 128 Kbytes hasta 4 Mbytes y el n mero de bits de direcci n f sica usados para indexar la cach depende del tama o de la cach Por ejemplo PA 16 4 Caracter sticas generales del procesador MIPS R4000 P g 49 Simulador de instrucciones del microprocesador MIPS R 4000 accede a las etiquetas en una cach secundaria de 128 Kbytes con l neas de 4 palabras PA 21 5 accede a las etiquetas en una cach secundaria de 4Mbytes con l neas de 8 palabras Tag line VA 16 n para 128KB VA 16 n L nea de datos VA Q1 n para 4 MB VA Q1 n ECC CS Pldx Tag n 4 para lineas de 4 palabras n 3 para l neas de 8 palabras n 6 para l neas de 16 palabras n 7 para l neas de 32 palabras Dato Figura 23 Organizaci n de los datos y etiquetas de la cach secundaria Estados de la Cach Estos cuatro t rminos se usan para describir el estado de una l nea de cach e Exclusive Una l nea de cach que est pre
130. 4 if GPR rs lt immediate s immediate s then GPR rt 0 1 else GPR rt lt 0 endif Excepciones Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 163 Simulador de instrucciones del microprocesador MIPS R4000 Ninguna SLTIU Set On Less Than Immediate Unsigned El formato de la instrucci n es SLTIU rt rs i mmediate Descripci n de la instrucci n El dato inmediato de 16 bits hace una extensi n de signo y se compara con el contenido del registro rs Considerando ambas cantidades como enteros sin signo si el registro rs es menor que el dato inmediato con su extensi n de signo el resultado se pone a uno en caso contrario el resultado se pone a cero El resultado se guarda en el registro rt Operaci n 32 64 Excepciones if 0 GPR rs lt immediate s immediate s o then GPR rt lt 0 1 else GPR rt lt 0 endif if 0 GPR rs lt immediate s immediate s o then GPR rt lt 0 1 else GPR rt lt 0 endif Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 164 Simulador de instrucciones del microprocesador MIPS R4000 SLTU Set On Less Than Unsigned El formato de la instrucci n es SLTU rd rs rt Descripci n de la instrucci n El contenido del registro rt se compara con el contenido del registro rs Considerando ambas cantida
131. 65535 destino lt 0 Si est fuera de un rango l gotoxy 30 23 printf Direccitn fuera de rango Ed if destino 4 0 Si no est alineada Ap ndice II C digo fuente del simulador P g 325 Simulador de instrucciones del microprocesador MIPS R4000 General Exception Se produce un error de direccionamiento gotoxy 30 23 printf Address Error exception else En otro caso destino destino 4 restamos 4 a destino rpg 34 1 destino En el contador de programa metemos direcc destino else if Estado UX 1 para 64 bits if rpg rs 0 0 rpg rs 0 0 amp amp destino gt 65535 destino lt 0 gotoxy 30 23 printf Direccitn fuera de rango else if destino 4 0 Si la palabra no est alineada General_Exception Se produce un error de direccionamiento gotoxy 30 23 printf Address Error exception else En otro caso destino destino 4 Restamos 4 a destino rpg 34 1 destino En el contador de programa metemos direc destino Fin de la instrucci n JR ULONG multiplicacion ULONG m12 ULONG m11 ULONG m22 ULONG m21 char c UCHAR a 8 b 8 a es el multiplicando y b el multiplicador UCHAR resul 9 16 guardamos el resultado en fila 9 unsigned int acarreo suma int 1 J k UCHAR alta 4 altamedia 4 bajamedia 4 baja 4 ULONG uno dos tres cuatro a
132. AL ULONG instruccion Branch On Less Than Zero and Link UCHAR rs Para coger el nfmero de registro signed long int offset Para el desplazamiento ULONG auxi condicion Variable auxiliar y condici n rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion amp 0x0000FFFF Cogemos el desplazamiento offset offset lt lt 2 Desplazamos dos bits hacia la izquierda auxi offset En auxi metemos el contenido de offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset 0xFFFC0000 Se hace una extensi n de signo con unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 rpg 31 1 rpg 34 1 8 Metemos la direc de la instr despu s de delay slot Ap ndice II C digo fuente del simulador P g 265 Simulador de instrucciones del microprocesador MIPS R4000 if condicion 0 Si el bit 32 es distinto de cero rpg 34 1 rpg 34 1 offset Sumamos al CP el desplazamiento J else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 rpg 31 1 rpg 34 1 8 Metemos la direc de la instr despu s de delay slot if condicion 0 Si el bit 64 es distinto de cero rpg 34 1 rpg 34 1 offset Sumamos al CP el desplazamiento Fin de la instrucci n BLTZAL void BLTZALL U
133. ALL void TEQI ULONG instruccion Trap If Equal Immediate Al offset se le hace una extensi n de signo y se compara con el contenido del registro rs Si el contenido del registro rs es igual al dato inmediato Ap ndice IT C digo fuente del simulador P g 268 Simulador de instrucciones del microprocesador MIPS R4000 extendido el signo ocurre una Trap exception UCHAR rs Para el n f mero del registro rs ULONG inmediato inme0 auxi Parte alta y baja de dato inmediato y auxiliar rs Campo RS instruccion Cogemos el campo rs de la instrucci tn inmediato instruccion Ox0000FFFF Cogemos el dato inmediato auxi inmediato gt gt 15 En auxi metemos inmediato desplazado 15 bits drcha if auxi 0 Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Hacemos la extensitn de signo a unos inme0 0xFFFFFFFF Ponemos la parte alta todo a unos else if auxi 0 Si auxi es igual a cero inme0 0x00000000 Ponemos la parte alta de inmediato todo a unos if Estado UX 0 Para 32 bits if rpg rs 1 inmediato Si parte baja del reg es igual a inmediato General Exception Trap exception gotoxy 30 23 printf Trap exception EN else if Estado UX 1 Para 64 bits if rpg rs 0 inme0 amp amp rpg rs 1 inmediato Si son iguales General_Exception Trap exception gotoxy 30 23 p
134. Address error exception SEL Shift Left Logical El formato de la instrucci n es SLL rd rt sa Descripci n de la instrucci n El contenido del registro rt se desplaza hacia la izquierda sa bits insertando ceros en los bits de orden bajo El resultado se guarda en el registro rd En modo 64 bits el resultado de 32 bits hace una extensi n de signo cuando se mete en el registro destino Operaci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 160 Simulador de instrucciones del microprocesador MIPS R4000 32 GPR rd lt 4 GPRI rtl31 sa o 0 64 s amp 0 sa temp GPR rtl31 s 0 11 05 GPR rd lt tempa1 temp Excepciones Ninguna SLLV Shift Left Logical Variable El formato de la instrucci n es SLLV rd rt rs Descripci n de la instrucci n El contenido del registro rt se desplaza a la izquierda el n mero de bits especificados por los cinco bits de orden bajo que contiene el registro rs El resultado se guarda en el registro rd En modo 64 bits el resultado de 32 bits hace una extensi n de signo cuando se guarda en el registro destino Operaci n 32 s lt GPR csla 0 GPR rd GPR rt 31 s 0 a 64 s E 0 GPR rs a o0 temp GPR rt 31 s 0 11 05 GPR rd lt temp31 temp Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 161 Simulador de instrucciones del microprocesador
135. D ULONG instruccion L Hace una extensi n del signo d base para formar una direccicn direcci n de memoria especificad rt Ocurre un error de direccion Si se ejecuta en modo 32 bits us instruction exception UCHAR rt base aca base es e signed long int off0 offset de des ULONG auxi Variable auxil ULONG datomenorpeso datomayorp UCHAR doble0 4 doble1 4 int ijy Para utilizarlas TE base offset auxi auxi Campo RT instruccion Campo RS instruccion instruccion amp 0x0000F offset En auxi metem auxi gt gt 15 if auxi 0 Si auxi es dist oad Doubleword offset y se suma al contenido del registro El contenido de la doble palabra en la a por la direcci n se carga en el registro amiento si la direccitn no es m ltiplo de 8 uario o supervisor se produce una reserved l campo de rs st0 destino Parte alta y baja de off y iar eso Para el dato de mayor y menor peso Para coger los datos de memoria como ndices Cogemos el campo rt de la instruccicn Cogemos el campo base de la instruccitn FFF Cogemos el campo offset de la instr os lo que hay en la variable offset Desplazamos 15 bits hacia la derecha into de cero offset off0 else if OxFFFF0000 Ponemo offset OXFFFFFFFF auxi 0 Si auxi Hacemos una extensi n de signo a unos s la parte alta de offset a unos es igual a cero off0 0 Ponemos la par dest
136. E000 0000 0 5 GB AE BES 0x FFFF FFEF C000 0000 Mapeables apeados 0x C000 0000 0 5 GB No mapeables 0 5 GB ara 0x FFFF FFFF A000 0000 No cacheables No cacheables 0 5 GB 0x A000 0000 No mapeables 0 5 GB 0x FFFF FFFF 8000 0000 No cacheables No mapeables No cacheables Address Ox 8000 0000 0x C000 OOFF 8000 0000 Error Mapeable 0x C000 0000 0000 0000 0x 8000 0000 0000 0000 0x 4000 0100 0000 0000 Error 1 TB 2GB Mapeados Mapeados 0x 4000 0000 0000 0000 0x 0000 0100 0000 0000 Error 1 TB Mapeados 0x 0000 0000 0x 0000 0000 0000 0000 Figura 11 Espacio de direcciones virtuales en modo Kernel A continuaci n vamos a ver la tabla de segmentos en modo Kernel 32 bits Caracter sticas generales del procesador MIPS R4000 P g 27 Simulador de instrucciones del microprocesador MIPS R 4000 Valores de los Valores de bits del bits de la registro de estado Nombre Rango de Tama o direcci n KSU EXL ERL KX Segmento direcciones segmento 0x0000 0000 2 GB A 31 0 0 kuseg E Ox7FFF FFFF 2 bytes 0x8000 0000 512 MB A 31 29 1005 KSU 00 gt 0 kseg0 30 Ox9FFF FFFF 27 bytes or OxA000 0000 512 MB AG1 29 101 gt EXL 1 0 ksegl gt OxBFFF FFFF 27 bytes or 0xC000 0000 512 MB A 31 29 110 ERL 1 0 ksseg gt OxDFFF FFFF Q bytes 0xE000 0000 512 MB AG1 29 111 gt 0 kseg3 si OxFFFF FFFF 27 bytes Caracter sticas generales del procesador MIPS R400
137. EL R4000 Por ltimo en la figura 28 se muestra el diagrama de bloques interno del MIPS R 4000 para tener una idea general de c mo est organizado por dentro Control Control de Cach Contol de Cach de De Cach de datos Cach Instrucciones Sistema Secundaria Primaria CPO CPU FPU Registros de Registros de Excepci n Ctrl la CPU Registros de la FPU Registros de Manejo de Mem ALU Bypass del Pipeline Load Aligner Store TLB s Driver Multiplic En P Flot Multipl Divisor entero Divisor en Pto Flot Unidad de direcciones Suma en Pto Flotante Raiz Cuadrada Incrementador del CP Control del Pipeline Figura 28 Diagrama de bloques interno del R4000 Caracter sticas generales del procesador MIPS R4000 P g 59 CAP TULO 2 MANUAL DE USUARIO DEL SIMULADOR DE INSTRUCCIONES MIPS R 4000 Simulador de instrucciones del microprocesador MIPS R4000 Antes de comenzar a explicar como funciona el programa vamos a enumerar las instrucciones que est n implementadas en el simulador INSTRUCCIONES IMPLEMENTADAS Instrucciones de Carga y Almacenamiento OpCode Descripci n LB Load Byte LBU Load Byte Unsigned LH Load Halfword LHU Load Halfword Unsigned LW Load Word LWL Load Word Left LWR Load Word Right SB Store Byte SH Store Halfword Sw Store Word SWL Store Word Left SWR Store Word Rig
138. F La parte alta de offset se pone todo a unos else if auxi 0 Si auxi es igual a cero off0 0 Metemos la parte alta de offset todo a ceros destino rpg base 1 offset Hacemos registro base desplazamiento dest0 rpgl base 0 off0 Hacemos reg base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta del destino en uno datoalmac rpg rt 1 1 En datoalmac metemos la parte baja del registro dato lontocar datoalmac Pasamos el dato long a array de caracteres if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si se sale del rango gotoxy 30 23 printf Direccitn fuera de rango else if destino 4 0 Si no es multiplo de 4 General Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango y no hay error de direccionamiento f fseek pf destin SEEK SET nos posicionamos en el fichero memoria for i 0 i lt 4 i if Estado RE 0 Si es little endian j 3 i Ap ndice II C digo fuente del simulador P g 311 Simulador de instrucciones del microprocesador MIPS R4000 else if voi else if j i 1f fwrite amp dato Error Error al Estado UX if gotoxy
139. FFF FFFF 0x FFFF FFFF FFFF FFFF Address Address Error Error 0x 8000 0000 0x 0000 0100 0000 0000 2GB 1 TB Mapeados Mapeados 0x 0000 0000 0x 0000 0000 0000 0000 Figura 9 Espacio de direcciones virtuales en modo usuario En la tabla que podemos ver a continuaci n observamos las caracter sticas de los dos segmentos en modo usuario useg y Xuseg Operaciones en modo Supervisor Valores de los Valores de bits del bits de la registro de estado Nombre Rango de Tama o direcci n KSU EXL ERL UX Segmento direcciones segmento 32 bits 0x00000000 2 Gbyte 102 0 0 useg 3i A 31 0 0x7FFFFFFF 2 bytes 64 bits 0x0000000000000000 1 Tbyte 102 0 0 xuseg d A 63 40 0 0x000000FFFFFFFFFF 2 bytes El modo supervisor est designado para sistemas operativos en los que un kernel verdadero corre en modo kernel y el resto del sistema operativo corre en modo supervisor La figura 10 muestra el espacio de direcciones virtuales en modo Supervisor Caracter sticas generales del procesador MIPS R4000 P g 25 Simulador de instrucciones del microprocesador MIPS R 4000 32 bits 64 bits 0x FFFF FFFF 0x FFEF FFFF FFFF FFFF 0x E000 0000 Foor 0x FFFF FFFF E000 0000 TAON 0 5 GB 0 5 GB 0x C000 0000 Mapeados 0x FFFF FFFF C000 0000 Mapeados 0x A000 0000 Error 0x 4000 0100 0000 0000 Error Address 1 TB 0x 8000 0000 Error Mapeados 0x 4000 0000 0000 0000 0x 0000 0100 0000 0000 Error Mapeados 0x 0000
140. FFFF La parte alta de inmediato se pone todo a unos else if auxi 0 Si auxi es igual a cero inme0 0x00000000 La parte alta de inmediato se pone todo a ceros if Estado UX 0 Para 32 bits if regrs lt inmediato Si regrs es menor que inmediato General_Exception Trap exception gotoxy 30 23 printf Trap exception Aa else if Estado UX 1 Para 64 bits if rpg rs 0 0 inme0 0 Si la parte alta es distinta de cero Ap ndice II C digo fuente del simulador P g 274 Simulador de instrucciones del microprocesador MIPS R4000 if rpg rs 0 inme0 Y las dos partes son distintas regrs rpg rs 0 En regrs metemos parte alta del registro rs if regrs lt inme0 Si regrs es menor que parte alta de inmediato General_Exception Trap exception gotoxy 30 23 printi 1 Trap exception a else if rpg rs 0 inme0 Si las dos partes altas son iguales if regrs lt inmediato Si regrs es menor que parte baja de inmediato General_Exception Trap exception gotoxy 30 23 printf Trap exception 2 else Si las dos partes altas son igual a cero if regrs lt inmediato Comparamos parte baja del reg y baja de inmediato General Exception Trap exception gotoxy 30 23 printf Trap exception 1d VO ES Fin de la instrucci n TLTIU id TEQ ULON
141. FFFF8 Cogemos el limite de dobleword m s ximo if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits Ap ndice II C digo fuente del simulador P g 300 Simulador de instrucciones del microprocesador MIPS R4000 if g P dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale otoxy 30 23 Nos situamos rintf Direcci n fuera de rango Informamos else Si no se sale de los l1 mites de la memoria fs fo i j e j i fo i j e J i eek pf destino SEEK_SET Nos situamos en el fichero de la memoria r i 0 i lt 4 i f Estado RE 0 Si es little endian 31G lse if Estado RE 1 Si es big endian f fread doble0 3 sizeof UCHAR 1 pf 0 Cogemos 4 bytes Error Error al acceder a memoria r i 0 i lt 4 1 f Estado RE 0 Si es little endian 3 i lse if Estado RE 1 Si es big endian f fread 8doblel 3 sizeof UCHAR 1 pf 0 Cogemos 4 bytes Error Error al acceder a memoria Estado RE 0 Si es little endian datomenorpeso chartolong doble0 En datomenorpeso metemos doble0 datomayorpeso chartolong doblel En datomayorpeso metemos doblel
142. G instruccion Trap if equal Esta instrucci n causa una Trap exception si el contenido del registro es igual que el contenido del registro rt UCHAR rs rt Para coger el n mero del registro rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn if Estado UX 0 Para 32 bits if rpg rs 1 rpg rt 1 si el reg rs es igual al rt General Exception Trap exception gotoxy 30 23 printf Trap exception Aa else if Estado UX 1 Para 64 bits if rpglrs 0 rpg rt 1 0 amp amp rpg rs 1 rpg rt 1 Ap ndice II C digo fuente del simulador P g 275 Simulador de instrucciones del microprocesador MIPS R4000 VO no VO re si si el registro rs es igual al rt General_Exception Trap exception gotoxy 30 23 printf Trap exception DD Fin de la instruccitn TEQ id TNE ULONG instruccion Trap if not equal Esta instrucci n produce una excepci tn si el contenido del registro rs es igual al contenido del registro rt UCHAR rs rt Para el n mero de los registros rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn if Estado UX 0 Para 32 bits if rpg rs 1 1 rpg r
143. GTZL ULONG instruccion Branch if Greater Than Zero Likely Si el registro rs es mayor que cero el programa hace un salto relativo marcado por el campo offset Si la condici n no se cumple la siguiente instrucci n que hay en memoria despu s de esta no se ejecuta UCHAR rs Para coger el nfmero del registro rs signed long int offset Para el desplazamiento relativo ULONG auxi condicion Para variable auxiliar y condici tn rs Campo RS instruccion Cogemos el campo rs de la instruccitn offset instruccion Ox0000FFFF Cogemos el campo offset de la instr offset offset lt lt 2 Desplazamos dos bits hacia la izquierda auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCOO0OO Hacemos extensin de signo todo a unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 amp amp rpg rs 1 0 Si es mayor que cero rpg 34 1 rpg 34 1 offset Al CP se le suma el desplazamiento else Si no es mayor que cero rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction se anula else if Estado UX 1 Para 64 bits Ap ndice IT C digo fuente del simulador P g 262 Simulador de instrucciones del microprocesador MIPS R4000 condicion rpg rs 0 gt gt 31 miramos el
144. Hacemos la and con parte baja datomenorpeso datomenorpeso gt gt 8 Desplazamos 8 bits hacia derecha datomayorpeso datomayorpeso lt lt 24 Desplazamos 24 bits hacia izq rpg rt 0 datomenorpeso datomayorpeso Hacemos or de uno y otro rpg rt 1 reg rt 1 auxi Hacemos or de parte baja y auxi else if desplaz 4 rpg rt 0 datomenorpeso Si es 4 mete todo else if desplaz 5 Si desplazamiento es igual a cinco datomenorpeso datomenorpeso lt lt 8 Desplazamos datomenorp 8 bits izq rpg rt 0 srpg rt 0 amp 0x000000FF Hacemos la and con parte alta rpg rt 0 reg rt 0 datomenorpeso Hacemos or con datomenorpeso else if desplaz 6 Si desplazamiento es igual a seis datomenorpeso datomenorpeso lt lt 16 Desplazamos datomenorpso 16 izq rpg rt 0 rpeg rt 0 amp 0x0000FFFF Hacemos and con parte alta rpg rt 0 reg rt 0 datomenorpeso Hacemos or con datomenorpso else if desplaz 7 Y si el desplazamiento es igual a siete datomenorpeso datomenorpeso lt lt 24 Desplazamos 24 bits hacia izq rpg rt 0 rpg rt 0 amp Ox00FFFFFF Hacemos and con parte alta rpg rt 0 reg rt 0 datomenorpeso Hacemos or con datomenorpso fin de la instrucci tn LDL void LDR ULONG instruccion Load Doubleword Right Esta instrucci n puede usarse en combinaci n con la instrucci n LDL para cargar un registro con ocho bytes consecutivos de memoria
145. II C digo fuente del simulador P g 246 Simulador de instrucciones del microprocesador MIPS R4000 fin de la instrucci n DSRA32 void DSRL ULONG instruccion Doubleword Shift Right Logical El contenido del registro rt se desplaza sa bits insertando ceros en los bits de mayhor peso El resultado se guarda en el registro rd UCHAR rt rd sa Para el n fmero de registro y desplazamiento ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn auxi instruccion amp 0x00007C0 Cogemos el campo sa de la instrucci n auxi auxi gt gt 6 Lo desplazamos 6 bits hacia la derecha sa UCHAR auxi Lo pasamos a tipo unsigned char if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits auxi rpg rt 0 lt lt 32 sa metemos parte alta despla izq 32 sa bits rpg rd 0 rpg rt 0 gt gt sa Desplazamos sa bits derecha parte alta rpg rd 1 rpg rt 1 gt gt sa Desplazamos sa bits derecha parte baja rpg rd 1 reg rd 1 auxi Hacemos la or de parte baja y auxi void DSRLV fin de la instrucci n DSRL ULONG instruccion Si est En modo 64 UCHAR rt ULONG au
146. Intro datos 4 19 Opci n uno Introducir programa Opci n dos Introducir datos en memoria Opci n tres Ejecuci tn del programa Opci n cuatro Ver a partir de una direcc Reset Opci tn cinco Hace un reset del procesador Opci n seis Introducimos datos en los regs Opci n siete Inicia CP al principio del progr Permite cambiar la configuraci tn de simulador Muestra informaci n del realizador del proyecto S Salir Se sale del programa Finaliza void creditos void Esta funci n proporciona informaci n sobre el autor del proyecto Ap ndice II C digo fuente del simulador P g 193 Simulador de instrucciones del microprocesador MIPS R4000 limpia 2 17 56 20 limpiamos una zona de la pantalla go RO Q a 1 9 0 int e U c U TE d w V x y d lec toxy 3 18 intf Autor Miguel Angel Hern ndez Pinto Nombre del autor toxy 3 17 intf Carrera Ingeniero T cnico en Inform tica de Sistemas carrera toxy 3 19 intf Ano 1999 A mo en el que termint el proyecto toxy 42 20 intf Pulsa tecla Informaci n para el usuario tch eeraa hasta que se pulse una tecla Introducir datos void sta funci n nos permite introducir datos en la memoria byte a byte CHAR dato har op LONG direccion nt x y escape o limpia 2 17 56 20 5 lim
147. L TLB TRANSLATION LOOKASIDE BUFFER Las direcciones virtuales mapeadas son traducidas en direcciones f sicas usando un TLB en el chip El TLB es una memoria totalmente asociativa de 48 entradas que proporciona mapeado a 48 parejas de p ginas impares pares 96 p ginas Cada entrada de TLB se chequea simult neamente para un acierto con la direcci n virtual que se amplia con un almacenamiento en ASID en el registro EntryHl Aciertos y fallos Si hay un acierto de la direcci n virtual en el TLB el n mero de p gina f sica se extrae del TLB y se concatena con el desplazamiento offset para formar la direcci n f sica ver figura 8 Si no hay ning n acierto ocurre una excepci n y el software rellena el TLB de la tabla de p ginas residente en memoria El software puede escribir sobre una entrada de TLB seleccionada o usar un mecanismo hardware para escribir en una entrada aleatoria Si hay varios aciertos el TLB se desactiva poniendo a 1 el bit TS del registro de estado Caracter sticas generales del procesador MIPS R4000 P g 22 Simulador de instrucciones del microprocesador MIPS R 4000 Direcci n Virtual 1 Entrada del 2 TLB Direcci n F sica Figura 8 Traducci n de direcci n virtual a f sica 1 La direcci n virtual VA representada por el n mero de p gina virtual VPN se compara con la etiqueta en el TLB 2 Si hay un acierto el n mero de marco de p gina PEN representado por
148. LLV RD RT RS 000100 SLT RD RS RT 101010 SLTU RD RS RT 101011 SRAV RD RT RS 000111 SRLV_RD RT RS 000110 SUB RD RS RT 100010 SUBU RD RS RT 100011 XOR RD RS RT 100110 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 67 Simulador de instrucciones del microprocesador MIPS R4000 INSTRUCCION C DIGO DE OPERACION COP DDIV_RS RT 011110 DDIVU RS RT 011111 DIV RS RT 011010 DIVU RS RT 011011 DMULT RS RT 011100 DMULTU RS RT 011101 MULT RS RT 011000 MULTU RS RT 011001 TEQ RS RT 110100 TGE RS RT 110000 TGEU RS RT 110001 TLT RS RT 110010 TLTU RS RT 110011 TNE RS RT 110110 INSTRUCCION C DIGO DE OPERACION COP DSLL RD RT SA 111000 DSLL32 RD RT SA 111100 DSRA RD RT SA 111011 DSRA32 RD RT SA 111111 DSRL RD RT SA 111010 DSRE32 RD RT SA 111110 SLL RD RT SA 000000 SRA RD RT SA 000011 SRL RD RT SA 000010 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 68 Simulador de instrucciones del microprocesador MIPS R4000 SPECIAL 000000 INSTRUCCION C DIGO DE OPERACION COP JR_RS 001000 MTHI RS 010001 MTLO RS 010011 31 26 25 SPECIAL 000000 11 10 6 INSTRUCCION C DIGO DE OPERACION COP MFHI RD 010000 MFLO RD 010010 INSTRUCCION C DIGO DE OPERACION COP JALR RS JALR RDRS 001001 Manual
149. LONG instruccion Brch On Lss Thn Zro And Link Likely UCHAR rs Para coger el nfmero de registro signed long int offset Para el desplazamiento ULONG auxi condicion Para variable auxiliar y condici n rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion amp 0x0000FFFF Cogemos el campo desplazamiento offset offset lt lt 2 Desplazamos 2 bits hacia la izquierda auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset 0xFFFC0000 Hacemos la extensi n de signo con unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 rpg 31 1 rpg 34 1 8 Metemos direc de la instr siguiente al delay slt if condicion 0 Si condici n es distinto de cero rpg 34 1 1 rpg 341 1 offset Sumamos al desplazamiento el CP else Si no es distinto de cero rpg 341 11 rpg 34 1 4 NullifyCurrentInstruction else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 rpg 31 1 rpg 34 1 8 Metemos direc de la isntr siguiente al delay slt if condicion 0 Si el bit 64 es distinto de cero rpg 34 1 rpg 34 1 offset Sumamos al CP el offset else Si no es distinto de cero rpg 341 11 rpg 34 1 4 NullifyCurrentInstruction fin de la instru
150. LONG ultimadir Guarda la ultima direccion visualizada en pantalla UCH 00 RI K S U K AR s r 0x02 1e 02 Registro de estado RE KX SX UX KSU 00000010 binario gt Litte Endian 1 gt Big Endian E 0 Xx 0 Xx 0 Xx 0 SU gt 32 bit Kernel 1 gt 64 bit kernel gt 32 bit Superv 1 gt 64 bit Superv gt 32 bit Usuario 1 gt 64 bit Usuario 10 gt Usuario 01 gt Supervisor 00 gt Kernel int registros 0 si es 0 gt del 0 al 15 si es 1 gt del 16 al 31 PROGRAMA PRINCIPAL void main void funci n principal char op respuesta opci tn del men principal y para coger respuesta lineas Dibujamos las l neas de la pantalla Ver memoria 0x0000 Visualizamos la memoria por la pantalla Ver registros 0 Ver CP do O limpia 2 18 56 20 Limpia el interfaz de comandos gotoxy 30 23 printf Limpiamos el lugar de la excepcion menu Saca las opciones del men op getch Pide opci n op toupper op la pasamos a may sculas switch op en caso de que op sea case 1 Meter Instrucc 1 Metemos instrucciones en memoria break se sale del switch case 2 Introducir_datos 2 Introducimos bytes en memoria break case 3 Coger instruccion 3 Ejecuta instrucciones break case 4 opcion opci n para ver la memoria desde cq direcc
151. MIPS R4000 Excepciones Ninguna SLT Set On Less Than El formato de la instrucci n es SLT rd rs rt Descripci n de la instrucci n El contenido del registro rt se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es menor que el contenido del registro rt el resultado se pone a uno en caso contrario el resultado se pone a cero El resultado se guarda en el registro rd Operaci n 32 if GPR rs lt GPR rt then GPR rd 0 1 else GPR rd lt o0 endif 64 if GPR rs lt GPR rt then GPR rd lt 0 1 else GPR rd lt 0 endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 162 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Ninguna SLTI Set On Less Than Immediate El formato de la instrucci n es SLTI rt rs immediate Descripci n de la instrucci n El dato inmediato de 16 bits hace una extensi n de signo y se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el registro rs es menor que el dato inmediato con su extensi n de signo el resultado se pone a uno en caso contrario el resultado se pone a cero El resultado se guarda en el registro rt Operaci n 32 if GPR rs lt immediate1s immediate s then EPR ret e 0 1 else GPR rt 07 endif 6
152. P Fin de la instrucci n BGEZ void BGTZ ULONG instruccion Branch On Greater Than Zero Si el registro rs es mayor que cero el programa hace un salto relativo marcado por el campo offset UCHAR rs Para coger el nfmero del registro rs signed long int offset Para coger el desplazamiento Ap ndice II C digo fuente del simulador P g 261 Simulador de instrucciones del microprocesador MIPS R4000 ULONG condicion auxi Para la condici n y variable auxiliar rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el campo offset de la instr offset offset lt lt 2 Se desplaza dos bits hacia la izquierda auxi offset Metemos offset en auxi auxi auxi gt gt 17 Desplazamos auxi hacia la derecha 17 bits if auxi 0 Si auxi es distinto de cero offset offset OxFFFCO0O00 Hacemos la extensitfn de signo if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 amp amp rpg rs 1 0 Si es mayor que cero rpg 34 1 rpg 34 1 offset Al CP se le suma el offset else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 if condicion 0 amp amp rpg rs 0 0 rpg rs 1 0 Si mayor que cero rpg 34 1 rpg 34 1 offset Al CP se le suma el offset Fin de la instrucci n BGTZ void B
153. R4000 MULTU Multiply Unsigned El formato de la instrucci n es MULTU rs rt Descripci n de la instrucci n El contenido del registro rs y el contenido del registro rt se multiplican tratando ambos operandos como valores sin signo No ocurre Integer overflow exception En modo 64 bits los operandos deben ser valores de 32 bits con extensi n de signo Cuando la operaci n se completa la parte baja del resultado se guarda en el registro de proposito especial LO y la parte alta del resultado se guarda en el registro de proposito especial HI Operaci n PAE 64 Excepciones LO HI LO HI Ninguna T T 0 GPR rs O GPR rt U31 0 U63 32 0 GPR rs 31 o 0 GPRLrtl31 0 ta1 11 t31 0 tes II to Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 151 Simulador de instrucciones del microprocesador MIPS R4000 NOR Nor El formato de la instrucci n es NOR rd rs rt Descripci n de la instrucci n El contenido del registro rs se combina con el contenido del registro rt en una operaci n l gica NOR El resultado se guarda en el registro rd Operaci n 32 64 GPR rd lt GPR rs nor GPR rt Excepciones Ninguna OR Or El formato de la instrucci n es OR rd rs rt Descripci n de la instrucci n El contenido del registro rs se combina con el contenido del registro rt en un
154. Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Extendemos el dato inmediato con 1 inme0 0xFFFFFFFF La parte alta del dato inmediato se pone a unos else if auxi 0 Si auxi es igual a cero Ap ndice II C digo fuente del simulador P g 255 Simulador de instrucciones del microprocesador MIPS R4000 inme0 0x00000000 La parte alta del dato inmediato se pone a ceros if 1 Estado UX 0 Para 32 bits rssigno rpg rs 1 En rssigno metemos la parte baja del registro rs inmesigno inmediato En inmesigno metemos parte baja del dato inmediato if rssigno lt inmesigno Si rssigno es menor que inmesigno rpg rt 1 0x00000001 Ponemos el registro rt a uno parte baja else Si rssigno no es menor que inmesigno rpg rt 1 0x00000000 Ponemos el registro rt a cero parte baja else if Estado UX 1 Para 64 bits rssigno rpg rs 0 En rssigno metemos la parte alta del reg rs inmesigno inme0 En inmesigno metemos la parte alta del dato inmediato rsnosigno rpg rs 1 En rsnosigno metemos la parte baja del reg rs inmenosigno inmediato En inmenosigno metemos la parte baja de inmediato if rpg rs 0 0 inme0 0 Si la parte alta es distinta de cero if rpg rs 0 inme0 y los dos dos datos son distintos I if rssigno lt inmesigno Comparamos las partes altas con signo signo
155. Si el big endian datomayorpeso chartolong doble0 En datomayorpeso metemos doble0 datomenorpeso chartolong doble1 En datomenorpeso metemos doblel if desplaz 0 Si desplazamiento es igual a cero datomayorpeso datomayorpeso gt gt 24 Desplazamos 24 bits hacia derecha rpg rt 1 rpg rt 1 amp OxFFFFFFOO Hacemos la and con parte baja rpg rt 1 srpg rt 1 datomayorpeso hacemos la or con parte baja else if desplaz 1 Si desplazamiento es igual a uno datomayorpeso datomayorpeso gt gt 16 Desplazamos hacia derecha 16 bts rpg rt 1 rpg rt 1 amp 0xFFFF0000 Hacemos and con parte baja rpg rt 1 reg rt 1 datomayorpeso Hacemos or con parte baja else if desplaz 2 Si desplazamiento es igual a dos datomayorpeso datomayorpeso gt gt 8 Desplazamos hacia derecha 8 bits rpg rt 1 srpg rt 1 amp OxFFO00000 Hacemos la and con parte baja rpg rt 1 reg rt 1 datomayorpeso Hacemos or con parte baja else if desplaz 3 rpg rt 1 datomayorpeso Si 3 metemos todo else if desplaz 4 Si desplazamiento es igual a cuatro auxi datomayorpeso gt gt 24 Desplazamos hacia la derecha 24 bits rpg rt 0 rpg rt 0 amp OxFFFFFFOO Hacemos la and con parte alta datomenorpeso datomenorpeso gt gt 24 Desplazamos 24 bits hacia derecha datomayorpeso datomayorpeso lt lt 8 Desplazmos 8 bits hacia izq rpg rt 1 datomenorpeso datomayo
156. Simulador de instrucciones del microprocesador MIPS R4000 RESUMEN El prop sito de este proyecto es crear un simulador de instrucciones del microprocesador MIPS R4000 mediante un programa escrito en lenguaje C El simulador permitir ejecutar el repertorio de instrucciones en coma fija implementadas en l avisando cuando ocurra una excepci n Mediante un men principal el usuario podr moverse por todo el interfaz de usuario del simulador acceder a la memoria a los registros cambiar la configuraci n y ejecutar instrucciones Para todo esto el simulador contar con un fichero en binario de tama o 64K presente en el directorio de trabajo que se usar para simular la memoria principal Los registros de prop sito general as como los de prop sito especial implementados HI LO PC ser n variables del programa Resumen P g 1 INTRODUCCI N Simulador de instrucciones del microprocesador MIPS R4000 El MIPS R4000 es un procesador fabricado por MIPS Tecnologies Inc que sigue la filosof a de dise o RISC Reduced Instruction Set Computer Se trata de un procesador segmentado de 64 bits El integrado incluye la CPU que se encarga de ejecutar las instrucciones de enteros el coprocesador O que se encarga de la gesti n de la memoria y el procesamiento de las excepciones y el coprocesador 1 encargado de la unidad de coma flotante Adem s se hallan en el integrado las dos cach s de primer nivel instrucci
157. T SA Las instrucciones que usan este formato son DSLL DSLL32 DSRA DSRA32 DSRL DSRL32 SLL SRA SRL Ap ndice II C digo fuente del simulador P g 333 Simulador de instrucciones del microprocesador MIPS R4000 UCHAR rd rt sa Para coger el n fmero de los registros y desplazamiento rd Campo RD instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n sa instruccion 0x000007C0 gt gt 6 Cogemos el desplazamiento de bits Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d r d Xh formatos dec nombre rd rt sa void Formato cuatro ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RS Las instrucciones que usan este formato son JR MTHI MTLO UCHAR rs Para coger el nfmero de registro rs Campo RS instruccion Cogemos el campo rs de la instrucci n Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d formatos dec nombre rs void Formato cinco ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RD Las instrucciones que usan este formato son MFHI MELO 1 UCHAR rd Para coger el n fmero de registro rd Campo RD instruccion Cogemos el campo rd de la instrucci
158. Trap exception gotoxy 30 23 printf Trap exception DD Ap ndice II C digo fuente del simulador P g 270 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado UX 1 Para 64 bits rssigno rpg rs 0 En rssigno metemos parte alta de reg rs rsnosigno rpg rs 1 En rsnosigno metemos parte baja de reg rs inmesigno inme0 En inmesigno metemos parte alta de dato inmediato inmenosigno inmediato En inmenosigno metemos parte baja de dato inmed If rpg rs 0 0 inme0 0 Si la parte alta de los datos es 0 if rpg rs 0 inme0 Si las dos partes altas son distintas if rssigno gt inmesigno rssigno inmesigno Si mayor o igual General Exception Trap exception gotoxy 30 23 print Trap exception el else if rpgl lrs 0 inme0 if rsnosigno gt inmenosigno rsnosigno inmenosigno Si gt o igual General Exception Trap exception gotoxy 30 23 printf Trap exception T else Si la parte alta de los dos datos es igual a cero igual if rsnosigno gt inmenosigno rsnosigno inmenosigno Si mayor o General_Exception Trap exception gotoxy 30 23 print Trap exception a Fin de la instrucci n TGEI void TGEIU ULONG instruccion Trap If Greater Than Or Equal Immed Unsigned Al dato inmediato se 1 xtiend l signo
159. UI ULONG instruccion Load Upper Immediate El dato inmediato se desplaza hacia la izquierda 16 bits y se concatena con 16 bits de ceros El resultado se guarda en el registro rt En modo 64 bits la palabra cargada hace una extensi n de signo UCHAR rt Para coger el nfmero de registro rt signed long int inmediato Para coger el dato inmediato ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucciftn inmediato instruccion amp 0x0000FFFF Cogemos el campo inmediato de la ins auxi inmediato gt gt 15 En auxi guardamos inmediato despl 15 bits drcha if Estado UX 0 Para 32 bits inmediato inmediato lt lt 16 Desplazamos inmediato 16 bits hacia la izq rpg rt 1 inmediato En la parte baja del reg rt metemos inmediato else if Estado UX 1 Para 64 bits inmediato inmediato lt lt 16 Desplazamos inmediato 16 bits hacia la izq rpg rt 1 inmediato En la parte baja del reg rt metemos inmediato if auxi 0 Si auxi es distinto de cero rpg rt 0 0xFFFFFFFF Hacemos la extensi n de signo a unos parte alta else if auxi 0 Si auxi es igual a cero rpg rt 0 0x00000000 Hacemos extensi n de signo a ceros parte alta Fin de la instruccit tn LUI void SB ULONG instruccion Store Byte Al offset se 1 xtiend l signo y se suma con el contenido del reg
160. X X X X 4 gt 0000 76 58 73 45 39 X X X 5 gt 0000 31 76 58 T3 45 39 X X 6 gt 0000 29 31 76 58 T3 45 39 X 7 gt 0000 2A 29 31 76 58 Ss 45 39 X Lo que hab a en memoria antes de SDL Excepciones Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 156 Simulador de instrucciones del microprocesador MIPS R4000 Reserved instruction exception En modo 32 bits El formato de la instrucci n es SDR Store Doubleword Right SDR rt offset base Descripci n de la instrucci n Esta instrucci n puede usarse con la instrucci n SDL para almacenar el contenido de un registro en ocho bytes de memoria consecutivos cuando los bytes cruzan el l mite de una doble palabra Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario Se almacenar n de uno a ocho bytes dependiendo del byte de comienzo especificado Si la instrucci n de ejecuta en modo de operaci n 32 bits se produce una Reserved instruction Exception Operaci n Tenemos una doble palabra doubleword que es 394573587631292A Para Big Endian Registro PE 39 45 73 58 76 31 29 2A Memoria Despla Dir Direcciones de memoria Z 0 gt 0000 2A X X X X X X X 1 gt 0000 29 2A X X X X X X 2 gt 0000 31 29 2A X X X X X
161. a operaci n l gica OR El resultado se guarda en el registro rd Operaci n 32 04 GPR rd lt GPR rs or GPR rt Excepciones Ninguna Ap ndice 1 Descripci n de las instrucciones implementadas en el simulador P g 152 Simulador de instrucciones del microprocesador MIPS R4000 ORI Or Immediate El formato de la instrucci n es ORI rt rs immediate Descripci n de la instrucci n En el dato inmediato de 16 bits se hace una extensi n con ceros y se combina con el contenido del registro rs in una operaci n l gica OR El resultado se guarda en el registro rt Operaci n 32 GPR rt lt GPR rs 31 16 immediate or GPR rs l 5 0 64 GPR rt lt GPR rsle3 16l immediate or GPR rs 15 0 Excepciones Ninguna SB Store Byte El formato de la instrucci n es SB rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar la direcci n a la que vamos a acceder El Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 153 Simulador de instrucciones del microprocesador MIPS R4000 byte menos significativo del registro rt es almacenado en la direcci n de memoria especificada Operaci n 32 direccion offset s5 1 offset1 s 0 GPR base temp lt GPR rtl gt 0 direcci n de memoria lt temp 64 direccion
162. a P tecla 27 break case 2 if paralelo 2 0 do tecla getch tecla toupper tecla if tecla if registros 0 controlamos que al pulsar cambie regs registros si registros es cero lo ponemos a uno Ver registros 16 y visualizamos los registros 16 31 else si registros no es cero es uno Ap ndice II C digo fuente del simulador P g 204 Simulador de instrucciones del microprocesador MIPS R4000 registros lo ponemos a cero Ver registros 0 visualizamos los registros 0 15 jwhile tecla E amp amp tecla P amp amp tecla 27 5 paralelo 0 break Case 3 if rpg 34 1 breakpoint finbreak 1 break gotoxy 29 23 printf Para limpiar la excepcifn if tecla P tecla 27 Si tecla es igual a P break if finbreak 1 Si finbreak es igual a uno break Se sale de la ejecucictn cop Cod_op auxiliar 0xFC000000 Ahora se va a ejecutar la instrucci n switch cop case 0 cop Cod_op auxiliar 0x0000003E if cop lt 64 Para que no se pase del array y no haya error if tabla0 cop NULL Por si se ha equivocado de n mero tabla0 cop auxiliar ejecutamos la instrucci n corresp break case 1 cop Cod_op auxiliar 0x001F0000 if cop lt 20 Para que no se pase del array y no haya error if tablal cop NULL
163. a al contenido del registro rs para formar el resultado que se guarda en el reg rt Si se ejecuta en modo 32 bits se produce una reserved instruction exception y si se produce desbordamiento entonces habr una integer overflow exception UCHAR rs rt aca Para el n mero de registros y acarreo ULONG auxi auxrs0 inme0 auxrt0 Variables auxiliares para ver bit signo signed long int inmediato regrs1l regrs0 regrt0 regrtl Var intemedias rs Campo RS instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instruccicn inmediato instruccion Ox0000FFFF Cogemos el dato inmediato de instr auxi inmediato El dato inmediato lo metemos en auxi auxi auxi gt gt 15 Lo desplazamos 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero inme0 OxFFFFFFFF La parte alta de inmediato es todo unos inmediato inmediato 0xFFFF0000 Hacemos extensi n del dato inmedi else if auxi 0 Si auxi es igual a cero inme0 0x00000000 La parte alta de inmediato es todo ceros regrs0 rpg rs 0 En regrs0 metemos parte alta del registro rs regrsl rpglrs 1 En regrsl metemos parte baja del registro rs inme0 Sumamos las partes altas regrt0 regrs0 1 inmediato se hace la suma y el resultado en regrt regrtl regrs Ap ndice II C digo fuente del simulador P g 237 Simulador
164. a ver signo if Estado UX 0 para 32 bits rpg rd 1 regrd Guardamos en el registro el resultado else if Estado UX 1 para 64 bits rpg rd 1 regrd metemos el resultado en el registro destino ahora vamos a hacer la extensin de signo if auxrd 0 Si auxrd es distinto de cero rpg rd 0 0xFFFFFFFF Ponemos la parte alta toda a unos else if auxrd 0 Si auxrd es igual a cero rpg rd 0 0x00000000 Ponemos la parte alta toda a ceros Fin de la instrucci n SUBU void ANDI ULONG instruccion And Immediate Esta operaci n hace la and ltgica de un dato inmediato de 16 bits con los 16 bits de menor peso del registro rs El resultado se guarda en el registro rt Ap ndice IT C digo fuente del simulador P g 222 Simulador de instrucciones del microprocesador MIPS R4000 UCHAR rs rt indican el n mero de registro ULONG auxi inmediato variable auxiliar y dato inmediato rs Campo RS instruccion cogemos el campo rs de la instrucciftn rt Campo RT instruccion cogemos el campo rt de la instrucciftn auxi instruccion Ox0000FFFF vamos a calcular el dato inmediato inmediato auxi metemos el dato en inmediato if Estado UX 0 para 32 bits auxi inmediato amp rpg rs 1 se hace la and de inmediato y reg rs rpg rt 1 auxi amp 0x0000FFFF se cogen los 16 bits de menor peso del resultado els
165. ace multiplicaci n A Dividir Hace la divisi n Lontocar Pasa dato de 32 bits a 4 de 8 bits Chartolong Pasa 4 datos de 8 bits a 1 de 32 OPC_4 Limpia Limpia una zona de la pantalla Leedir Lee direcci n de teclado Ver_memor la Visualiza la memoria por pantalla REGISTROS Limpia Limpia una zona de la pantalla Leebytedecimal Lee byte en decimal de teclado Leeinstr Lee instrucci n de teclado Ver_Registros Visualiza los registros REINICIAR_CP Limpia Limpia una zona de la pantalla Leedir Lee direcci n de teclado Ver_memor la gt Visualiza la memoria por pantalla Ver_CP gt Visualiza el contenido del CP CONFIGURACI N Limpia Limpia una zona de la pantalla Estado Devuelve estado de un campo de reg Estado CR DITOS Este procedimiento no hace ninguna llamada a otro procedimiento o funci n dentro de l Descripci n del dise o del simulador de instrucciones P g 92 AP NDICE I DESCRIPCI N DE LAS INSTRUCCIONES IMPLEMENTADAS EN EL SIMULADOR MIPS R4000 Simulador de instrucciones del microprocesador MIPS R4000 ADD Add El formato de esta instrucci n es ADD rd rs rt Descipci n de la instrucci n El contenido del registro rs y el contenido del registro rt se suman y el resultado se guarda en el registro rd En modo 64 bits el bit 31 del resultado se extiende Ocurre una excepci n de desbordamiento si ocurre un overflow en complemento a 2 El registro
166. aci n lista la cach y la coherencia de cach soportada por los tres modelos del R4000 Modelo Soporta cach Soporta cach Soporta coherencia R4000 primaria secundaria de cach R4000PC Si No No R40008C Si Si No R4000MC Si Si Si La figura 18 proporciona diagramas de bloques para los tres modelos del R4000 e R4000PC que soporta solo la cach primaria e R40005C y R4000MC que soportan cach s primaria y secundaria Caracter sticas generales del procesador MIPS R4000 P g 43 Simulador de instrucciones del microprocesador MIPS R 4000 Solo la cach primaria R4000PC Controlador de Cach Memoria Principal Cach s Primarias Cach s Primaria y Secundaria R4000SC MC Controlador de Cach Memoria Principal Cach s Primarias Cach Secundaria Figura 18 Cach soportada en el R4000PC R40005C Y R4000MC Tama o de la cach secundaria La tabla que se muestra a continuaci n lista el rango de tama os de la cach secundaria La cach secundaria puede ser una cach unida conteniendo datos e instrucciones en una simple cach o puede estar dividida en cach s separadas de datos e instrucciones Cach Tama o M nimo Tama o M ximo Cach secundaria unida 128 Kbytes 4 Mbytes I Cach secundaria dividida 128 Kbytes 2 Mbytes D Cach secundaria dividida 128 Kbytes 2 Mbytes Caracter sticas generales del proces
167. ado UX 1 para 64 bits if rpg rs 0 0 rpg rs 0 0 amp amp destino gt 65535 destino lt 0 gotoxy 30 23 printf Direcci n fuera de rango Direccitn fuera de rango else if destino 4 0 Si la direcci n no es alineada word General_Exception Se produce un error de direccionamiento gotoxy 30 23 printf Address Error exception else en otro caso if rd 0 Si el n mero rd es igual a cero rpg 31 1 rpg 34 1 8 Guardamos direcc en el registro 31 else if rd 0 Si es distinto de cero rpg rd 1 srpg 34 1 8 Guardamos direcc en el registro rd destino destino 4 restamos 4 a destino rpg 34 1 destino destino En el contador de programa metemos direcc Fin de la instrucci tn JALR void JR ULONG instruccion Jump Register El programa salta incondicionalmente a la direcci tn contenido en el regis tro general rs con un retardo de una instrucci fn Las instrucciones deben estar alineadas Los dos bits de orden bajo del target del registro rs deben ser cero Si no es as cocurrir una address error exception f UCHAR rs Para el n mero del registro signed long int destino Para irse al destino rs Campo RS instruccion Cogemos el campo rs de la instrucci tn destino rpg rs 1 En destino metemos la parte baja del reg rs if Estado UX 0 para 32 bits i if destino gt
168. ador MIPS R4000 P g 44 Simulador de instrucciones del microprocesador MIPS R 4000 Lineas de Cach de longitud variable Una linea de cach es la unidad de informaci n m s peque a que puede ser buscada de la cach y est representada por una simple etiqueta Una l nea de cach primaria puede tener 4 8 palabras de longitud una l nea de cach secundaria puede tener 4 8 16 32 palabras de longitud La longitud de la l nea de cach primaria nunca puede ser m s larga que la de la cach secundaria debe ser siempre menor o igual que la longitud de la l nea de cach secundaria Esto significa que la cach secundaria no puede tener una longitud de l nea de 4 palabras mientras la cach primaria tenga una longitud de l nea de 8 palabras Organizaci n y accesibilidad de la Cach Las cach s primarias de instrucci n y datos son indexadas con una direcci n virtual VA mientras que la cach secundaria es indexada con una direcci n f sica PA Organizaci n de la Cach de Instrucci nes primaria I Cach Cada l nea de datos que son instrucciones de la cach de instrucciones primaria tiene una etiqueta asociada de 26 bits que contiene una direcci n f sica de 24 bits un bit de valido y un bit de paridad La cach de instrucciones primaria del R4000 tiene las siguientes caracter sticas e Mapeado directo e Indexado con una direcci n virtual e Chequeado con una etiqueta f sica e Organizado con una
169. ador de instrucciones del microprocesador MIPS R4000 DMULTU Doubleword Multiply Unsigned El formato de la instrucci n es DMULTU rs rt Descripci n de la instrucci n El contenido del registro rs y el contenido del registro rt se multiplican tratando ambos operandos como valores sin signo No ocurre ninguna Integer overflow exception Cuando la operaci n se completa la parte baja del resultado se guarda en el registro de proposito especial LO y la parte alta del resultado se guarda en el regitro de proposito especial HI Esta operaci n se define solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 t lt 0 GPR rs 0 GPR rt LO t 3 0 HI lt t127 64 Excepciones Reserved instruction exception En modo 32 bits DSLL Doubleword Shift Left Logical El formato de la instrucci n es DSLL rd rt sa Descripci n de la instrucci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 123 Simulador de instrucciones del microprocesador MIPS R4000 El contenido del registro rt es desplazado a la izquierda sa bits insertando ceros en los bits de orden bajo El resultado se guarda en el registro rd Operaci n 64 s 0 sa GPR rd lt GPR rtl 63 8s 0 o Excepciones Reserved Instruction exception En modo 32 bit usuario o super
170. alizar la memoria cuando introducimos la direcci n en el cuadro donde se muestran las direcciones comienza a visualizar los bytes a partir de la direcci n de memoria introducida Ver figuras 10 y 11 MIPS R4000 RO O0O00O00000000000 RI O0000000000000000 R 3 O0000000000000000 R 32 O0000000000000000 R4 0000000000000 R5 200000000000 00000 Re O000000000000000 Rz ro000O0OOOOOOOOOO RE O0000000000000000 R9 3000000000000 000 R10 0000000000000000 R11 0000000000000000 R12 5 0000000000000000 133 0000000000000000 14 0000000000000000 R15 50000000000000000 HI OOOO O0OOO00000000 PEIO0000000000000000 aa Figura 10 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 79 Simulador de instrucciones del microprocesador MIPS R4000 MIPS R4000 ROS O000D0d0oc00na0oao ad A a a R2 O000D000000000n0n 35 O0000000000000000 R4 OOOO OODOOOOOOO R5 O000000000000000 Re O000D000000d00d0 00 EF OOOO OOO OI OIC R8 O0000000000000d0 R9 O0000000c00n0n0oo0d0 R10 DOOOOODO OOO OI R11 0000000000000000 R12 00000000000000 1 Intro program f 3 Creditos R13 0000000000000000 Intro datos Registros Sa 5alir R14 0000000000000000 3 Ejecuci n Inicia EP R15 D0000000000000010 d Wer direcci n Comfigurac HI OOOO OOO0000000000 PC OOOO 0O0OOO 00D000d L OOOO Figura 11 5 Reset Esta opci n inicializa toda la memoria los registros de proposito general 0 31 los de prop sito esp
171. ama salta a la direcci n que se ha formado de la suma anterior Operaci n 32 target e offset s f offset 0 condicion GPR rs GPR rt 1f condicion then PC E PC target endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 98 Simulador de instrucciones del microprocesador MIPS R4000 64 target lot setid offset 0 condicion lt GPR rs GPR rt if condicion then PC E PC target endif Excepciones Ninguna BEQL Branch On Equal Likely El formato de la instrucci n es BEQL rs rt offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits El contenido del registro rs y el contenido del registro rt se comparan Si los dos registros son iguales el programa salta a la direcci n que se ha formado de la suma anterior Si no se cumple la condici n la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Operaci n 32 target amp offset s f offset 0 condicion GPR rs GPRI rt if condicion then PC E PC target else Se anula la siguiente instr endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 99 Simulador de instrucciones del microprocesador MIPS R4000 64 target tttse
172. ampo RS instruccion cogemos el campo rs de la instrucci n rt Campo RT instruccion cogemos el campo rt de la instrucci n rd Campo RD instruccion cogemos el campo rt de la instrucci n if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits rpg rd 0 rpg rs 0 rpgirt 0 rpg rd 1 rpg rs 1 rpg rt 1 rpg rs 11 rpg rt1 11 aca acarreo baja sumamos la parte alta sumamos la parte baja vemos si hay acarreo en parte Ap ndice II C digo fuente del simulador P g 238 Simulador de instrucciones del microprocesador MIPS R4000 if aca 1 rpg rd 0 si hay acarreo incrementamos parte alta fin de la instrucci n DADDU void DADD ULONG instruccion Si esta instrucci n se ejecuta en modo 32 bits se produce una reserved instruction exception Solo se puede ejecutar en modo 64 bits para poder obtener un resultado Suma con signo el registro rt y el rs y el resultado se guarda en el registro rd Se puede producir una excepcitn de desbordamiento UCHAR rs rt rd aca variables de los registros y acarreo signed long int regrs0 regrs1l regrt0 regrtl regrd0 regrd1 var intermedias ULONG auxrs0 auxrt0 auxrd0 variables auxiliares para ver bit 64 cs Campo RS instruccion cogemos el nfmero de registro rs ct
173. ara 32 bits if destino gt 65535 destino lt 0 Si se sale del rango de direcc gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones fseek pf destino SEEK SET Nos situamos en el fichero de memoria if fwrite amp dato sizeof UCHAR 1 pf 0 Escribimos dato en memoria Error Error al acceder a memoria else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones Ap ndice II C digo fuente del simulador P g 308 Simulador de instrucciones del microprocesador MIPS R4000 fseek pf destino SEEK SET Nos vamos a la direcci n destino if fwrite 8 dato sizeof UCHAR 1 pf 0 Escribimos dato en memoria Error Error al acceder a memoria Fin de la instruccit n SB void SH ULONG instruccion Store Halfword Al offset se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n La media palabra menos significativa del registro rt se almacena en la direccitn La direcci n debe ser m ltiplo de dos si no es as se produce un error de direccionamiento UCHAR rt base datol dato2 aca base es el campo
174. arda en el registro 31 Si el contenido del registro rs es mayor o igual que cero el programa salta a la direcci n que se ha formado de la suma anterior Si la condici n no se cumple la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Operaci n 32 target offsetis offset 0 condicion lt GPR rs gt 0 GPR 31 E PC 8 if condicion then PC E PC target else se anula la siguiente instr endif 64 target lof seti h offset 0 condicion lt GPR rs gt 0 GPR 31 E PC 8 if condicion then PC E PC target else se anula la siguiente instr endif Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 109 Simulador de instrucciones del microprocesador MIPS R4000 BGEZL Branch On Greater Than Or Equal To Zero Likely El formato de la instrucci n es BGEZL rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es mayor o igual que cero el programa salta a la direcci n que se ha formado de la suma anterior Si la condici n no se cumple la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Operaci n 32 target offset s f offset 0 co
175. arga la parte izquierda del registro con la parte correspondiente de mayor peso de la palabra En modo 64 bits la palabra cargada hace una extensi n de signo Ap ndice II C digo fuente del simulador P g 290 Simulador de instrucciones del microprocesador MIPS R4000 UCHAR rt base dato 4 desplaz aca Para reg dato desplazam y acarreo signed long int off0 offset dest0 destino Parte alta y baja de offs y dest ULONG auxi Variable auxiliar int i j Se utilizan como ndice rt Campo RT instruccion Cogemos el campo rt de la instruccitn base Campo RS instruccion Cogemos el campo base de la instruccicn offset instruccion Ox0000FFFF Cogemos el campo offset de la instr auxi offset En auxi metemos el contenido de offset auxi auxi gt gt 15 Desplazamos 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OXxFFFFO000 Hacemos la extensi n de signo con unos off0 OXFFFFFFFF Ponemos la parte alta de offset todo a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta de offset a cero destino rpg base 1 offset Hacemos registro base mas desplazamiento dest0 rpg basel 0 off0 Hacemos reg base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno despla
176. as tablaf format auxiliar dec llamada para sacar mnemonico por pantalla dec gt 191 if ejecucion 2 amp amp paralelo 2 0 amp amp rpg 34 1 4 final cop2 Cod_op auxiliar2 0xFC000000 voy a formar el nfmero que dec instr switch cop2 case 0 dec2 0 cop2 Cod_ op auxiliar2 0x0000003F dec2 dec2 cop2 break Case 1 dec2 1 dec2 dec2 lt lt 6 cop2 Cod_ op auxiliar2 0x001F0000 dec2 dec2 cop2 break Ap ndice IT C digo fuente del simulador P g 203 Simulador de instrucciones del microprocesador MIPS R4000 default dec2 2 dec2 dec2 lt lt 6 dec2 dec2 cop2 gotoxy 20 18 if formatos dec nombre NULL dec gt 191 printf No encontrada break else format2 formatos dec2 formato formatos es el array de estructuras tablaf format2 auxiliar2 dec2 llamada para sacar mnemonico por pantalla switch ejecucion Si ejecuci n es case 1 do 1 tecla getch lee tecla tecla toupper tecla La pasa a mayusculas if tecla if registros 0 controlamos que al pulsar cambie regs registros si registros es cero lo ponemos a uno Ver registros 16 y visualizamos los registros 16 31 else si registros no es cero es uno registros lo ponemos a cero ver registros 0 visualizamos los registros 0 15 jwhile tecla E 88 tecl
177. as en el simulador P g 126 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Reserved instruction exception En modo 32 bits DSRA32 Doubleword Shift Right Arithmetic 32 El formato de la instrucci n es DSRAZ32 rd rt sa Descripci n de la instrucci n El contenido del registro rt se desplaza a la derecha 32 sa bits haciendo una extensi n de signo en los bits de mayor peso El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s E 1 sa GPR rd GPR rtles GPR rtles s Excepciones Reserved instruction exception En modo 32 bits DSRL Doubleword Shift Right Logical El formato de la instrucci n es DSRL rd rt sa Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 127 Simulador de instrucciones del microprocesador MIPS R4000 Descripci n de la instrucci n El contenido del registro rt se desplaza a la derecha sa bits insertando ceros en los bits de mayor peso El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s amp 0 sa GPR rd lt 0 GPR rt e3 s Excepciones Reserved i
178. ater Than or Equal Unsigned TLT Trap if Less Than TLTU Trap if Less Than Unsigned TEQ Trap if Equal TNE Trap if Not Equal TGEI Trap if Greater Than or Equal Immediate TGEIU Trap if Greater Than or Equal Immediate Unsigned TLTI Trap if Less Than Immediate TLTIU Trap 1f Less Than Immediate Unsigned TEQI Trap if Equal Immediate TNEI Trap if Not Equal Immediate Extensiones a ISA Instrucciones del CPO OpCode Descripci n ERET Exception Return La p gina que viene a continuaci n contiene una serie de tablas que ser n muy tiles a la hora de que el usuario del simulador tenga que hacer un programa en el mismo En dichas tablas se puede ver que campos utiliza cada instrucci n y el c digo de operaci n de cada una de ellas de este modo el usuario podr codificar f cilmente cualquier instrucci n Manual de Usuario del simulador de instrucciones MIPS R4000 P g 66 Simulador de instrucciones del microprocesador MIPS R4000 FORMATOS Y C DIGOS DE OPERACI N DE LAS INSTRUCCIONES DEL R 4000 31 26 25 21 20 16 15 11 10 65 0 FORMATO INSTRUCCION C DIGO DE OPERACION COP ADD RD RS RT 100000 ADDU RD RS RT 100001 AND RD RS RT 100100 DADD RD RS RT 101100 DADDU RD RS RT 101101 DSLLV_RD RT RS 010100 DSRAV RD RT RS 010111 DSREV_RD RT RS 010110 DSUB RD RS RT 101110 DSUBU RD RS RT 101111 NOR _ RD RS RT 100111 OR RD RS RT 100101 S
179. ato 3J sizeof UCHAR 1 pf 0 Leemos 4 bytes Error Error al acceder a memoria auxi chartolong dato Pasamos la palabra leida a long if Estado RE 0 Si es little endian auxi auxi lt lt 3 desplaz 8 Desplazamos else if Estado RE 1 Si es big endian auxi auxi lt lt desplaz 8 Desplazamos if desplaz 0 Si el desplazamiento es igual a cero if Estado RE 1 rpg rt 1 auxi Metemos en parte baja auxi else if Estado RE 0 Si es little endian rpg rt 1 srpg rt 1 amp Ox00FFFFFF Hacemos and con parte baja rpg rt 1 srpg rt 1 auxi Hacemos or de auxi con parte baja else if desplaz 1 Si desplazamiento es igula a uno if Estado RE 1 rpg rt 1 rpg rt 1 amp 0x000000FF else if Estado RE 0 rpg rt 1 1 rpg rt 1 amp O0x0000FFFF rpg rt 1 reg rt 1 auxi Hacemos or de auxi con parte baja else if desplaz 2 Si desplazamiento es igual a dos if Estado RE else if Estado R 1 rpg rt l1 rpg rt 1 amp 0x0000FFFF 0 rpg rt 1 rpg rt 1 amp 0x000000FF F a rpg rt 1 rpg rt1 1 auxi Hacemos or de auxi con parte baja else if desplaz 3 Si desplazamiento es igual a tres if Estado RE 1 Si es Big endian rpg rt 1 rpg rt 1 amp Ox00FFFFFF Hacemos and con parte baja rp
180. atos dec nombre rt offset printf r d base void Formato doce ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RS OFFSET Las instrucciones que usan este formato son BGEZ BGEZAL BGEZALL BGEZL BLTZ BLITZAL BLTZALL BLTZL UCHAR rs Para coger los n meros de registro ULONG offset Para coger el offset rs Campo RS instruccion Cogemos el campo rs de la instrucci n offset instruccion amp Ox0000FFFF Cogemos el campo offset de la inst Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d 504Xh formatos dec nombre rs offset void Formato trece ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RS IMMEDIATO Las instrucciones que usan este formato son TEQI TGEI TGEIU TLTI TLTIU TNEI UCHAR rs Para coger los n meros de registro ULONG immediato Para coger el offset rs Campo RS instruccion Cogemos el campo rs de la instrucci n immediato instruccion amp 0x0000FFFF Cogemos el campo inmediato de la inst Ap ndice II C digo fuente del simulador P g 336 Simulador de instrucciones del microprocesador MIPS R4000 Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d 04Xh formatos
181. baja fin de la instrucci tn SRL id SRLV ULONG instruccion Shift Right Logical Variable El registro rt se desplaza hacia la derecha el nf fmero de bits especificados r la variable sa UCHAR rt rd rs sa Para guardar el n fmero de los reg y el desplaz ULONG auxi Variable auxiliar e Campo RT instruccion Cogemos el campo rt de la instruccitn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn rs Campo RS instruccion Cogemos el campo rs de la instruccitn auxi rpg rs 1 amp 0x0000001F Cogemos el desplazamiento de bits sa UCHAR auxi este sa se refiere a s if Estado UX 0 Para 32 bits rpg rd 1 rpg rt 1 gt gt sa Desplazamos hacia la derecha else if Estado UX 1 Para 64 bits auxi rpg rt 1 gt gt sa Guardamos en auxi el dato desplazado auxi auxi gt gt 31 lo desplazamos 31 bits hacia la derecha if auxi 0 Si auxi es distinto de cero rpg rd 0 0xFFFFFFFF ponemos la parte alta todo a unos else if auxi 0 Si auxi es igual a cero rpg rd 0 0x00000000 ponemos la parte alta todo a ceros rpg rd 1 rpg rt 1 gt gt sa guardamos el dato en el registro Fin de la instrucci n SRLV Ap ndice IT C digo fuente del simulador P g 250 Simulador de instrucciones del microprocesador MIPS R4000 void SRA ULONG instruccion El contenido del registro rt se desplaza hacia
182. bit 64 if condicion 0 amp amp rpglrs 0 0 rpg rs 1 0 Si mayor que cero rpg 34 1 rpg 34 1 offset Al CP se le suma el desplazamiento else Si no es mayor que cero rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction se anula fin de la instrucci tn BGTZL void BLEZ ULONG instruccion Branch on Less Than or Equal To Zero Si el registro rs es menor o igual que cero el programa hace un salto relativo marcado por el campo offset UCHAR rs Para coger el n mero del registro rs signed long int offset Para el desplazamiento ULONG auxi condicion Para variable auxiliar y condicitn rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion 0x0000FFFF Cogemos el campo offset de la instr offset offset lt lt 2 Desplazamos hacia la izquierda dos bits auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 17 Desplazamos auxi 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFC0000 Se hace una extensi n de signo con unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 rpg rs 1 0 Si es menor o igual que cero rpg 34 1 rpg 34 1 offset Al CP se le suma el offset else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 if condicion 0
183. bits menos significativos de la direcci n a la que vamos a acceder es distinto de cero ocurre una Address error exception Esta operaci n est definida solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 direccion offset loffset is 0 GPR base temp Word A partir de la direcci n GPR rt 0 temp Excepciones Address error exception Reserved instruction exception En modo 32 bits MFHI Move From Hi El formato de la instrucci n es Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 147 Simulador de instrucciones del microprocesador MIPS R4000 MFHI rd Descripci n de la instrucci n El contenido del registro de proposito especial HI es cargado en el registro de proposito general rd Operaci n 32 64 GPR rd lt HI Excepciones Ninguna MFLO Move From Lo El formato de la instrucci n es MFLO rd Descripci n de la instrucci n El contenido del registro de proposito especial LO es cargado en el registro de proposito general rd Operaci n 32 64 GPR rd LO Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 148 Simulador de instrucciones del microprocesador MIPS R4000 MTHI Move To Hi El formato de la instrucci n es MTHI rs Descripci n de la
184. campo base de la instrucci n offset instruccion 0x0000FFFF Cogemos el offset de la instrucci n auxi offset En auxi metemos el contenido de offset auxi auxi gt gt 15 Desplazamos auxi 15 bits hacia la derecha Ap ndice II C digo fuente del simulador P g 316 Simulador de instrucciones del microprocesador MIPS R4000 if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Se extiende el signo con unos off0 OXFFFFFEFEFF La parte alta de offset se pone todo a unos else if auxi 0 Si auxi es igual a cero off0 0 La parte alta de offset se pone todo a ceros destino rpg base 1 offset Hacemos registro base offset dest0 rpg base 0 off0 Hacemos registro base off0 aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno if Estado RE 0 si es little endian doble0 lontocar rpg rt 1 doblel lontocar rpg rt 0 En doble0 metemos parte baja de reg rt Pasamos de long a array de caracteres if Estado RE 1 si es big endian doble0 lontocar rpgg rt 0 En doble0 metemos la parte alta de rt doblel lontocar rpg rt 11 Pasamos de long a array de caracteres if Estado UX 0 amp amp Estado KSU 1 Estado KSU 2 Para 32 bits General E
185. cci n BLTZALL void BGEZL ULONG instruccion Branch if Greater Than or equal to zero likely UCHAR rs Para coger el nfmero de registro Ap ndice II C digo fuente del simulador P g 266 Simulador de instrucciones del microprocesador MIPS R4000 signed long int offset Para el desplazamiento ULONG auxi condicion Variable auxiliar y condicicn rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el offset de la instrucci tn offset offset lt lt 2 Desplazamos 2 bits hacia la izquierda auxi offset En auxi metemos el offset auxis auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCO0O000 Hacemos extensi n de signo con unos if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 Si el bit 32 es igual a cero rpg 34 1 rpg 34 1 offset Sumamos desplazamiento al CP else Si no es igual a cero rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 if condicion 0 Si el bit 64 es igual a cero rpg 34 1 rpg 34 1 offset Sumamos desplazamiento al CP else Si no es igual a cero rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction Fin de la instrucci n BGEZL
186. cci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es menor o igual que cero el programa salta a la direcci n que se ha formado de la suma anterior Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 104 Simulador de instrucciones del microprocesador MIPS R4000 Operaci n DES 64 Excepciones target loffsetis offset 0 condicion lt GPR rs lt 0 if condicion then PC E PC target endif target offsets offset 0 condicion lt GPR rs lt 0 if condicion then PC E PC target endif Ninguna BLEZL Branch On Less Than Or Equal To Zero Likely El formato de la instrucci n es BLEZL rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es menor o igual que cero el programa salta a la direcci n que se ha formado de la suma anterior Si no se cumple la condici n la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 105 Simulador de instrucciones del microprocesador MIPS R4000 Operaci n 32 target
187. ccion void DSRL ULONG instruccion void DSRLV ULONG instruccion void DSRL32 ULONG instruccion void DSUB ULONG instruccion void DSUBU ULONG instruccion void JALR ULONG instruccion void JR ULONG instruccion void MFHI ULONG instruccion void MFLO ULONG instruccion void MTHI ULONG instruccion void MILO ULONG instruccion void MULT ULONG instruccion void MULTU ULONG instruccion void NOR ULONG instruccion void OR ULONG instruccion void SLL ULONG instruccion void SLLV ULONG instruccion void SLT ULONG instruccion void SLTU ULONG instruccion void SRA ULONG instruccion void SRAV ULONG instruccion void SRL ULONG instruccion void SRLV ULONG instruccion void SUB ULONG instruccion void SUBU ULONG instruccion void TEQ ULONG instruccion void TGE ULONG instruccion void TGEU ULONG instruccion void TLT ULONG instruccion void TLTU ULONG instruccion void TNE ULONG instruccion void XOR ULONG instruccion void DADDU ULONG instruccion repertorio de instrucciones del MIPS R Add Add Unsigned And 1 9 1 9 Move Move Move Move rd Add rd Divide rd Divide Unsigned blewo Doub lewo Doub lewo Divide Divide Unsigned Doubleword Multiply Doubleword Multiply Unsigned Doubleword Shif eft Logical Doubleword Shi
188. ce Formato quince void tabla ULONG NULL NULL J JAL BEO BNE BLEZ BGTZ ADDI ADDIU SLTI SLTIU ANDI ORI XORI LUI ERET NULL NULL NULL BEOL BNEL BLEZL BGTZL DADDI DADDIU LDL DR NULL NULL NULL NULL LB LH LWL LW LBU LHU U SB SH SWL SW SDL SDR SWR NULL NULL NULL NULL NULL NULL NULL NULL LD NULL NULL ULL NULL NULL NULL SD void tabla0 ULONG SLL NULL SRL SRA SLLV NULL SRLV SRAV JR JALR NULL NULL NULL NULL NULL NULL MFHI MTHI MFLO MTLO DSLLV NULL DSRLV DSRAV MULT MULTU DIV DIVU DMULT DMULTU DDIV DDIVU ADD ADDU SUB SUBU AND OR XOR NOR NULL NULL SLT SLTU DADD DADDU DSUB DSUBU TGE TGEU TLT TLTU TEQ NULL TNE NULL DSLL NULL DSRL DSRA DSLL32 NULL DSRL32 DSRA32 H D C E void tablal ULONG BLTZ BGEZ BLTZL BGEZL NULL NULL NULL NULL TGEI TGEIU TLTI TLTIU TEQI NULL TNEI NULL BLTZAL BGEZAL BLTZALL BGEZALL FILE pf fichero que simula la memoria FILE pc fichero que guarda comienzo de programa y final ULONG rpg 35 2 Registros de proposito general especial Ap ndice IT C digo fuente del simulador P g 190 Simulador de instrucciones del microprocesador MIPS R4000 U
189. ce IT C digo fuente del simulador P g 226 Simulador de instrucciones del microprocesador MIPS R4000 ahora hacemos la divisicn while arco 16 repetir 0 do limit 15 arcoaux arco tdivid 0 El primer n fmero para sacar el cociente if arcoaux i gt 15 3 dato dividres filazar i dato dato lt lt 4 dato dividres filazar i 1 dato else if arcoaux i 15 j dato dividres filazar i tcoc dato diviscoc 0 j tcoc tcoc repetir diviscoc 1 columna tcoc if arco i1 gt 15 3 lmt i 2 else if arco 1 15 3 lmt i 1 for c arco c gt 1mt c aux tcoc diviscoc 0 limit tdivid tdivid gt gt 4 aux aux tdivid tdivid dividres filazar arcoaux if tdivid lt aux tdivid tdivid aux amp 0xF0 if tdivid lt aux tdivid tdivid 0x10 tres tdivid aux dividres fila arcoaux tres arcoaux limit aux tcoc diviscoc 0 j tdivid tdivid gt gt 4 aux aux tdivid tdivid dato if tdivid gt aux tdivid aux Ap ndice II C digo fuente del simulador P g 227 Simulador de instrucciones del microprocesador MIPS R4000 tres tdivid aux if arco 1 gt 15 3 dividres filal i 1 tres else if arco 1 15 3 dividres fila i tres else repetir while tdivid lt aux Ahora bajamos el n mero arco dividres fila arco dividres 0 arco if dividres filal i1 0 i fi
190. ception Trap exception gotoxy 30 23 printf Trap exception mo Fin de la instrucci n TNEI void TGEI ULONG instruccion Trap If Greater Than Or Equal Immediate Al dato inmediato se 1 xtiend l signo y se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es mayor o igual al dato inmediato extendido ocurre una Trap Exception UCHAR rs Para coger el nfmero del registro rs signed long int rssigno inmesigno Variables con signo ULONG inmediato inme0 auxi rsnosigno inmenosigno Variables sin signo rs Campo RS instruccion Cogemos el campo rs de la instrucci tn inmediato instruccion Ox0000FFFF Cogemos el dato inmediato auxi inmediato gt gt 15 En auxi metemos el dato inmediato desplzado 15 bits if auxi 0 Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Se extiende el signo a unos inme0 0xFFFFFFFF La parte alta de inmediato se pone a unos else if auxi 0 Si auxi es igual a cero inme0 0x00000000 La parte alta de inmediato se pone a ceros if Estado UX 0 Para 32 bits rssigno rpg rs 1 En rssigno metemos parte baja del reg rs inmesigno inmediato En inmesigno metemos parte baja de dato inmediato if rssigno gt inmesigno rssigno inmesigno Si es mayor o igual General_Exception
191. ci n de desbordamiento UCHAR rs rt indican el nfmero de registro ULONG auxi inmediato para variable auxiliar y dato inmediato ULONG temp 1 2 una variable temporal rs Campo RS instruccion cogemos el campo rs rt Campo RT instruccion cogemos el campo rt auxi instruccion Ox0000FFFF vamos a calcular el dato inmediato inmediato auxi metemos en inmediato el dato cogido de la instruccitn auxi auxi gt gt 15 le miramos el bit de signo para hacer la extensin if auxi 0 de signo si el bit 15 es cero inmediato inmediato 0x00000000 s xtienden ceros else if auxi 0 si no es cero inmediato inmediato OxFFFF0000 se extienden 15 unos if Estado UX 0 para 32 bits rpg rt 1 rpg rs 1 inmediato sumamos sin signo y guardamos en rt else if Estado UX 1 para 64 bits temp 0 1 rpg rs 1 inmediato sumamos sin signo y guardamos en temp auxi temp 0 1 metemos el resultado temporal en una variable auxiliar auxi auxi 0x80000000 vamos a mirar el valor del bit 31 auxi auxi gt gt 31 if auxi 0 rpg rt 0 0xFFFFFFFF si no es cero extendemos unos else if auxi 0 rpg rt 0 0x00000000 si es cero extendemos ceros la extensi tn se ha hecho en la parte alta del registro rpg rt 1 temp 0 1 finalmente guardamos el resultado en la parte baja del registro rt fin de la instrucci
192. ci n de revisi n sobre la CPU e El registro de Control Estado FCR31 controla las excepciones y mantiene el resultado de operaciones de comparaci n e De FCRI hasta FCR30 est n reservados FORMATOS DE COMA FLOTANTE La FPU realiza operaciones de 32 bits simple precisi n y de 64 bits doble precisi n El formato de simple precisi n 32 bits tiene un campo de fracci n en signo magnitud de 24 bits f s y un exponente e de 8 bits como vemos en la figura 14 31 30 23 22 0 Figura 14 Formato en coma flotante de Simple precisi n El formato de doble precisi n 64 bits tiene un campo de fracci n de 53 bits en signo magnitud f s y un exponente de 11 bits como vemos en la figura 15 63 62 52 51 0 Figura 15 Formato en coma flotante de Doble precisi n Caracter sticas generales del procesador MIPS R4000 P g 37 Simulador de instrucciones del microprocesador MIPS R 4000 FORMATO BINARIO EN COMA FIJA Los valores binarios en coma fija est n en formato de complemento a dos Los valores en coma fija no son directamente proporcionados por el set de instrucciones en coma flotante La figura 16 ilustra el formato binario en coma fija 31 30 0 Figura 16 Formato binario en coma fija SET DE INSTRUCCIONES EN COMA FLOTANTE Todas las instrucciones de la FPU son de 32 bits de longitud alineadas en el l mite de una palabra Pueden ser divididas en los siguientes grupos Carga almacenamiento y mo
193. cidades de manejo de excepciones Estandar IEEE e Set de Instrucciones de Carga y Almacenamiento Como la CPU la FPU usa un set de instrucciones orientado a la carga y almacenamiento Las operaciones en coma flotante comienzan en un ciclo sencillo su ejecuci n solapa otras operaciones en coma fija en coma flotante e La FPU y la CPU son un conjunto de procesadores fuertemente acoplados para proporcionar una integraci n sin fisuras entre los repertorios de instrucciones de enteros y de coma flotante Puesto que cada unidad recibe y ejecuta instrucciones en paralelo algunas instrucciones en coma flotante pueden ejecutarse en un ciclo del mismo modo que las instrucciones de enteros REGISTROS DE PROPOSITO GENERAL DE LA FPU FGRs La FPU tiene un conjunto de registros de proposito general en coma flotante FGRs a los que se puede acceder de las siguientes maneras e Como 32 registros de proposito general 32 FGRs cada uno de ellos es de 32 bits de ancho cuando el bit FR en el registro de estado es igual a cero como 32 registros de proposito general 32 FGRs cada uno de ellos es de 64 bits de ancho cuando FR es igual a uno Los accesos de la CPU a estos registros se hace a traves de instrucciones de movimiento carga y almacenamiento e Como 16 registros de coma flotante cada uno de ellos es de 64 bits de ancho FPRs cuando el bit FR en el registro de estado de la CPU Caracter sticas generales del procesador MIPS R4000 P
194. cion Ox0000FFFF Cogemos el campo inmediato auxi inmediato gt gt 15 En auxi metemos dato inmediato desplzado 15 bits if auxi 0 Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Hacemos extensi n de signo de inmediato inme0 0xFFFFFFFF En parte alta de inmediato metemos todo a unos else if auxi 0 Si auxi es igual a cero inme0 0x00000000 En parte alta de inmediato metemos todo a ceros if Estado UX 0 Para 32 bits rssigno rpg rs 1 En rssigno metemos la parte baja de reg rs inmesigno inmediato En inmesigno metemos parte baja de dato inmediato if rssigno lt inmesigno Si rssigno es menor que inmesigno General_Exception Trap exception gotoxy 30 23 printf Trap exception DD else if Estado UX 1 Para 64 bits rssigno rpg rs 0 En rssigno metemos parte alta de reg rs rsnosigno rpg rs 1 En rsnosigno metemos parte baja de reg rs inmesigno inme0 En inmesigno metemos parte alta de dato inmediato inmenosigno inmediato En inmenosigno metemos parte baja de dato inmedi if rpg rs 0 0 inme0 0 Si la parte alta es distinta de cero 1 if rpg rs 0 1 inme0 Si una parte alta es distinta que la otra if rssigno lt inmesigno Comparamos las partes altas de los datos General_Exception Trap exception gotoxy 30 23 print 7 Trap exception Da else if rpg
195. d que es 39457358 Para Big Endian Memoria 0000 39 45 73 58 Registro Desplazam Registro rt 0 gt S S S S 39 45 73 58 1 gt S S S S 45 T3 58 X 2 gt S S S S T3 58 X X 3 gt S S S S 58 X X X Para Little Endian Memoria 0000 58 73 45 39 Registro Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 144 Simulador de instrucciones del microprocesador MIPS R4000 Desplazam Registro rt 0 gt S S S S 58 X X X 1 gt S S S S T3 58 X X 2 gt S S S S 45 T3 58 X gt S S 9 S 39 45 73 58 X Lo que hab a en el registro antes de LWL S Extensi n de signo Excepciones Ninguna LWR Load Word Right El formato de la instrucci n es LWR rt offset base Descripci n de la instrucci n Esta instrucci n puede usarse en combinaci n con la instrucci n LWL para cargar un registro con cuatro bytes consecutivos desde memoria cuando los bytes cruzan el l mite de una palabra Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario La instrucci n lee bytes de la palabra en memoria que contiene el byte de comienzo especificado Se cargar n de uno a cuatro bytes dependiendo del byte de comienzo En modo de operaci n 64 bits se hace una extensi n de s
196. de Usuario del simulador de instrucciones MIPS R4000 P g 69 Simulador de instrucciones del microprocesador MIPS R4000 26 25 21 20 0 MEC m INSTRUCCION C DIGO DE OPERACION COP ADDI RT RS INMEDIATO 001000 ADDIU RT RS INMEDIATO 001001 ANDI RT RS INMEDIATO 001100 DADDI RT RS INMEDIATO 011000 DADDIU RT RS INMEDIATO 011001 ORI _RT RS INMEDIATO 001101 SLTI RT RS INMEDIATO 001010 SLTIU_ RT RS INMEDIATO 001011 XORI RT RS INMEDIATO 001110 26 25 21 20 INSTRUCCION C DIGO DE OPERACION COP BEQ RS RT OFFSET 000100 BEQL RS RT OFFSET 010100 BNE RS RT OFFSET 000101 BNEL RS RT OFFSET 010101 INSTRUCCION C DIGO DE OPERACION COP BGTZ RS OFFSET 000111 BGTZL RS OFFSET 010111 BLEZ RS OFFSET 000110 BLEZL RS OFFSET 010110 Manual de Usuario del simulador de instrucciones MIPS R4000 P g 70 Simulador de instrucciones del microprocesador MIPS R4000 26 25 16 15 immediate oc 00 00 INSTRUCCION C DIGO DE OPERACION COP LUI RT INMEDIATO 001111 26 25 21 20 16 15 0 NICO EI INSTRUCCION C DIGO DE OPERACION COP LB _RT OFFSET BASE 100000 LBU RT OFFSET BASE 100100 LD RT OFFSET BASE 110111 LDL RT OFFSET BASE 011010 LDR RT OFFSET BASE 011011 LH RT OFFSET BASE 100001 LHU RT OFFSET BASE 100101 LW RT OFFSET BASE 100011 LWL
197. de instrucciones del microprocesador MIPS R4000 aca acarreo if regrs1 inmediato Si hay acarreo en las partes bajas auxrsO regrs0 aca 1 regrt0 se suma uno a la parte alta del resultado en la var auxiliar auxrs se guarda el dato del reg rs auxrt0 regrt0 en auxrt se guarda el resultado inme0 inme0 gt gt 31 se mira el bit 31 auxrs0O auxrs0 gt gt 31 auxrtU0 auxrt0 gt gt 31 if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits if auxrs0 inme0 amp amp auxrt0 auxrs0 Si hay overflow General_Exception Integer overflow exception gotoxy 30 23 printf Integer overfl exception else Si no hay overflow rpg rt 0 regrt0 Metemos la parte alta del resultado en el reg rpg rt 1 regrt1 Metemos la parte baja del resultado en el reg fin de la instrucci n DADDI void DADDU ULONG instruccion Si esta instrucci n se ejecuta en modo 32 bits se produce una reserved instruction exception Solo se puede ejecutar en modo 64 bits para poder obtener un resultado Suma sin signo el registro rt y el rs y el resultado se guarda en el registro rd No se produce excepcitfn de desbordamiento UCHAR rs rt rd aca variables para coger los registros y acarreo rs C
198. de la instrucci n TLTU void LB ULONG instruccion Load Byte Esta instrucci n extiende el signo del offset y se suma al contenido del registro base para formar una direccitn El contenido del byte en esa localizaci tn de memoria hace una extensi n de signo y se guarda en el registro EIA UCHAR rt base dato aca base es el campo de rs dato y aca para dato y acarreo signed long int off0 offset dest0 destino parte alta y baja de off y dest ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el campo base de la instruccicn offset instruccion amp 0x0000FFFF Cogemos el campo offset de la instrucc auxi offset En auxi metemos offset auxi auxi gt gt 15 Desplazamos 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset 0OxFFFF0000 Al offset se le hac xtensi n signo a 1 off0 OXFFFFFFFE La parte alta del offset se pone todo a unos else if auxi 0 Si auxi es igual a cero off0 0 destino rpg base 1 offset En destino metemos partebaja de base offset dest0 rpg base 0 off0 En dest0 metemos parte alta de base off0 aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si hay acarreo dest0 La parte alta del destino se incrementa en uno if Estado UX 0 Para 32 bits l i
199. de signo regrtli rpg rt 1 1 if regrti 0 regrt0 regrd0 regrs0 regrt0 Se hace la suma de la parte alta regrdl regrsl regrt1 Se hace la suma de la parte baja aca acarreo regrsl regrtl si hay acarreo intermedio if aca 1 regrd0 se le suma uno a la parte alta rpg rd 0 regrd0 metemos el resultado en la parte alta rpg rd 1 regrdl metemos el resultado en la parte baja fin de la instrucci n DSUBU void DSUB ULONG instruccion Si el modo de operaci n es de 32 bits se produce una Reserved instr excep tion En 64 bits hace la resta de los registro rs y rt y el resultado lo mete en el registro rd Si hay overflow se produce una excepcitn UCHAR rs rt rd aca Para coger n fmero de regs y acarreo ULONG regrs0 regrs1l regrt0 regrt1l regrd0 regrdi var auxiliares ULONG auxrs auxrt auxrd Estas se utilizan para ver bit 64 Ap ndice II C digo fuente del simulador P g 240 Simulador de instrucciones del microprocesador MIPS R4000 rs Campo RS instruccion cogemos el campo rs de la instrucci n rt Campo RT instruccion cogemos el campo rt de la instrucci n rd Campo RD instruccion cogemos el campo rd de la instrucci n if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits
200. dec nombre rs immediato void Formato catorce ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnemtnicos de la siguiente manera NOMBRE_INSTR TARGET Las instrucciones que usan este formato son J JAL ULONG target Para coger el target target instruccion amp 0x03FFFFFF Cogemos el campo target de la inst Ahora vamos a imprimir el mnem nico por pantalla printf Ss 1Xh formatos dec nombre target void Formato quince ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnemtnicos de la siguiente manera NOMBRE_INSTR Las instrucciones que usan este formato son ERET Ahora vamos a imprimir el mnem nico por pantalla printf s formatos dec nombre Ap ndice II C digo fuente del simulador P g 337 Simulador de instrucciones del microprocesador MIPS R4000 BIBLIOGRAF A e MANUAL DE USUARIO DEL MICROPROCESADOR MIPS R4000 Autor Joe Heinrich T tulo MIPS R4000 Microprocessor User s Manual A o Publicaci n 1994 Bibliograf a P g 338
201. den bajo del registro rt se almacena a partir de la direcci n de memoria especificada Si el bit menos significativo de la direcci n a la que vamos a acceder es distinto de cero ocurre una Address error exception Operaci n 32 direccion offset s5 1 offsetis 0 FGPR base temp lt GPR rtlis o direcci n de memoria lt temp 64 direccion offsetis offset s GPR base temp lt GPR rtlis 0 direcci n de memoria lt temp Excepciones Address error exception SW Store Word El formato de la instrucci n es SW rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar la direcci n a la que vamos a acceder El Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 159 Simulador de instrucciones del microprocesador MIPS R4000 contenido del registro rt se almacena a partir de la direcci n de memoria especificada Si alguno de los dos bits menos significativos de la direcci n a la que vamos a acceder es distinto de cero ocurre una Address error exception Operaci n 32 direccion tofEsetia loffsetis 0 GPR base temp E GPR rt 31 0 direcci n de memoria lt temp 64 direccion offsetis loffset 1s 0 GPR base temp lt GPR rtl31 0 direcci n de memoria lt temp Excepciones
202. des como enteros sin signo si el contenido del registro rs es menor que el contenido del registro rt el resultado se pone a uno en caso contrario el resultado se pone a cero El resultado se guarda en el registro rd Operaci n PAE if 0 GPR rs lt O GPR rt then GPR rd e 0 1 else GPR rd amp 0 endif 64 if 0 GPR rs lt 0 GPR rt then GPR rda lt 0 1 else GPR rd lt 0 endif Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 165 Simulador de instrucciones del microprocesador MIPS R4000 SRA Shift Right Arithmetic El formato de la instrucci n es SRA rd rt sa Descripci n de la instrucci n El contenido del registro rt se desplaza hacia la derecha sa bits haciendo una extensi n de signo en los bits de orden alto El resultado se guarda en el registro rd En modo 64 bits el operando debe ser un valor de 32 bits con extensi n de signo Operaci n 32 GPR rdl lt GPR rtl31 GPR rt l3 1 a 64 s amp 0 sa temp GPR rtl21 9 GPR rt 31 s GPR rd lt tempa1 temp Excepciones Ninguna SRAV Shift Right Arithmetic Variable El formato de la instrucci n es SRAV rd rt rs Descripci n de la instrucci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 166 Simulador de instrucciones del microprocesador MIPS R4000
203. destino rd no se modifica cuando ocurre una excepci n de desbordamiento Operaci n 32 GPR rd lt GPR rs GPR rt 64 temp GPR rs GPR rt GPR rd temp31 temp31 0 Excepciones Excepci n de desbordamiento en complemento a dos Integer overflow exception ADDI Add Immediate El formato de esta instrucci n es ADDI rt rs mmediate Descripci n de la instrucci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 94 Simulador de instrucciones del microprocesador MIPS R4000 Con el dato inmediato de 16 bits se hace una extensi n de signo a 32 64 bits dependiendo del modo de operaci n y ese dato se suma al dato que hay en el registro rs El resultado se guarda en el registro rt En modo 64 bits el bit 31 del resultado se extiende Ocurre una excepci n de desbordamiento si ocurre un overflow en complemento a 2 El registro destino rt no se modifica cuando ocurre una excepci n de desbordamiento Operaci n 32 GPR rt lt GPR rs immediate1s immediate s o 64 temp 4 GPR rs immediate s immediate s o GPR rt lt temp31 temps1 0 Excepciones Excepci n de desbordamiento en complemento a dos Integer overflow exception ADDIU Add Immediate Unsigned El formato de esta instrucci n es ADDIU rt rs i mmediate Descripci n de la instrucci n Con el dato inmediato de 16 bits se hace una exten
204. do a que al tener tres tipos de instrucciones puede que alg n c digo de operaci n se repita Para poder ordenarlas en el array primero declaramos una variable de tipo char Como el tama o de dicha variable va a ser de 8 bits para las instrucciones del primer tipo ponemos los dos bits de mayor peso de la variable a 10 y se concatenan con los 6 bits del c digo de operaci n Para las del segundo tipo ponemos los dos bits de mayor peso de la variable a 00 y se concatenan con los 6 bits del c digo de operaci n y para el tercer tipo los tres bits de mayor peso de la variable se ponen a 010 y se concatenan con los 3 bits del c digo de operaci n De esta forma todos los n meros son diferentes y se pueden ordenar en el array Para posicionar la instrucci n ADD en el array vemos que pertenece al segundo tipo por tanto en la variable guardaremos el siguiente valor en binario 0010 0000 que en decimal corresponde al n mero 32 Entonces en la posici n 32 del array formatos estar la estructura formada por el n mero de formato que corresponde a la instrucci n ADD y el nombre del mnem nico de la instrucci n Otra estructura de datos implementada para la decodificaci n es un array de punteros a funciones llamado tablaf en cuyas posiciones hay un puntero que apunta a una funci n determinada La posici n cero de este array apuntar a la funci n Formato_cero la uno a Formato_uno y as sucesivamente Lo que hacen estas funciones es sacar
205. do uario char modop bigen resp declaramos las variables que vamos a utilizar limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 nos situamos en la pantalla printf Configuraci n actual ponemos informacin gotoxy 25 18 nos situamos if Estado UX 0 printf 32 bits miramos si es 32 o 64 bits else if Estado UX 1 printf 64 bits gotoxy 25 19 nos situamos if Estado RE 0 printf Little endian miramos si Little o g else if Estado RE 1 printf Big endian gotoxy 25 20 nos situamos if Estado KSU 0 printf Kernel miramos si kernel sup o uar else if Estado KSU 1 printf Supervisor else if Estado KSU 2 printf Usuario gotoxy 2 20 printf Cambiarla S N Pregunta do Haz resp getch coger respuesta de teclado resp toupper resp pasarla a may sculas while resp S amp amp resp N amp amp resp 27 mientras distinto de si y de no if resp S si la respuesta es si limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 se va a una zona de la pantalla printf Modo de operacitn Pide el modo de operacicn Ap ndice II C digo fuente del simulador P g 212 Simulador de instrucciones del microprocesador MIPS R4000 gotoxy 25 18 printf 1 32 bits gotoxy 25 19 3
206. dor MIPS R 4000 25 24 23 0 28 27 26 TLS o 71 64 63 0 W Paridad par para el bit de post escritura W Bit de post escritura se activa si la linea de cach ha sido escrita P Paridad par para los campos PTag y CS CS Estado de la Cach primaria O Invalid en todas las configuraciones del R4000 1 Shared solo en el R4000MC 2 Clean Exclusive solo en R4000SC y MC 3 Dirty Exclusive en todas las configuraciones del R4000 PTag Etiqueta f sica bits 35 12 de la direcci n f sica DataP Paridad par para el dato Data Dato de la cach Figura 20 Formato de L nea de D cach Primaria de 8 palabras En todos los procesadores R4000 el bit W write back no el estado de cach indica si la cach primaria contiene datos modificados que deben escribirse en memoria o en la cach secundaria usando la pol tica de post escritura o no los tiene Acceso a las cach s primarias La figura 21 muestra el ndice de la direcci n virtual VA en las cach s primarias Cada cach instrucci n y datos tiene un rango de tama o de 8 Kbytes hasta 32 Kbytes por lo tanto el n mero de bits de direcci n virtual usado para indexar la cach depende del tama o de la cach Caracter sticas generales del procesador MIPS R4000 P g 47 Simulador de instrucciones del microprocesador MIPS R 4000 Tag line VA 12 n para 8KB VA 12 n L nea de datos VA 12 n para 32 KB VA 14 n W W S
207. e 64 Excepciones temp E byte de la direcci n especificada GPR rt 0 temp direccion ofEsetis 1 loffset is 0 GPR base temp byte de la direcci n especificada GPR rt 0 temp Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 135 Simulador de instrucciones del microprocesador MIPS R4000 LD Load Doubleword El formato de la instrucci n es LD rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma a el contenido del registro base para formar la direcci n a la que vamos a acceder Los 64 bits de la doble palabra localizada a partir de la direcci n de memoria especificada se guardan en el registro rt Si alguno de los tres bits menos significativos de la direcci n a la que se va a acceder son distintos de cero ocurre una Address error exception excepci n de error de direccionamiento Esta operaci n solo est definida en modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 direccion ofEset is loffset is 0 GPR base temp Doubleword a partir de la direcci n GPR rt lt temp Excepciones Address error exception Reserved instruction exception En modo usuario 32 bits o supervisor 32 bits LDL Load Doubleword Left El forma
208. e rs offset void Formato diez ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RT INMEDIATO Las instrucciones que usan este formato son LUI UCHAR rt Para coger los n meros de registro ULONG inmediato Para coger el dato inmediato Ap ndice II C digo fuente del simulador P g 335 Simulador de instrucciones del microprocesador MIPS R4000 rt Campo RT instruccion Cogemos el campo rt de la instrucci n inmediato instruccion 0x0000FFFF Cogemos el campo inmediato de la inst Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d 04Xh formatos dec nombre rt inmediato void Formato once ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnemenicos de la siguiente manera NOMBRE_INSTR RT OFFSET BASE Las instrucciones que usan este formato son LB LBU LD LDL LDR LH LHU LW LWL LWR LWU SB SD SDL SDR SH SW SWL SWR UCHAR rt base Para coger los nfmeros de registro ULONG offset Para coger el offset rt Campo RT instruccion Cogemos el campo rt de la instrucci n base Campo RS instruccion Cogemos el campo rs de la instrucci n offset instruccion amp 0x0000FFFF Cogemos el campo offset de la inst Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d 04Xh form
209. e 32 bits con extensi n de signo Cuando la operaci n se completa el cociente se carga en el registro LO y el resto se carga en el registro HI Operaci n 32 LO lt 0 GPR rs div 0 GPR rt HI lt 0 GPR rs mod 0 GPR rt 64 q lt 0 GPR rs 3 o div 0 GPR rt 31 0 r lt 0 GPR rs 3 o div 0 GPR rt 3 0 LO E qu Il q31 0 Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 121 Simulador de instrucciones del microprocesador MIPS R4000 HI e 131 r31 0 Excepciones Ninguna DMULT Doubleword Multiply El formato de la instrucci n es DMULT rs rt Descripci n de la instrucci n El contenido del registro rs y rt se multiplican tratando ambos operandos como valores en complemento a dos No ocurre una Integer overflow exception Cuando la operaci n se completa la parte baja del resultado se guarda en el registro de proposito especial LO y la parte alta se guarda en el registro de proposito especial HI Esta operaci n se define solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 t lt GPR rs GPR rt LO lt te3 0 HI lt t127 64 Excepciones Reserved instruction exception En modo 32 bits Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 122 Simul
210. e baja del reg rt dato dato gt gt 7 Desplazamos el dato 7 bits hacia la derecha if dato 0 Si dato es distinto de cero rpg rt 1 rpg rt 1 OxFFFFFFOO Ponemos el resto del reg a unos rpg rt 0 0xFFFFFFFF La parte alta la ponemos toda a unos else if dato 0 Si el dato es igual a cero rpg rt 1 rpg rt 1 amp 0x000000FF Ponemos el resto de reg a ceros rpg rt 0 0 La parte alta la ponemos toda a ceros Fin de la instrucci n LB void LBU ULONG instruccion Load Byte Unsigned Esta instrucci n extiende el signo del offset y se suma al contenido del registro base para formar una direccitn El contenido del byte en esa localizaci tn de memoria hace una extensi n con ceros y se guarda en el registro rt UCHAR rt base dato aca base es el campo de rs aca y dato dato y acarreo signed long int off0 offset dest0 destino Parte alta y baja de offs y dest Ap ndice II C digo fuente del simulador P g 282 Simulador de instrucciones del microprocesador MIPS R4000 ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el campo base de la instruccicn offset instruccion Ox0000FFFF Cogemos el campo offset de la instruccitn auxi offset En auxi metemos el offset auxi auxi gt gt 15 Desplazamos auxi 15 bits hacia la derecha
211. e if Estado UX 1 para 64 bits rpg rt 0 0x00000000 la parte alta del registro destino a cero auxi inmediato amp rpg rs 1 se hace la and de inmediato y reg YrS rpg rt 1 auxi Ox0000FFFF se cogen los 16 bits bajos del resultado fin de la instrucci tn ANDI void DIV ULONG instruccion Divide Esta instrucci n hace la divisi n con signo de los registros rs y rt tro HI Para 64 bits se hace una extensi n de signo ULONG auxi cociente resto variable auxiliar cociente y resto d El F E cociente es guardado en el registro LO y el resto es guardado en el regis div signed long int regrs regrt para guardar lo que hay en los regs con signo UCHAR rs rt indican el n mero de registro rs Campo RS instruccion cogemos el campo rs de la instrucciftn rt Campo RT instruccion cogemos el campo rt de la instrucciftn regrs rpglrs 1 en regrs metemos lo que hay en el registro rs regrt rpg rt 1 en regrt metemos lo que hay en el registro rt if Estado UX 0 para 32 bits if rpg rt 1 0 si el divisor es cero no se puede hacer divisictn 1 gotoxy 30 23 printf Divisi n por cero informamos de que no se pued else si el divisor es distinto de cero se puede hacer divisicn 1 rpg 33 1 regrs regrt el cociente de la div lo guardamos en LO rpg 32 1 regrs regrt
212. e instrucciones del microprocesador MIPS R 4000 Instrucciones del Coprocesador OpCode Descripci n LWCz Load Word to Coprocessor z SWCz Store Word from Coprocessor z MTCz Move To Coprocessor z MFCz Move From Coprocessor z CTCEZ Move Control to Coprocessor z CECZ Move Control From Coprocessor z COPz Coprocessor Operation BEZI Branch on Coprocessor z True BCZF Instrucciones especiales OpCode Descripci n SYSCALL System Call BREAK Break Extensiones a ISA Instrucciones de carga y almacenamiento OpCode Descripci n LD Load Doubleword LDL Load Doubleword Left LDR Load Doubleword Right LL Load Linked LLD Load Linked Doubleword LWU Load Word Unsigned SC tore Conditional SCD tore Conditional Doubleword SD SDL tore Doubleword Left SDR 5 5 Store Doubleword S S tore Doubleword Right SYNC Sync Caracter sticas generales del procesador MIPS R4000 P g 12 Simulador de instrucciones del microprocesador MIPS R 4000 Extensiones a ISA Instrucciones Aritm ticas dato inmediato OpCode Descripci n DADDI Doubleword Add Immediate DADDIU Doubleword Add Immediate Unsigned Extensiones a ISA
213. ecci n contenida en el registro rs La direccicn de la instrucci tn siguiente al delay slot siguiente de la siguiente se guarda en el registro rd Si rd vale cero se guarda en el reg 31 UCHAR rs rd Para guardar el nfmero de registro signed long int destino Para el destino rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci n destino rpg rs 1 Metemos la parte baja del reg rs en destino if Estado UX 0 para 32 bits if destino gt 65535 destino lt 0 Si se sale del rango de 64 k gotoxy 30 23 printf Direcci n fuera de rango Direccitn fuera de rango else if destino 4 0 Si la direcci n no es alineada word General_Exception Se produce un error de direccionamiento gotoxy 30 23 printf Address Error exception else en otro caso if rd 0 Si el n mero rd es igual a cero Ap ndice II C digo fuente del simulador P g 324 Simulador de instrucciones del microprocesador MIPS R4000 rpg 31 1 1 rpg 34 1 8 else if rd 0 rpg rd 1 1 rpg 34 1 8 destino destino 4 rpg 34 1 destino destino guardamos la direcc en el reg 31 Si es distinto de cero Guardamos la direcc en el reg rd restamos 4 a destino En el contador de programa metemos direcc else if Est
214. ecial HI LO y el Contador de Programa CP a cero Al pulsar esta opci n el simulador pide confirmaci n antes de resetear el simulador seg n podemos ver en la figura 12 Si la respuesta es S el simulador se resetea y si es N se queda tal y como est MIPS R4000 RO 0000000000000000 R1 0000000000000000 R2 D0000000000000000 R3 D0000000000000000 R4 0000000023483712 R5 D0000000000000000 R6 0000000000000000 R7 0000000000000000 R3 D000000000000000 R9 0000000000000000 R10 0000000000000000 R11 0000000000000000 R12 0000000000000000 Resetear el Simulador S N _ R13 0000000000000000 R14 0000000000000000 R15 D0000000000000000 HT 0000000000000000 Pc 0000000000000004 LO 0000000000000000 Figura 12 6 Registros Esta opci n es para meter datos de 32 64 bits en los registos de prop sito general Manual de Usuario del simulador de instrucciones MIPS R4000 P g 80 Simulador de instrucciones del microprocesador MIPS R4000 Como muestra la figura 13 al pulsar esta opci n lo primero que nos piden es el n mero de registro a modificar Solo podemos introducir un n mero comprendido entre 1 y 31 inclusive RO siempre vale 0 De no ser as nos lo vuelve a pedir MIPS R4000 RO OO0O00O0O0O0O000D000 0d RI OOOO O0O 000D0000I0 REG O000000000000000 R3 O0000000000000000 F4 OOOOOOOOO0ODOdIId E a Re 000000000000 0000 RE OOOO Ra O000000000000000 R3 0000000 D 0000000 R10 000000000
215. ed e Dirty Shared e Clean Exclusive e Dirty Exclusive Caracter sticas generales del procesador MIPS R4000 P g 52 Simulador de instrucciones del microprocesador MIPS R 4000 EL PIPELINE DE LA CPU La CPU tiene un pipeline de instrucciones de ocho estados cada estado ocupa un Peycle un ciclo de Pclock el cual tiene dos veces la frecuencia del MasterClock As la ejecuci n de cada instrucci n ocupa al menos ocho Peycles cuatro ciclos de MasterClock Una instrucci n puede ocupar m s de ocho ciclos por ejemplo si el dato requerido no est en la cach el dato debe ser cogido de la memoria principal Una vez que el pipeline se ha llenado se est n ejecutando ocho instrucciones simult neamente La figura 24 muestra los ocho estados del pipeline o segmentaci n de una instrucci n la siguiente secci n describe los estados del pipeline PCycle 8 Deep MasterClock Cycle TE IS RE EX DF DS TC f WB IF IS RF EX DF DS TC f WB WB TC WB DS TC WB Figura 24 Estados del Pipeline de Instrucciones ESTADOS DEL PIPELINE DE LA CPU Esta secci n describe cada uno de los ocho estados del pipeline e IF B squeda de instrucci n Primera Mitad Caracter sticas generales del procesador MIPS R4000 P g 53 Simulador de instrucciones del microprocesador MIPS R 4000 e IS B squeda de la Instrucci n
216. egistro rs insertando ceros en los bits de orden alto El resultado se guarda en el registro rd En modo 64 bits el operando debe ser un valor de 32 bits con extensi n de signo Operaci n 32x s E GPR rsla1 0 GPR rd lt 0 GPR rt 31 s 64 s lt GPR rsla 0 temp 0 GPR rtla1 s Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 168 Simulador de instrucciones del microprocesador MIPS R4000 GPR rd lt temp31 temp Excepciones Ninguna SUB Subtract El formato de la instrucci n es SUB rd rs rt Descripci n de la instrucci n El contenido del registro rt se resta con el contenido del registro rs para formar el resultado que se guarda en el registro rd En modo 64 bits los operandos deben ser valores de 32 bits con extensi n de signo Ocurre una Integer overflow exception si se produce un desbordamiento en complemento a dos El registro rd no se modifica cuando ocurre esta excepci n Operaci n 32 GPR rd GPR rs GPR rt 64 temp GPR rs GPR rt GPR rd lt temp31 temp31 0 Excepciones Integer overflow exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 169 Simulador de instrucciones del microprocesador MIPS R4000 SUBU Subtract Unsigned El formato de la instrucci n es SUBU rd rs rt Descripci n de la instrucci n El contenido del
217. egistros del CPO durante el procesamiento de una excepci n para determinar la causa de la excepci n y el estado de la CPU a la vez que est ocurriendo la excepci n En la siguiente tabla podemos ver los registros que se usan en el procesamiento de las excepciones y son Nombre del Registro Registro N mero Context 4 BadV Addr Bad Virtual Address 8 Count 9 Compare register 11 Status 12 Cause 13 EPC Exception Program Counter 14 Caracter sticas generales del procesador MIPS R4000 P g 30 Simulador de instrucciones del microprocesador MIPS R 4000 WatchLo Memory Reference Trap Address Low 18 WatchHi Memory Reference Trap Address High 19 Xcontext 20 ECC 26 CacheErr Cache Error and Status 27 Error EPC Error Exception Program Counter 30 TIPOS DE EXCEPCIONES Los tipos de excepciones son los siguientes e Reset e Soft Reset e Nonmaskable Interrupt NMD e Cache Error e Resto de excepciones del procesador Cuando el bit EXL en el registro de estado es 0 el modo de operaci n especificado por los bits KSU en el registro de estado puede ser Usuario Supervisor Kernel Cuando el bit EXL est a 1 el procesador est en modo Kernel Cuando en el procesador se produce una excepci n el bit EXL se pone a 1 lo cual significa que el sistema est en modo Kernel Despu s de salvar el estado apropiado se cambian los bits KSU a modo Kernel y pone el
218. egrt En resto se guarda el resto de la divisi n auxi cociente En la variable auxiliar auxi se mete el cociente auxi auxi 0x80000000 Vamos a ver el valor del bit 32 auxis auxi gt gt 31 if auxi 0 rpg 33 0 0xFFFFFFFF Hacemos la extensitn de signo else if auxi 0 rpg 33 0 0x00000000 rpg 33 1 cociente En el registro LO guardamos el cociente auxi resto En la variable auxiliar auxi se mete el resto auxi auxi 0x80000000 Vamos a ver el valor del bit 32 auxi auxi gt gt 31 if auxi 0 rpg 32 0 0xFFEFEFFEFEF Hacemos la extensi n de signo else if auxi 0 rpg 32 0 0x00000000 rpg 32 1 resto En el registro HI guardamos el resto Fin de la instrucci n DIVU ULONG dividir ULONG dividendo0 ULONG dividendo ULONG divisor0 ULONG divisor char car 17 Esta divisi n solo se puede hacer si el dividendo es mayor que el divisor ULONG temp cociente0 cociente resto0 resto UCHAR dividres 17 16 diviscoc 2 16 int 1 C arco arcoaux UCHAR tdivid tcoc tres aux limit repetir 0 UCHAR fila 1 columna 0 filazar 0 dato 0 1mt UCHAR coci l6 rest 16 for i 0 i lt 16 i Inicializamos coci y rest a ceros coci i 0 rest i 0 for i 0 i lt 17 i Iniciamos la matriz dividres a cero for j 0 j lt 16 j Se llama as porque contiene el dividendo y el dividres il 3 0 resto de la divisi n for 1 0 1 lt 2 1 Iniciamos la matriz di
219. el resto de la div lo guardamos en HI else if Estado UX 1 para 64 bits Ap ndice II C digo fuente del simulador P g 223 Simulador de instrucciones del microprocesador MIPS R4000 if rpg rt 1 0 si el divisor es cero no se puede hacer divisictn gotoxy 30 23 printf Divisi n por cero informamos de que no se pued else si el divisor es distinto de cero se puede hacer la divisiftn cociente regrs regrt en cociente se guarda el cociente resto regrs regrt en resto se guarda el resto de la divisi n auxi cociente en la variable auxi guardamos el cociente auxi auxi 0x80000000 vvamos a ver el valor que tiene el bit 31 auxis auxi gt gt 31 if auxi 0 rpg 33 0 0xFFFFFFFF si 0 la parte alta del reg a 1 else if auxi 0 rpg 33 0 0x00000000 si 0 la parte alta a 0 rpg 33 1 cociente guardamos el cocient n el registro LO auxi resto en la variable auxi guardamos el resto de la divisitn auxi auxi 0x80000000 vamos a ver el valor que tiene el bit 31 auxis auxi gt gt 31 if auxi 0 rpg 32 0 0xFFFFFFFF si 0 la parte alta del reg a 1 else if auxi 0 rpg 32 0 0x00000000 si 0 la parte alta a 0 rpg 32 1 resto guardamos el resto en el registro HI fin de la instruccitn DIV void DIVU ULONG instruccion Divide Unsigned Esta instrucci tn hace la divisi tn sin signo de los regi
220. en la que est printf 2 02X caracter escrib l byte correspondiente en pantalla cont incrementa la variable cont rpg 34 1 rpg 34 1 4 Ver_CP III EI III IA AI III III 1111111 gotoxy 19 20 printt Limpia zona de pantalla gotoxy 19 20 if tecla P tecla 27 Si tecla es igual a P printf Pulsa una tecla Mensaje else if finbreak 1 si finbreak es igual a uno printf Pulsa una tecla Mensaje else En otro caso printf Pulsa una tecla Llegada al fin prog getch fclose pf Cierra el fichero return 0 ULONG chartolong UCHAR x Esta funci n pasa de un array de caracteres de 4 posiciones a un dato de 32 bits f ULONG varl var2 rl r2 r3 r4 resul var2 unsigned long int x 0 var2 var2 lt lt 24 varl 0x00FFFFFE var2 ri 0xFFFFFFFF varl Ap ndice II C digo fuente del simulador P g 206 Simulador de instrucciones del microprocesador MIPS R4000 var2 unsigned long int x 1 var2 var2 lt lt 16 varl 0xFFOOFFFF var2 r2 0xFFFFFFFF varl var2 unsigned long int x 2 var2 var2 lt lt 8 varl 0xFFFFOOFF var2 r3 0xFFFFFFFF varl var2 unsigned long int x 3 var2 var2 lt lt 0 varl 0xFFFFFFOO var2 r4 0xFFFFFFFF varl resul rl amp r2 r3 amp r4 return resul UCHAR Cod _ op ULONG instr ULONG mascara A esta funci n
221. encia normal de la ejecuci n de la instrucci n se suspende y el procesador entra en modo Kernel Entonces el procesador desactiva las interrupciones y fuerza la ejecuci n de una excepci n software localizada en una direcci n fija Se salva el contexto del Caracter sticas generales del procesador MIPS R4000 P g 29 Simulador de instrucciones del microprocesador MIPS R 4000 procesador incluyendo los contenidos del contador de programa el modo de operaci n actual Usuario o Supervisor y el estado de las interrupciones activadas o desactivadas Este contexto se salva por lo tanto puede ser restaurado cuando la excepci n haya sido atendida Cuando ocurre una excepci n la CPU carga el registro Contador de Programa de Excepci n EPC con una direcci n donde la ejecuci n puede reiniciarse despues de que la excepci n haya sido atendida La direcci n de reinicio en el registro EPC es la direcci n de la instrucci n que caus la excepci n si la instrucci n se estaba ejecutando en un branch delay slot la direcci n de la instrucci n de salto relativo inmediatamente anterior al delay slot REGISTROS QUE PROCESAN LAS EXCEPCIONES Esta secci n describe los registros del CPO que se usan en el procesamiento de excepciones Cada registro tiene un nico n mero de identificaci n que se refiere a su n mero de registro Por ejemplo el registro ECC es el registro n mero 26 El software examina los r
222. enido del registro rs para formar el resultado que se guarda en el registro rt Ocurre una Integer overflow exception si se produce un desbordamiento en complemento a dos El registro destino rt no se modifica cuando ocurre una excepci n de este tipo Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 GPR rt lt GPR rs immediate 1s immediate s o Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 116 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Integer overflow exception Reserved instruction exception En modo 32 bits DADDIU Doubleword Add Immediate Unsigned El formato de la instrucci n es DADDIU rt rs immediate Descripci n de la instrucci n En el dato inmediato de 16 bits se hace una extensi n de signo y se suma con el contenido del registro rs para formar el resultado que se guarda en el registro rt No ocurre Integer overflow exception bajo ninguna circunstancia La nica diferencia entre esta instrucci n y la instrucci n DADDI es que DADDIU nunca causa una Integer overflow exception Esta operaci n est definida para modo de operaci n 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 GPR rt lt GPR rs
223. enor peso que corresponden al c digo de operaci n y en tabla0 se accede a la posici n del array que hace la llamada a la funci n y por ltimo si los seis bits m s altos son igual a uno se miran los bits 16 al 20 se coge el codigo de operaci n y se llama a la instrucci n mediante tablal Este ha sido todo el proceso para decodificar y ejecutar una instrucci n Si en alg n caso la instrucci n no se desea ejecutar y ya se ha decodificado el usuario debe pulsar la tecla P parar DIAGRAMA DE BLOQUES DEL PROGRAMA En la siguiente p gina podremos ver mediante un diagrama de cajas como funciona el programa los procedimientos a los que se llaman en el programa principal y las funciones o procedimientos que se llaman dentro de otros Primeramente dibuja las l neas del interfaz de usuario A continuaci n visualiza la memoria a partir de una direcci n dada y visualiza el contenido de los registros de prop sito general y los registros HI y LO Por timo visualiza por pantalla el contenido del registro Contador de Programa A continuaci n comienza un bucle infinito do while 1 Limpia una zona de la pantalla y muestra el men principal En un switch podemos elegir entre once opciones incluyendo la de salir que no se muestra en este diagrama Con esta opci n se sale del bucle infinito y termina el programa Descripci n del dise o del simulador de instrucciones P g 90 Simulador de instrucciones del microprocesador
224. ente del simulador P g 209 Simulador de instrucciones del microprocesador MIPS R4000 else if resuld carry 0 numli n1 num2i n2 numli num1i gt gt 16 num2i num2i gt gt 16 if carry 1 resuld numli num2i 1 else if carry 0 resuld numli num2i resuld resuld 0x000F0000 resuld resuld gt gt 16 if resuld 1 carry 1 else if resuld carry 0 return Ca rry int Registros void acceder desd Devuelve el acarreo l men principal para cambiar el Esta funci n nos permit valor de los registros directamente cero no se puede modificar debido a es permitido modificar entre el char tecla resp Declaro dos int escape Y una variable unsigned char registro El registro Solo en caso de que sea necesario que posee un valor cero siempre registro 1 y el 31 variables de tipo car cter de tipo entero ULONG mayorpeso menorpeso do do limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 Se sitfa el cursor printf NS de registro a modificar Pide registro scape leebytedecimal registro Leemos nS de reg a modificar if escape 0 Si ha pulsado la tecla escape return 0 while registro lt 1 registro gt 31 mientras no est fuera limites limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 Se sitf a el cursor printf Longitud del dato a meter
225. eption endif 64 if GPR rs lt immediates immediateis o then TrapException endif Excepciones Trap exception TLTIU Trap If Less Than Immediate Unsigned El formato de la instrucci n es TLTIU rs immediate Descripci n de la instrucci n El dato inmediato de 16 bits con su extensi n de signo se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es menor que el dato inmediato con su extensi n de signo ocurre una Trap exception Operaci n 32 if O IGPR rs lt 0 immediate s f immediate s 0 then TrapException endif 64 if O GPR rs lt 0 immediate s immediate s 0 then Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 179 Simulador de instrucciones del microprocesador MIPS R4000 TrapException endif Excepciones Trap exception TLTU Trap If Less Than Unsigned El formato de la instrucci n es TLTU rs rt Descripci n de la instrucci n El contenido del registro rt se compara con el registro rs Considerando ambas cantidades como enteros sin signo si el contenido del registro rs es menor que el contenido del registro general rt ocurre una Trap exception Operaci n 32 064 if O GPR rs 1 lt 0 GPR rt then TrapException endif Excepciones Trap exception TNE Trap If Not Equal El formato de la instrucci n
226. er datos intermedios de los registros Ap ndice II C digo fuente del simulador P g 277 Simulador de instrucciones del microprocesador MIPS R4000 rs Campo rt Campo regrs rpglrs 1 regrt rpglrt 1 if Estado UX 0 if regrt regrs gt regrt General_Exception gotoxy 30 23 printf else if Estado UX 1 if rpg rs 0 0 if regrs rpg rs 0 regrt rpg rt 0 if regrs gt regrt General Exception gotoxy 30 23 printf else if If regrs gt regrt General_Exception gotoxy 30 23 printe 7 else Tf regrs gt regrt regrt General_Exception RS instruccion RT instruccion regrs regrt Trap exception rpg rt 0 0 dos registros es rpg rs 0 rpg rt 0 Cogemos el campo rs de la instruccicn Cogemos el campo rt de la instruccitn En regrs metemos la parte baja del registro rs En regrt metemos la parte baja del registro rt Para 32 bits Si regrs es mayor o igual que Trap exception e Para 64 bits Si la parte alta de alguno de los distinta de cero regrs regrt Trap exception rpg rs 0 rpg rt 0 regrs regrt Trap exception regrs regrt Si las partes altas son distintas en regrs se mete la parte alta del reg rs en regrt se mete la pa
227. es TNE rs rt Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 180 Simulador de instrucciones del microprocesador MIPS R4000 Descripci n de la instrucci n El contenido del registro rt se compara con el contenido del registro rs Si el contenido del registro rs no es igual al contenido del registo rt ocurre una Trap exception Operaci n 32 64 if GPR rs 4 GPR rt then TrapException endif Excepciones Trap exception TNEI Trap If Not Equal Immediate El formato de la instrucci n es TNEI rs immediate Descripci n de la instrucci n El dato inmediato de 16 bits con su extensi n de signo se compara con el contenido del registro rs Si el contenido del registro rs no es igual que el dato inmediato con su extensi n de signo ocurre una Trap exception Operaci n 32 if GPR rs immediate s immediate s then TrapException endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 181 Simulador de instrucciones del microprocesador MIPS R4000 64 if GPR rs immediate s immediate s then TrapException endif Excepciones Trap exception XOR Exclusive Or El formato de la instrucci n es XOR rd rs rt Descripci n de la instrucci n El contenido del registro rs se combina con el contenido del registro rt en una operaci n l gica XOR El resultado se guarda en el registro rd
228. esplaz i gt 4 1i j 1 if fwrite 8 doble0 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria for i 0 i lt 4 i j i if fwrite 8 doblel 3 sizeof UCHAR 1 pf 0 Escribe en memoria Error Error al acceder a memoria Ap ndice II C digo fuente del simulador P g 322 Simulador de instrucciones del microprocesador MIPS R4000 fin de la instrucci n SDR void J ULONG instruccion Jump ULONG target Para el campo target signed long int temp Variable temporal target instruccion amp 0x03FFFFFF Cogemos el campo target de la instr temp target lt lt 2 En temp metemos target desplazado 2 bits hacia izq if Estado UX 0 para 32 bits if temp gt 65535 temp lt 0 temp porque es la direcci n completa gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones temp temp 4 porque al salir de esta funci n se incrementa en 4 rpg 34 1 temp Metemos temp en el contador de programa else if Estado UX 1 para 64 bits if temp gt 65535 temp lt 0 temp porque es la direcci n completa gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones temp temp 4 porque al salir de esta funci n se incrementa en 4 rpg 34
229. et auxi auxi gt gt 15 Desplazamos 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos la extensi n de signo de offset off0 OXFFFFFFFF Ponemos la parte alta de offset todo a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta de offset todo a ceros destino rpg base 1 offset Hacemos registro base mas offset dest0 rpglbase 0 off0 Hacemos registro base off0 parte alta aca acarreo rpg lbase 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta del destino en uno if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si se sale del rango de memoria gotoxy 30 23 Nos posicionamos en la pantalla printf Direcci tn fuera de rango Informamos else if destino 2 0 Si no es multiplo de dos General_Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception Ap ndice II C digo fuente del simulador P g 284 Simulador de instrucciones del microprocesador MIPS R4000 else Si no se sale del rango de memoria y no hay error de direcc fseek pf destino SEEK SET Nos posicionamos en el fichero de mem if fread amp datol sizeof UCHAR 1 pf 0 leemos un byte Error Error al acceder a memoria
230. etemos else if desplaz 1 Si desplazamiento es igual a uno if Estado RE 1 rpgirt 1 rpgirt 1 OxFFFF0000 else if Estado RE 0 rpg rt 1 rpg rt 1 amp 0xFF000000 rpg rt 1 srpg rt 1 auxi Hacemos or de auxi y parte baja else if desplaz 2 Si desplazamiento es igual a dos if Estado RE else if Estado R E 1 rpg rt 1l1 rpg rt 1 0xFF000000 rpg rt 1 rpg rt 1 amp OxFFFFOOOO rpg rt 1 rpeg rt 1 auxi Hacemos or de parte baja y auxi else if desplaz 3 Si desplazamiento es igual a tres if Estado RE 1 rpg rt 1 auxi Si es big endian else if Estado RE 0 Si es little endian rpg rt 1 rpg rt 1 amp OxFFFFFFOO Hacemos and con parte baja rpg rt 1 1 rpg rt1 1 auxi Hacemos or de parte baja y auxi Ahora vamos a hacer la extensi n de signo auxi rpg rt 1 gt gt 31 En auxi metemos parte baja desplazada 31 bits if auxi 0 Si auxi es distinto de cero rpg rt 0 0xFFEFEFEFEFEF En parte alta metemos todo a unos else if auxi 0 Si auxi es igual a cero rpg rt 0 0 En parte alta metemos todo a ceros Fin de la instrucci n LWR void LWU ULONG instruccion Load Word Unsigned Al offset se 1 xtiend l signo y se suma al contenido del registro base para formar una direccictn El con
231. f destino gt 65535 destino lt 0 Si se sale de los limites gotoxy 30 23 Nos colocamos en la pantalla printf Direcci n fuera de rango Informamos E Si no se sale de los l mites fseek pf destino SEEK_SET Nos colocamos en memoria en posicicn indicada if fread amp dato sizeof UCHAR 1 pf 0 Leemos el dato Ap ndice II C digo fuente del simulador P g 281 Simulador de instrucciones del microprocesador MIPS R4000 Error Error al acceder a memoria rpg rt 1 dato En parte baja del reg rt metemos el dato dato dato gt gt 7 Desplazamos el dato 7 bits hacia la derecha if dato 0 Si dato es distinto de cero reg rt 1 rpg rt 1 OxFFFFFFOO Ponemos el resto del reg a uno else if dato 0 Si dato es igual a cero rpg rt 1 rpg rt 1 amp 0x000000FF Ponemos el resto del reg a cero else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 Nos posicionamos printf Direcci n fuera de rango Informamos else Si no se sale de los 1 mites fseek pf destino SEEK SET Nos posicionamos en el fichero de memoria if fread dato sizeof UCHAR 1 pf 0 Leemos el dato rror Error al acceder a memoria E rpg rt 1 dato Metemos el dato en la part
232. f eft Logical Variable Doubleword Shif eft Logical 32 Doubleword Shift Right Arithmetic Doubleword Shift Right Arithmetic Vble Doubleword Shift Right Arithmetic 32 Doubleword Shift Righ ogical Doubleword Shift Righ Ogical Doubleword Shift Righ gical Doubleword Subtract Doubleword Subtract Unsigned ump And Link Register ump Register From HI From LO To HI To LO Dou Variable ES a e a e Et fE O a A e FEET EY PE TS Multiply Multiply Unsigned N or Or Shif Shif Set On Set On Shift Shif Shif Shif Subt Subt T T T T Trap Trap eft eft Less Less Right Righ Righ Righ ract ract Unsigned If Equal If Greater Than Or If Greater Than Or If Less Than If Less Than Unsigned If Not Equal Exclusive Or ogical ogica l Than Than Unsigned Arithmetic Arithmetic Variable ogical ogica l A A Variable EE E FAR SET Variable rap rap rap rap Equal Equal Unsigned Doubleword Add Unsigned Ap ndice II C digo fuente del simulador P g 187 Simulador de instrucciones del microprocesador MIPS R4000
233. g 78 Simulador de instrucciones del microprocesador MIPS R4000 MIPS 4000 0004 FF 00 03 34 01 00 84 4 00 00 00 00 00 00 00 00 RO OOOO OODOCODODo0O 004 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Ri 00ODOOCODOOOODOT 0024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R2 ODO OOOO OOO0O 00534 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R3 OOOO DO0Ocoo0 0044 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R4 OOOO OOOO OO000 0054 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ES DO0DOODO005 Ono 0064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 kE OOOO OOO OOO0O 0074 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EF IDOODOODOCODODo00 0004 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 RE OOOO DOcOnoo0 0094 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3 ODO 0ODODO0000 0044 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R10 000000ODOOOODOOO 0064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R11 000000000000 0000 121200000000 000000100 Paralelo ORI r3 r0 00FFh R13 0000000OQODOOODO Little endian ADDIU r4 r4 0001h Ri4 00000000 0000 CIC Usuario R15 0000000000000000 32 bits E Ejecutar P Parar Regs gt 16 31 HI OOOO OOOO PE OOOO OOO OOO0d LO DoDo coa Figura 9 4 Ver direcci n Esta opci n sirve solo para visualizar la memoria a partir de una direcci n dada Al pulsar esta opci n el ordenador nos pide la direcci n a partir de la cual queremos visu
234. g 32 1 Vemos la parte baja del registro HI gotoxy 6 23 Nos posicionamos printt LOZ printf o rpg 33 1 01 Vemos la parte alta del registro LO printf 2081X rpg 33 11 Vemos la parte baja del registro LO void ini regs void Esta funci n lo que hace es inicializar los registros de proposito general 0 31 y los de proposito especial HI LO CP a un valor determinado en este caso a cero itsi variables para los contadores for i 0 i lt 35 i i es 35 porqu s el n mero de filas de la matriz for 3 0 3 lt 2 3 j es 2 porqu s el nfmero de columnas de la matriz rpg i j 0x00 inicializamos a cero void limpia int x1 int yl int x2 int y2 A esta funci n le pasamos como par metro el valor de la esquina superior izquierda valor x valor y y el valor de la esquina inferior derecha y borra la pantalla int restal resta2 i j variables usadas gotoxy 18 16 printf gotoxy 18 21 printf gotoxy 57 19 printf 2 restal y2 yl calculamos la distancia vertical resta2 x2 xl calculamos la distancia horizontal for 1 0 i lt restal 1 1 for 3 0 lt resta2 1 3 gotoxy xl j yl i nos situamos con el cursor printf borramos zona de pantalla idicada int Meter _Instrucce void En esta funci n lo que vamos a hacer es meter instrucciones en la zona de memoria a part
235. g rt 1 rpeg rt 1 auxi Hacemos or de parte baja y auxi else if Estado RE 0 rpg rt l auxi Metemos auxi en parte baja auxi rpg rt 1 gt gt 31 En auxi metemos parte baja desplaz 31 bits drcha if auxi 0 Si auxi es distinto de cero rpg rt 0 0xFFFFFFFF En la parte alta del reg metemos todo unos else if auxi 0 Si auxi es igual a cero rpg rt 0 0 Metemos en la parte alta todo ceros fin de la instrucci tn LWL void LWR ULONG instruccion Load Word Right Esta instrucci n puede usarse en combinaci n con la instrucci n LWL para cargar un registro con cuatro bytes consecutivos desde memoria cuando los Ap ndice IT C digo fuente del simulador P g 293 Simulador de instrucciones del microprocesador MIPS R4000 bytes cruzan un l1 mite de palabra LWR carga la parte derecha del registro con la parte correspondiente de orden bajo de la palabra UCHAR rt base dato 4 desplaz aca Para registro dato desplazam y acarreo signed long int off0 offset dest0 destino Parte alta y baja de offs y dest ULONG auxi Variable auxiliar int ide Para los ndices rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el campo base de la instruccitn offset instruccion Ox0000FFFEF Cogemos el offset de la instrucci n auxi offset En auxi mete
236. gno a unos off0 OXFFFFFFFE Ponemos la parte alta de offset a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta de offset a ceros destino rpg base 1 offset Hacemos registro base desplazamiento dest0 rpg base 0 off0 Hacemos registro base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno desplaz destino 0x00000007 Cogemos el desplazamiento desde el 1 mite destino destino amp OxFFFFFFF8 Cogemos el limite de doblepalabra if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else si no se sale del rango de memoria if Estado RE 0 si es little endian doble0 lontocar rpg rt 1 Metemos en doble0 la parte baja de rt doblel lontocar rpg rt 0 Metemos en doblel la parte alta de rt fseek pf destino desplaz SEEK SET Nos situamos en el fichero if desplaz 0 desplaz 1 desplaz 2 desplaz 3 Si desplazamiento es cero uno dos tres for i 0 i lt 4 i j 3 1
237. ht Instrucciones Aritm ticas dato inmediato Opcode Descripci n ADDI Add Immediate ADDIU Add Immediate Unsigned SLTI Set on Less Than Immediate SLTIU Set on Less Than Immediate Unsigned ANDI AND Immediate ORI OR Immediate XORI Exclusive Or Immediate LUI Load Upper Immediate Manual de Usuario del simulador de instrucciones MIPS R4000 P g 61 Simulador de instrucciones del microprocesador MIPS R4000 Instrucciones Aritm ticas 3 operandos R Type OpCode Descripci n ADD Add ADDU Add Unsigned SUB Subtract SUBU Subtract Unsigned SLT Set on Less Than SLTU Set on Less Than Unsigned AND AND OR OR XOR Exclusive OR NOR NOR Instrucciones de Multiplicaci n y Divisi n OpCode Descripci n MULT Multiply MULTU Multiply Unsigned DIV Divide DIVU Divide Unsigned MFHI Move From HI MTHI Move To HI MFLO Move From LO MTLO Move To LO Manual de Usuario del simulador de instrucciones MIPS R4000 P g 62 Simulador de instrucciones del microprocesador MIPS R4000 Instrucciones de Saltos absolutos y relativos OpCode Descripci n J Jump JAL Jump And Link JR Jump Register JALR Jump And Link Register BEQ Branch on Equal BNE Branch on Not Equal BLEZ Branch on Less Than or Equal to Zero BGTZ Branch on Greater Than Zero BLTZ Branch on Less Than Zero BGEZ Branch on Greater Than or
238. i n de signo de LO if auxi 0 Si auxi es distinto de cero rpg 33 0 0xXFFFFFFFF ponemos la parte alta del registro todo a 1 else if auxi 0 Si auxi es igual a cero rpg 33 0 0x00000000 ponemos la parte alta del registro todo a 0 Hacemos la multiplicaci n y guardamos el resultado en el reg HI rpg 32 1 multiplicacion 0 regrs 0 regrt BAJAMEDIA if cambio 1 Hacemos el cambio de signo rpg 32 1 rpg 32 1 Invertimos los bits if rpg 33 1 0 Si la parte baja del reg LO es cero hay carry rpg 32 1 incrementamos la parte baja del registro HI auxi rpg 32 1 gt gt 31 Vamos a hacer la extensi n de signo de HI if auxi 0 Si auxi es distinto de cero rpg 32 0 0xFFFFFFFF ponemos la parte alta del registro todo a 1 else if auxi 0 Si auxi es igual a cero rpg 32 0 0x00000000 ponemos la parte alta del registro todo a 0 fin de la instrucci n MULT Ap ndice II C digo fuente del simulador P g 331 Simulador de instrucciones del microprocesador MIPS R4000 void MULTU ULONG instruccion Multiply U Multiplica sin signo el contenido de los re bajos del resultado se guardan en el registro del resultado se guardan en el registro HI E nsigned gistros rs y rt Los 32 bits mas LO y los 32 bits m s altos de signo en el correspondiente registro del r UCHAR rt rs sa Para coger el n mero d ULONG auxi
239. i n de signo se compara con el contenido del registro rs Si el contenido del registro rs es igual al dato inmediato con su extensi n de signo ocurre una Trap exception Operaci n 32 if GPR rs immediate15 immediate s o then TrapException endif 64 if GPR rs immediates immediate s o then TrapException endif Excepciones Trap exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 174 Simulador de instrucciones del microprocesador MIPS R4000 TGE Trap If Greater Than Or Equal El formato de la instrucci n es TGE rs rt Descripci n de la instrucci n El contenido del registro rt se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es mayor que o igual al contenido del registro rt ocurre una Trap exception Operaci n 32 64 if GPR rs 2 GPR rt then TrapException endif Excepciones Trap exception TGEI Trap If Greater Than Or Equal Immediate El formato de la instrucci n es TGEI rs immediate Descripci n de la instrucci n El dato inmediato de 16 bits con su extensi n de signo se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es mayor que o igual que el dato inmediato con su extensi n de signo ocurre una Trap exception Ap ndice I Descripci
240. i es igual a cero off0 0 En la parte alta del offset metemos todo ceros destino rpg base 1 offset Hacemos registro base desplazamiento dest0 rpg base 0 off0 Hacemos reg base off0 parte alta aca acarreo rpg lbase 1 offset Miramos si hay acarreo if aca 1 Si acarreo es igual a uno dest0 Incrementamos la parte alta de la direccifn destino if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si se sale del rango de dirs gotoxy 30 23 printf Direccitn fuera de rango else if destino 4 0 Si la direcci n no es m ltiplo de 4 General Exception Exror de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango y si no hay error de direccionamiento fseek pf destino SEEK SET 3e situa en el fichero de la memoria for i 0 i lt 4 i if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian j i if fread 8 dato 3j sizeof UCHAR 1 pf 0 Cogemos 4 bytes Ap ndice II C digo fuente del simulador P g 289 Simulador de instrucciones del microprocesador MIPS R4000 Error Error al acceder a memoria rpg rt 1 chartolong dato En la parte baja del reg rt mete dato i else if Estado UX 1 Para 64 bits i if dest0 0 dest0 0
241. i metemos todo 1 despl drch 32 sa auxi auxi lt lt 32 sa Desplazamos a la izq 32 sa bits a auxi Aa if auxi 0 Si auxi es igual a cero i auxi 0x00000000 En auxi metemos un cero E EES Desplazamos sa bits a la derecha rpg rd 1 rpeg rd 1 auxi Hacemos la or del registro con auxi else if Estado UX 1 Para 64 bits bts auxi rpg rt 1 gt gt 31 En auxi metemos el reg rt desplaz a la drcha 31 if auxi 0 Si auxi es distinto de cero rpg rd 0 0xFFFFFFFF En la parte alta se pone todo a unos auxi 0xFFFFFFFF gt gt 32 sa Se desplaza a la derecha 32 sa bits auxi auxi lt lt 32 sa Se vuelve a desplazar a la izq 32 sa bits else if auxi 0 Si auxi es igual a cero rpg rd 0 0x00000000 En la parte alta se pone todo a ceros auxi 0x00000000 En auxi ponemos un cero rpg rd 1 rpg rt 1 gt gt sa Desplazamos la parte baja sa bits rpg rd 1 reg rd 1 auxi Hacemos la or del reg y auxi Fin de la instrucci n SRAV void SLT ULONG instruccion Set On Less Than Si el contenido del registro rs es menor que el contenido del registro rt el resultado se pone a uno en caso de que no sea menor el resultado se pone a cero los datos tienen que ser con signo UCHAR rs rt rd Para coger el n fmero de los registros signed long int rssigno rtsigno signed long int ULONG rsnosigno rtnosigno
242. ia 7 i resul 8 i for i 3 i gt 0 i baja 3 1 resul 8 i uno chartolong alta dos chartolong altamedia tres chartolong bajamedia cuatro chartolong baja Ap ndice II C digo fuente del simulador P g 327 Simulador de instrucciones del microprocesador MIPS R4000 if strcmp c ALTA 0 return uno else if strcmp c ALTAMEDIA 0 return dos else if strcmp c BAJAMEDIA 0 return tres else if strcmp c BAJA 0 return cuatro void DMULT ULONG instruccion Doubleword Multiply En modo 32 bits causa una reserved instruction exception multiplica con signo el contenido de los registros rs y rt bajos del resultado se guardan en el registro LO y los 64 bi del resultado se guardan en el registro HI UCHAR rt rs sa cambio 0 ULONG auxi regrs0 Para coger regrs1 regrt0 regrtl l n fmero de regist Variable auxilia RS ins RT ins la la rs de rt de truccion truccion rs Campo rt Campo Cogemos el campo Cogemos el campo regrs0 rpg rs 0 gt gt 31 regrt0 rpg rt 0 gt gt 31 Guardamos en regrs0 la Guardamos en regrt0 la parte parte alta del reg alta del reg En 64 bits Los 64 bits mas ts m s altos rO r y para regs instruccicn instruccicn rs EEs if regrs0 0 amp amp regrt0 0 Si los dos operandos son negativos regrsl rpg
243. ian j 1 if fread 8 doble0 3 sizeof UCHAR 1 pf 0 Cogemos 4 bytes Error Error al acceder a memoria for i 0 i lt 4 i if Estado RE 0 Si es little endian J 3 15 else if Estado RE 1 Si es big endian j 1 if fread doblel 3j sizeof UCHAR 1 pf 0 leemos otros 4 bytes Error Error al acceder a memoria if Estado RE 0 Si es little endian datomenorpeso chartolong doble0 Dato de menor peso es doble0 datomayorpeso chartolong doble1 Dato de mayor peso es doblel else if Estado RE 1 Si el big endian datomayorpeso chartolong doble0 Dato de mayor peso es doble0 datomenorpeso chartolong doble1 Dato de menor peso es doblel Ap ndice II C digo fuente del simulador P g 299 Simulador de instrucciones del microprocesador MIPS R4000 da da vo ca cr in ac de au pr rpg rt 0 datomayorpeso Metemos en parte alta de reg tomayorpeso rpg rt 1 datomenorpeso Metemos en parte baja de reg tomenorpeso Fin de la instrucci n LD id LDL ULONG instruccion Load Doubleword Left Esta instrucci n puede ser usada en combinaci n con la instruccitf LDR para rgar un registro con ocho bytes consecutivos de memoria cuando los bytes uzan un 1 mite de doble palabra En modo 32 bits causa una reserved
244. igno del bit 31 del registro Operaci n Tenemos una palabra word que es Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 145 Simulador de instrucciones del microprocesador MIPS R4000 39457358 Para Big Endian Memoria 0000 39 45 73 58 Registro Desplazam Registro rt 0 gt S S S S X X X 39 1 gt S S S S X X 39 45 2 gt S S S S X 39 45 73 3 gt S S S S 39 45 73 58 Para Little Endian Memoria 0000 58 73 45 39 Registro Desplazam Registro rt 0 gt S S S S 39 45 T3 58 1 gt S S S S X 39 45 73 2 gt S S S S X X 39 45 3 gt S S S S X X X 39 X Lo que hab a en el registro antes de LWR 09 Extensi n de signo Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 146 Simulador de instrucciones del microprocesador MIPS R4000 LWU Load Word Unsigned El formato de la instrucci n es LWU rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar la direcci n a la que vamos a acceder La palabra localizada a partir de la direcci n de memoria especificada se guarda en el registro rt A esta palabra que hemos guardado se le hace una extensi n con ceros Si alguno de los dos
245. igual a uno if Estado RE 1 rpg rt 1 rpg rt 1 amp 0x000000FF Si Big endian else if Estado RE 0 rpg rt 1 rpg rt 1 0x0000FFFF Little endian rpg rt 1 reg rt 1 auxi Hacemos or de parte baja con auxi else if desplaz 2 if Estado RE 1 rpg rt 1 rpg rt 1 amp 0x0000FFFF Si Big endian else if Estado RE 0 rpg rt 1 rpg rt 1 0x000000FF Little rpg rt 1 reg rt 1 auxi Hacemos or de parte baja con auxi else if desplaz 3 Si el desplazamiento es igual a tres if Estado RE 1 Si Big endian rpg rt 1 srpg rt 1 amp Ox00FFFFFF Hacemos la and con parte baja rpg rt 1 reg rt 1 auxi Hacemos la or de auxi con parte baja else if Estado RE 0 rpg rt 1 auxi En parte baja metemos auxi else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale de los l mites de la memoria fseek pf destino SEEK SET Nos situamos en el fichero destino for i 0 i lt 4 i if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian J i3 Ap ndice II C digo fuente del simulador P g 292 Simulador de instrucciones del microprocesador MIPS R4000 if fread 8d
246. iguales y el bit de signo del resultado sea distinto que el de los operandos General _Exception Integer overflow exception gotoxy 30 23 printf Integer overfl exception Ap ndice IT C digo fuente del simulador P g 239 Simulador de instrucciones del microprocesador MIPS R4000 else en caso de que no haya overflow rpg rd 0 regrd0 rpg rd 1 regrd1 metemos el resultado en el registro rd Fin de la instrucci n DADD void DSUBU ULONG instruccion Si el modo de operaci n es de 32 bits se produce una Reserved instr excep tion En 64 bits hace la resta de los registro rs y rt y el resultado lo mete en el registro rd No se produce ninguna excepci n de desbordamiento UCHAR rs rt rd aca Para coger n mero de regs y acarreo ULONG regrs0 regrs1l regrt0 regrt1 regrd0 regrdl1 var auxiliares rs Campo RS instruccion cogemos el campo rs de la instrucci n rt Campo RT instruccion cogemos el campo rt de la instrucci n rd Campo RD instruccion cogemos el campo rd de la instrucci n if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits regrs0 rpg rs 0 El primer operando se deja como est regrsl rpg rs 1 regrt0 rpg rt 0 Al segundo operando se le cambia
247. inmediato 0x00000000 se hace la extensie n else if auxi 0 inmediato inmediato OxFFFFOOOO regrt regrs inmediato se hace la suma y el resultado en regrt inme inmediato en inme se guarda el dato inmediato con su extensicn auxrs regrs en la var auxiliar auxrs se guarda el dato del reg rs auxrt regrt en auxrt se guarda el resultado inme inme gt gt 31 se mira el bit 31 auxrs auxrs gt gt 31 auxrt auxrt gt gt 31 if Estado UX 0 para 32 bits if auxrs inme amp amp auxrt auxrs Ap ndice II C digo fuente del simulador P g 218 Simulador de instrucciones del microprocesador MIPS R4000 la nica condici n para que haya overflow es que los bit de signo de los dos operandos sean iguales y el bit de signo del resultado sea distinto que el de los operandos General _Exception Integer overflow exception gotoxy 30 23 printf Integer overfl exception else si no hay overflow rpg rt 1 regrt metemos el resultado en el registro rt else if Estado UX 1 para 64 bits if auxrs inme amp amp auxrt auxrs General_Exception Integer overflow exception gotoxy 30 23 printf Integer overfl exception else rpg rt 1 regrt metemos el resultado en el registro destino ahora vamos a hacer la extensi n de signo if auxrt 0 si el bit 31 no es cer
248. inmediato de la inst Ahora vamos a imprimir el mnemtnico por pantalla printf Ss r d r3d 504Xh formatos dec nombre rt rs inmediato void Formato ocho ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnemtnicos de la siguiente manera NOMBRE_INSTR RS RT OFFSET Las instrucciones que usan este formato son BEQ BEQL BNE BNEL UCHAR rt rs Para coger los nfmeros de registro ULONG offset Para coger el dato offset rt Campo RT instruccion Cogemos el campo rt de la instrucci n rs Campo RS instruccion Cogemos el campo rs de la instrucci n offset instruccion Ox0000FFFF Cogemos el campo offset de la inst Ahora vamos a imprimir el mnemtnico por pantalla printf Ss r d rd 504Xh formatos dec nombre rs rt of set void Formato nueve ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnem nicos de la siguiente manera NOMBRE_INSTR RS OFFSET Las instrucciones que usan este formato son BGTZ BGTZL BLEZ BLEZL UCHAR rs Para coger los n meros de registro ULONG offset Para coger el dato offset rs Campo RS instruccion Cogemos el campo rs de la instrucci n offset instruccion Ox0000FFFF Cogemos el campo offset de la inst Ahora vamos a imprimir el mnem nico por pantalla printf Ss r d 504Xh formatos dec nombr
249. ino rpg base 1 offset dest0 rpg base 0 off0 aca acarreo rpg base 1 offse te alta de offset a ceros Sumam Sumam tU os registro base offset os registro base off0 parte alta Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de la direccitn destino if Estado UX 0 Estado KSU 1 Estado KSU 2 Para 32 bits Ap ndice II C digo fuente del simulador P g 298 Simulador de instrucciones del microprocesador MIPS R4000 General Exception Reserved instruction exception Si modo kernel no s jecuta excepcion gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Estado KSU 0 Para 64 bits O KERNEL if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 Nos posicionamos printf Direcci n fuera de rango Informamos else if destino 8 0 Si la direcci n destino no es multiplo de 8 General_Exception Se produce un error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango de direcc y no hay error de direcc fseek pf destino SEEK SET Nos posicionamos en el fichero memoria for 1 0 1 lt 4 1 if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big end
250. instruccion UCHAR dec void Formato quince ULONG instruccione UCHAR dec typedef struct Utilizamos esta estructura para decodificar instrucci n char formato Para guardar el formato de la instruccicn char nombre Para guardar el nombre de la instruccicn jidecodificador Es el nombre del tipo de la estructura Voy a declarar las variables globales a las cuales puedo acceder en cualquier zona del programa decodificador formatos 256 3 SLL 0 NULL 3 SRL 3 SRA 1 SLLV 0 NULD 1 SRLV 1 SRAV 4 JR 6 JALR 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 5 MFEI 4 MTHI 5 MFLO 4 MTLO 1 DSLLV 0 NULL 1 DSRLV 1 DSRAV 2 MULT 2 MULTU 2 DIV 2 DIVU 2 DMULT 2 DMULTU 2 DDIV 2 DDIVU 0 ADD 0 ADDU 0 5UB 0 SUBU 0 AND 0 OR 0 XOR 0 NOR 0 NULL 0 NULL 0 SLT 0 SLTU 0 DADD 0 DADDU 0 DSUB 0 DSUBU 2 TGE 2 TGEU 2 TLT 2 TLTU 2 TEQ 0 NU L 2 TINE 0 NULL 3 DSLL 0 NULL
251. io del programa fseek pf auxiliar SEEK_ SET Nos posicionamos en la memoria for 1 0 i lt 4 i cogemos la primera instruccitn if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian j i if fread 8 car 3 sizeof UCHAR 1 pf 0 Error Error al acceder a memoria for i 0 i lt 4 i cogemos la instrucci n siguiente if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian j i if fread 8 car2 3 sizeof UCHAR 1 pf 0 Error Error al acceder a memoria Ap ndice II C digo fuente del simulador P g 202 Simulador de instrucciones del microprocesador MIPS R4000 auxiliar chartolong car auxiliar contiene la instrucci n a ejecutar auxiliar2 chartolong car2 auxiliar2 contiene la siguiente instruccitn if ejecucion 1 ejecucion 2 amp amp paralelo 2 0 ejecucion 3 cop Cod_ op auxiliar 0xFC000000 voy a formar el n mero que dec instr switch cop case 0 dec 0 cop Cod_op auxiliar 0x0000003E dec dec cop break Case 1 dec 1 dec dec lt lt 6 cop Cod_op auxiliar 0x001F0000 dec dec cop break default dec 2 dec dec lt lt 6 dec dec cop gotoxy 20 17 if formatos dec nomore NULL printf No encontrada break else format formatos dec formato formatos es el array de estructur
252. ir de la direcci tn que indiquemos Ap ndice II C digo fuente del simulador P g 198 Simulador de instrucciones del microprocesador MIPS R4000 ULONG comienzo cuenta i instruccion UCHAR car NULL int x 9 y 4 J k int escape do limpia 2 17 56 20 limpia una zona de la pantalla gotoxy 2 17 se posiciona printf Direccitn de comienzo pide la direcci tn de inicio de prog escape leedir comienzo lee la direcci n de comienzo fflush stdin if escape 0 return 0 while comienzo 4 0 comienzo gt 65535 cuenta comienzo a cuenta le asigna el comienzo Ver memoria comienzo Visualizamos memoria a partir de dir inicio if pf fopen memoria r b NULL abrimos fich para lectura escr Error Error al acceder a memoria Escribimos mensaje fseek pf cuenta SEEK SET El cursor del fich se va a la direcc indicada gotoxy 2 printf Escribe una instrucci n completa gotoxy 45 17 se posiciona el cursor printf salir Esc informaci n de lo que hay que poner para salir do gotoxy 2 18 se posiciona el cursor printf gotoxy 2 18 i cuenta a i le asignamos el valor de cuenta printf 04X i Se pide valor introducido en esa direccion fflush stdin limpiamos el buffer escape leeinstr 8instruccion leemos el dato car lontocar
253. istro base para formar una direccitn virtual El byte menos significativo del registro rt se almacena en la direccitn Ap ndice IT C digo fuente del simulador P g 307 Simulador de instrucciones del microprocesador MIPS R4000 UCHAR rt base dato aca base es el campo de rs dato y acarreo signed long int off0 offset dest0 destino Parte alta y baja de off y dest ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instruccitn base Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el offset de la instrucci n auxi offset En auxi metemos el contenido de offset auxi auxi gt gt 15 Desplazamos a la derecha 15 bits if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos la extensi n de signo con unos off0 OXFFFFFEFEFF La parte alta del offset la ponemos a unos else if auxi 0 Si auxi es igual a cero off0 0 Ponemos la parte alta del offset a cero destino rpg base 1 offset Hacemos registro base desplazamiento dest0 rpg base 0 off0 Hacemos registro basetoff0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno dato rpg rt 1 0x000000FF Cogemos el byte m s bajo del reg rt if Estado UX 0 P
254. jor veremos ejemplos con im genes del propio simulador ejecutando esta opci n Manual de Usuario del simulador de instrucciones MIPS R4000 P g 73 Simulador de instrucciones del microprocesador MIPS R4000 Si pulsamos la opci n 1 desde el men principal nos pide la direcci n de comienzo Esta direcci n debe estar alineada en el l mite de una palabra es decir m ltiplo de 4 porque las instrucciones son de 32 bits una palabra Si la direcci n no es m ltiplo de cuatro nos la vuelve a pedir Introducimos la direcci n 0010 y como veremos en la figura 3 las direcciones de la pantalla se comienzan a visualizar a partir de la direcci n 0010 Ya podemos comenzar a introducir instrucciones en memoria MIPS R4000 0000000000000 00 OOOOOOO00000000 00 OO0OOOOO0000D0000d OOOO OOO0000D0000I0 OOOO OaoO OOOO OOO000000000d 0000000000000 OOOO OODOOOD0D0O0 acia OOOO OOOO00000000 DOOO0O00000000000 OOOO OOO O0D0o0n0ona 0000000000000000 0000000000000000 Direcci n comienzo r0p0O0O00O0OQ0D0D 0000000000000000 0000000000000000 16 31 HT OOOO 000000000000 PE O0000000000000000 Aa Figura 2 En la figura 3 vemos que despu s de haber introducido la direcci n de comienzo las direcciones de pantalla comienzan a visualizarse a partir de la direcci n 0010 entonces nos pide que introduzcamos una instrucci n completa en este caso por hacer una prueba vamos a meter la instrucci n OR r7 r5
255. k se sale del switch Case 27 return 0 se sale de la funcifn fin del switch while op 3 mientras que la variable op sea distinta de 3 return 0 void ini memoria void Ap ndice II C digo fuente del simulador P g 195 Simulador de instrucciones del microprocesador MIPS R4000 Esta funci tn inicializa el fichero que contiene la memoria todo a ceros ULONG i i es el contador del for UCHAR car 0x00 Inicializamos la memoria al valor de car Lo primero vamos a inicializar la memoria if pf fopen memoria wb NULL abrimos el fichero para escritura Error Error al acceder a memoria Escribimos mensaje de error for 1 0 1 lt 65535 1 inicializamos 64 Kbytes a cero if fwrite 8 car sizeof UCHAR 1 pf 0 escribimos en el fichero Error Error al escribir en la memoria imprimimos mensaje fclose pf Cerramos el fichero void Ver memoria ULONG direccion Pasamos como par metro una direcci n a partir de la cual vamos a ver lo que contiene la memoria y el fichero que vamos a usar ULONG cont i cont para poner las direcc en pantalla i contador del for UCHAR car en car metemos el caracter leido del fichero ultimadir direccion cont direccion en cont metemos la direcci n desde la que queremos ver memoria if pf fopen memoria rb
256. l nea de cach de 4 8 palabras La figura 19 muestra el formato de una l nea de cach primaria de 8 palabras 32 bytes Caracter sticas generales del procesador MIPS R4000 P g 45 Simulador de instrucciones del microprocesador MIPS R 4000 25 24 23 0 AAA 71 64 63 0 DataP Paridad par 1 bit de paridad por byte de datos Figura 19 Formato de L nea de I cach Primaria de 8 palabras PTag Etiqueta f sica bits 35 12 de la direcci n f sica V Bit de V lido Data Dato de la Cach instrucci n P Paridad par para los campos PTag y V Organizaci n de la Cach de datos Primaria D cach Cada l nea de datos que son datos de la cach de datos primaria tiene una etiqueta asociada de 29 bits que contiene una direcci n f sica de 24 bits 2 bits del estado de l nea de cach un bit de post escritura write back un bit de paridad para la direcci n f sica y campos de estado de la cach y un bit de paridad para el bit de post escritura La cach primaria de datos tiene las siguientes caracter sticas e Post escritura e Mapeado directo e Indexado con una direcci n virtual e Chequeado con una etiqueta f sica e Organizado con una l nea de cach de 4 8 palabras La figura 20 muestra el formato de una l nea de cach de datos primaria de 8 palabras 32 bytes Caracter sticas generales del procesador MIPS R4000 P g 46 Simulador de instrucciones del microprocesa
257. la filazar columna for i columna 1 3 15 i gt 0 1i 3 cocil 3j diviscoc 1 i for 1i 0 i lt 16 1 rest i dividres fila 1 i Ahora lo convertimos a long cociente0 0 resto0 0 cociente 0 resto 0 for i 0 i lt 8 i temp ULONG coci i temp temp lt lt 28 4 1 cociente0 cociente0 temp temp ULONG rest 1 temp temp lt lt 28 4 1 resto0 resto0 temp for 1 8 1 lt 16 1 temp ULONG coci 1 temp temp lt lt 60 4 i cociente cociente temp temp ULONG rest 1 temp temp lt lt 60 4 i resto resto temp if strcmp car COCIENTEO 0 return cociente0 Ap ndice II C digo fuente del simulador P g 228 Simulador de instrucciones del microprocesador MIPS R4000 else if strcmp car COCIENTE 0 return cociente else if strcmp car RESTOO 0 return resto0 else if strcmp car RESTO 0 return resto void DDIV ULONG instruccion Doubleword Divide Esta instrucci n hace la divisi tn de 64 bits con signo de los registros rs y rt El cociente es guardado en el registro LO y el resto es guardado en el registro HI Para 32 se produce una Reserved Instruction Exception ULONG auxi cociente resto variable auxiliar cociente y resto de div signed long int rssigno rtsigno guarda lo que hay en los regs con
258. la CPU Caracter sticas generales del procesador MIPS R4000 P g 19 Simulador de instrucciones del microprocesador MIPS R 4000 Nombre del Registro Reg Nombre del registro Reg Index 0 Config 16 Random 1 LLAddr 17 EntryLo0 2 WatchLo 18 EntryLol 3 WatchHi 19 Context 4 Xcontext 20 PageMask 5 21 Wired 6 22 7 23 BadVaddr 8 24 Count 9 25 EntryHi 10 ECE 26 Compare 11 CacheErr 27 SR 12 TagLo 28 Cause 13 TagHi 29 EPC 14 ErrorEPC 30 PRId 15 31 Tratamiento de excepciones Manejo de Memoria L Reservado Figura 7 Registros del CPO En la siguiente tabla se describen brevemente los registros del CPO N Registro Descripci n 0 Index Puntero programable dentro del array TLB 1 Random Puntero Seudorandom dentro del array TLB solo lectura 2 EntryLo0 Parte baja de la entrada del TLB para direcciones virtuales pares VPN 3 EntryLol1 Parte alta de la entrada del TLB para direcciones virtuales impares VPN 4 Context Puntero a la entrada de la tabla de p gina virtual PTE en modo de direccionamiento 32 bits 5 PageMask Mascara de p gina del TLB Caracter sticas generales del procesador MIPS R4000 P g 20 Simulador de instrucciones del microprocesador MIPS R 4000 6 Wired N mer
259. la derecha sa bits Shift Right Arithmetic haciendo una extensi n de signo del bit de mayor peso UCHAR rt rd sa ULONG auxi Pa Variable auxiliar ra el n fmero de registro y desplazamiento rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn auxi instruccion 0x00007C0 Cogemos el campo sa de la instruccitn auxi auxi gt gt 6 Desplazamos hacia la derecha 6 bits sa UCHAR auxi Pasamos a UCHAR if Estado UX 0 Para 32 bits auxi rpg rt 1 gt gt if auxi 0 S auxi 0xFFFFFFFF gt gt 32 sa auxi auxi lt lt 32 else if auxi 0x00000000 rpg rd 1 rpg rt rpg rd 1 rpg rd else if auxi rpg rt 1 gt gt if auxi 0 auxi Estado UX 31 Metemos en auxi la parte baja desplaza 31 bits i es distinto de cero En auxi metemos todo 1 despl dercha 32 sa sa Desplazamos 32 sa bits hacia la izquierda Si auxi es igual a cero En auxi metemos un cero 1 1 gt gt sa J 1 auxi En parte baja metemos parte baja gt gt sa Hacemos la or con auxi 1 Para 64 bits 31 Metemos en auxi la parte baja desplaza 31 bits rpg rd 0 0xFE auxi 0xFFFFFFFF auxi auxi lt lt 32 else if f rpg rd 0 0x00 auxi 0x00000000 auxi rpg rd 11 rpg r
260. la direcci n que se ha formado de la suma anterior Si la condici n de salto no se cumple la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Operaci n 32 target offset s f offset 0 condicion GPR rs lt 0 GPR 31 amp PC 8 if condicion then PC PC target else se anula la siguiente instr endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 113 Simulador de instrucciones del microprocesador MIPS R4000 64 target offset1 s 7 offset 0 condicion GPR rs lt 0 GPR 31 lt PC 8 if condicion then PC E PC target else se anula la siguiente instr endif Excepciones Ninguna BLTZL Branch On Less Than Zero Likely El formato de la instrucci n es BLTZL rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es menor que cero el programa salta a la direcci n que se ha formado de la suma anterior Si la condici n de salto no se cumple la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Operaci n 32 target e offset s f offset 0 condicion GPR rs lt 0 Ap ndice I Descripci n de las instrucciones implementadas en el simulador
261. lador P g 221 Simulador de instrucciones del microprocesador MIPS R4000 General_Exception Integer overflow exception gotoxy 30 23 printf Integer overfl exception else rpg rd 1 regrd metemos el resultado en el registro destino ahora vamos a hacer la extensin de signo if auxrd 0 Si auxrd es distinto de cero rpg rd 0 0xFFFFFFFF Ponemos la parte alta toda a unos else if auxrd 0 Si auxrd es igual a cero rpg rd 0 0x00000000 Ponemos la parte alta toda a ceros Fin de la instrucci n SUB void SUBU ULONG instruccion Subtract Unsigned Resta el registro rs rt y el resultado se guarda en el registro rd Pa ra 64 bits se hace una extensin de signo No se produce desbordamiento UCHAR rs rt rd Para guardar el n fmero del registro U U LONG regrs regrt regrd Variables intermedias LONG auxrd Variable auxiliar s Campo RS instruccion Cogemos el campo rs de la instrucci n t Campo RT instruccion Cogemos el campo rt de la instrucci n rd Campo RD instruccion Cogemos el campo rd de la instruccitn egrs rpg rs 1 Guardamos parte baja de rs en regrs egrt rpg rt 1 1 Lo cambiamos de signo regrd regrs regrt Sumamos y guardamos en regrd auxrd regrd En aux metemos lo que hay en reg porque queremos auxrd auxrd gt gt 31 Desplazamos hacia la derecha 31 bits par
262. lador P g 241 Simulador de instrucciones del microprocesador MIPS R4000 auxi instruccion 0x00007C0 Cogemos el campo desplazamiento auxi auxi gt gt 6 Lo desplazamos seis bits a la derecha sa UCHAR auxi Y lo convertimos a unsigned char if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception Ponemos nombre de excepciftn else if Estado UX 1 Para 64 bits rpg rd 0 rpg rt 0 lt lt sa Desplazamos la parte alta sa bits a la izq auxi rpg rt 1 En auxi metemos la parte baja auxi auxi gt gt 32 sa Lo desplazamos 32 sa bits a la derecha rpg rd 0 reg rd 0 auxi Hacemos Or logica de parte alta con auxi rpg rd 1 rpg rt 1 lt lt sa Desplazamos parte baja sa bits hacia izq Fin de la instrucci n DSLL void DSLLV ULONG instruccion Si se ejecuta en 32 bits se produce una reserved instruction excepction En 64 bits puede desplazar de cero a 64 bits hacia la izquierda UCHAR rt rd rs s declaramos las variables de los reg y desplazamiento ULONG auxi auxi es variable auxiliar rd Campo RD instruccion cogemos el campo rd de la instruccitn rs Campo RS instruccion cogemos el campo rs de la instrucci tn rt Campo RT instruccion cogemos el campo rt de la instruccitn auxi rpg rs 1 amp 0x0000003F
263. lador de instrucciones del microprocesador MIPS R4000 Cuando la operaci n se completa el cociente se guarda en el registro de proposito especial LO y el resto se guarda en el registro de proposito especial HI Esta operaci n se define solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 LO lt GPR rs div GPR rt HI lt GPR rs mod GPR rt Lo Excepciones Reserved instruction exception En modo 32 bits DDIVU Doubleword Divide Unsigned El formato de la instrucci n es DDIVU rs rt Descripci n de la instrucci n El contenido del registro rs se divide por el contenido del registro rt tratando ambos operandos como valores sin signo No ocurre ning na Integer overflow excepci n y el resultado de esta operaci n es indefinido cuando el divisor es cero Cuando la operaci n se completa el cociente se guarda en el registro de proposito especial LO y el resto se guarda en el registro de proposito especial HI Esta operaci n se define solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 119 Simulador de instrucciones del microprocesador MIPS R4000 Operaci n 64 LO lt 0 GPR rs div 0 GPR rt HI lt 0
264. los bits m s altos de la direcci n f sica PA es la salida del TLB 3 El desplazamiento offset que no pasa a trav s del TLB se concatena con el PFN Caracter sticas generales del procesador MIPS R4000 P g 23 Simulador de instrucciones del microprocesador MIPS R 4000 Espacio de direcciones Virtuales La direcci n virtual del procesador puede ser de 32 64 bits de ancho dependiendo de si el procesador est operando en modo 32 bits o en modo 64 bits e En modo 32 bits las direcciones son de 32 bits de ancho El tama o m ximo es de 2 gigabytes 27 e En modo 64 bits las direcciones son de 64 bits de ancho El m ximo tama o es de 1 terabyte 2 Espacio de direcciones F sicas Usando una direcci n de 36 bits el espacio de la direcci n f sica del procesador abarca 64 gigabytes MODOS DE OPERACI N El procesador tiene tres modos de operaci n que funcionan en operaciones de 32 y 64 bits y son e Modo usuario e Modo supervisor e Modo kernel Operaciones en modo usuario En modo usuario est permitido un espacio de direcciones virtuales uniforme su tama o es e 2 Gbytes 2 bytes en modo 32 bits useg e 1 Tbyte 2 bytes en modo 64 bits xuseg La figura 9 muestra el espacio de direcciones virtuales en modo Usuario Caracter sticas generales del procesador MIPS R4000 P g 24 Simulador de instrucciones del microprocesador MIPS R 4000 32 bits 64 bits 0x F
265. ltas son distintas regrs rpg rs 0 En regrs metemos la parte alta del reg rs if regrs gt inme0 regrs inme0 Si es mayor o igual General_Exception Trap exception gotoxy 30 23 print Trap exception wa else if rpg rs 0 inme0 Si las dos partes altas son iguales if regrs gt inmediato regrs inmediato Comp partes bajas 1 General Exception Trap exception gotoxy 30 23 printf Trap exception D else Si las dos partes altas son igual a cero if regrs gt inmediato regrs inmediato Comparamos partes bajas General_Exception Trap exception gotoxy 30 23 prine T Trap exception IS Ap ndice II C digo fuente del simulador P g 272 Simulador de instrucciones del microprocesador MIPS R4000 IU El Fin de la instrucci tn TG void TLTI ULONG instruccion Trap If Less Than Immediate Al dato inmediato se 1 xtiend l signo y se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es menor que el dato inmediato extendido ocurre una Trap Exception UCHAR rs Para coger el nfmero de registro signed long int rssigno inmesigno Variables con signo ULONG inmediato inme0 auxi rsnosigno inmenosigno Variables sin signo rs Campo RS instruccion Cogemos el campo rs de la instruccitn inmediato instruc
266. ltiplicaci n entera e El cociente en LO y el resto en HI de las operaciones de divisi n entera Caracter sticas generales del procesador MIPS R4000 P g 6 Simulador de instrucciones del microprocesador MIPS R 4000 SET DE INSTRUCCIONES DE LA CPU Cada instrucci n de la CPU ocupa una palabra 32 bits Como se ve en la figura 2 hay tres formatos de instrucciones I Type 31 26 25 Inmediato I type salto J type registro R type Inmediato 21 20 16 15 0 CI J Type 31 26 25 R Type 31 26 25 Salto 0 Registro 21 20 16 15 Ll 40 e e Pe ej op rs ut immediate target rd sa funct codigo de operaci n de 6 bits especificador de registro fuente de 5 bits registro target fuente destino o condici n salto 5 bits valor inmediato de 16 bits desplazamiento de salto o desplazamiento de direcci n direcci n de salto de 26 bits especificador de registro destino de 5 bits Valor de desplazamiento de 5 bits Campo de funci n de 6 bits Figura 2 Formatos de instrucci n de la CPU Caracter sticas generales del procesador MIPS R4000 P g 7 Simulador de instrucciones del microprocesador MIPS R 4000 El set de instrucciones puede dividirse en los siguientes grupos e Carga y Almacenamiento Mueven datos entre la memoria y los registros de prop sito general Son de tipo inmediato 1 Type si el modo de direccionamiento que soportan es
267. microprocesador MIPS R4000 CODIFICAR UNA INSTRUCCI N Para introducir cualquiera de estas instrucciones en el simulador primeramente se debe hacer una codificaci n de la instrucci n Cada instrucci n ocupa 32 bits y dependiendo de la que sea se necesitar n unos operandos u otros Del mismo modo cada instrucci n tiene un c digo de operaci n en algunas ocupa seis bits y en otras cinco bits Si por ejemplo tenemos la instrucci n ADD r4 r5 r6 suma con signo los contenidos de los registros r5 y r6 y el resultado lo guarda en el registro r4 y queremos obtener el c digo de esta instrucci n que ser el que meteremos en el simulador lo primero que debemos hacer es acudir a las tablas proporcionadas en el manual de usuario donde est el formato los campos y el c digo de operaci n de cada instrucci n Con esta informaci n podremos construir el c digo de la instrucci n arriba indicada Si accedemos a estas tablas y buscamos la instrucci n ADD vemos que el formato es ADD rd rs rt Tenemos seis campos que debemos rellenar especial rs rt rd O cop En el campo especial que ocupa 6 bits metemos seis ceros En el campo rs queremos un cinco por tanto metemos un cinco en binario En el campo rt queremos un seis por tanto meteremos un seis en binario y en el campo rd queremos un cuatro por tanto meteremos un cuatro en binario El campo O son cinco bits a cero y en el campo COP metemos el c digo de operaci n de la instrucci
268. mos el positivo en complemento a dos regrt0 rpg rt 0 1 invertimos todos los bits if regrtl 0 regrt0 si hay acarreo al sumar a regrtl 1 inc regrtO cambio 1 Hay que hacer un cambio de signo al resultado final regrsl rpg rs 1 el registro rs al ser positivo se queda como est Ap ndice IT C digo fuente del simulador P g 229 Simulador de instrucciones del microprocesador MIPS R4000 regrs0 rpgl rs 0 else if regrs0 0 regrsl rpg rs 1 positivo regrs0 rpg rs 0 regrtl rpg rt 1 positivo regrt0 rpg rt 0 cambio 0 No hay q rssigno regrs0 rsnosigno regrsl rtsigno regrtO0 rtnosigno regrtl regrt0 0 El registro rs se queda como est El registro rt se queda como est ue hacer cambio de signo al Si los dos reg son positivos porque es porque es resultado final if Estado UX 0 para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 para 64 bits if rpg rt 1 0 amp amp rpg rt 0 0 si el divisor es cero gotoxy 30 23 printf Divisi n por cero informamos de que no se pued else si el divisor es distinto de cero se puede hacer la divisiftn if rpg rs 0 rpg rt 0 Si las dos partes altas son distintas if r
269. mos lo que hay en offset auxi auxi gt gt 15 Desplazamos 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OXxFFFFO000 Hacemos la extensi n de signo con unos off0 OXFFFFFEFEFF En la parte alta de offset ponemos todo unos else if auxi 0 Si auxi es igual a cero off0 0 En la parte alta de offset ponemos todo ceros destino rpg base 1 offset Hacemos registro base mas desplazamiento dest0 rpgl base 0 off0 Hacemos reg base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta de destino en uno desplaz destino 0x00000003 Cogemos es desplazamiento desde el 1 mite destino destino OxFFFFFFFC Cogemos el l1 mite de palabra if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si se sale del rango de direc gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones fseek pf destino SEEK SET Nos posicionamos en el fichero memoria for i 0 1 lt 4 1 p if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian j i if fread amp dato j sizeof UCHAR 1 p 0 Cogemos 4 bytes Error Error al acceder a memoria Ap ndice II
270. n de salto es verdad y calcula el salto relativo para las instrucciones de salto relativo DF B squeda de datos Primera mitad Durante el estado DF ocurre uno de los siguientes puntos e La b squeda en la cach de datos y la traducci n de datos comienza para instrucciones de carga y almacenamiento e La traducci n de direcciones de instrucciones de salto relativo y la actualizaci n del TLB comienza para las instrucciones de salto relativo e No se realizan operaciones durante los estados DF DS Y TC para las instrucciones de registro a registro DS B squeda de datos Segunda mitad Durante el estado DS ocurre uno de los siguientes puntos e La b squeda en la cach de datos y la traducci n de datos de virtual a f sica se completan para las instrucciones de carga y almacenamiento El desplazador alinea datos a su l mite de palabra doble palabra e La traducci n de direcciones de instrucciones de salto relativo y la actualizaci n del TLB se completan para las instrucciones de salto relativo TC Chequeo de Etiquetas Para las instrucciones de carga y almacenamiento la cach realiza el chequeo de etiquetas durante el estado TC La direcci n f sica del TLB se compara con la etiqueta de cach para determinar si hay un acierto o un fallo Caracter sticas generales del procesador MIPS R4000 P g 55 Simulador de instrucciones del microprocesador MIPS R 4000 WB Write Back Para las instrucciones de regist
271. n de signo ero rte alta del registro todo a 1 cero rte alta del registro todo a 0 esultado en los registros rpg rt 1 BAJA a extensin de signo co rte alta del registro todo a 1 cero rte alta del registro todo a 0 turn de menor peso A partir de aqui voy a implementar todas las excepciones KKXKKKXKKXKKKXXKKXKKKXKKXKKKXKKXKKKXKKXKKKXKKXKKKXKKXKkA PARA RIK RARA KARA RRA RE XCEPCIONES A AA ARK KARA KKKKKKKKK KA E A void General Exception void sr sr amp OxFC Ponemos en modo Kernel Ap ndice II C digo fuente del simulador P g 332 Simulador de instrucciones del microprocesador MIPS R4000 gotoxy 2 19 printf Kernel OS E A PARK RIA EEORMATOS A AAA RA KAR KARA RARA RARAS A void Formato cero ULONG instruccion UCHAR dec Este formato se utiliza para las instrucciones con mnemenicos de la siguiente manera NOMBRE_INSTR RD RS RT Las instrucciones que usan este formato son ADD ADDU AND DADD DADDU DSUB DSUBU NOR OR SIT SLTU SUB SUBU XOR UCHAR rs rt rd Para coger el n fmero de los registros rs Campo RS instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n rd Campo RD instruccion Cogemos el campo rd de la instrucci n ahora vamos a imprimir el mnemtnico por pantalla printf Ss r d rd r d formatos dec nombre rd rs
272. ndicion lt GPR rs gt 0 if condicion then PC E PC target else se anula la siguiente instr endif 64 target offset s 11 offset 0 condicion lt GPR rs gt 0 if condicion then PC E PC target else se anula la siguiente instr endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 110 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Ninguna BLTZ Branch On Less Than Zero El formato de la instrucci n es BLTZ rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es menor que cero el programa salta a la direcci n que se ha formado de la suma anterior Operaci n 32 target offset i5 offset 0 condicion GPR rs lt 0 if condicion then PC PC target endif 64 target lot setid offset 0 condicion GPR rs lt 0 if condicion then PC E PC target endif Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 111 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Ninguna BLTZAL Branch On Less Than Zero And Link El formato de la instrucci n es BLTZAL rs offset Descripci n de la instrucci n
273. ned SLT Set on Less Than SLTU Set on Less Than Unsigned AND AND OR OR XOR Exclusive OR NOR NOR Instrucciones de Multiplicaci n y Divisi n OpCode Descripci n MULT Multiply MULTU Multiply Unsigned DIV Divide DIVU Divide Unsigned MFHI Move From HI MTHI Move To HI MFLO Move From LO MTLO Move To LO Caracter sticas generales del procesador MIPS R4000 P g 10 Simulador de instrucciones del microprocesador MIPS R 4000 Instrucciones de Saltos absolutos y relativos OpCode Descripci n J Jump JAL Jump And Link JR Jump Register JALR Jump And Link Register BEQ Branch on Equal BNE Branch on Not Equal BLEZ Branch on Less Than or Equal to Zero BGTZ Branch on Greater Than Zero BLTZ Branch on Less Than Zero BGEZ Branch on Greater Than or Eq to Zero BLTZAL Branch on Less Than Zero And Link BGEZAL Brnch on Less Thn Zro And Link Likely Instrucciones de desplazamiento de bits OpCode Descripci n SLL Shift Left Logical SRL Shift Right Logical SRA Shift Right Arithmetic SLLV Shift Left Logical Variable SRLV Shift Right Logical Variable SRAV Shift Right Arithmetic Variable Caracter sticas generales del procesador MIPS R4000 P g 11 Simulador d
274. nes del microprocesador MIPS R4000 else if break gotoxy subest 1 printf M1 64 bits printf printf UCHAR Campo de ULONG auxi if strcmp auxi auxi a else if s auxi auxi a else if s auxi auxi a return UC UCHAR acarreo ULONG n1 gotoxy 19 20 E Ejecutar P char c Esta funci n compara el campo que le pasemos como el campo que sea esta funci tn devolver c RS 0 instruccion amp 0x031 uxi gt gt 21 tremp uxi gt gt 16 tremp uxi gt gt 11 HAR auxi Parar F ULONG instruccion Variable auxiliar Si es el campo rs EO0000 Regs ti En auxi mete el campo rs a RT e RD instruccion 0x001F0000 instruccion 0x0000F800 devuelv Finalment ULONG n2 l campo qu Pu par metro y dependiendo su valor le hemos pedido Esta funci n lo que hace es ver si hay acarreo cuando sumamos dos nfmeros Se hace una llamada a esta funci n en la suma y en la resta en modo 64 bits de 32 bits numld n1 num2d n2 numld numld Ox0000FFEF num2d num2d Ox0000FFEF resuld numl1d num2d resuld resuld 0x000F0000 resuld resuld gt gt 16 if resuld carry 1 ULONG num1li 0 num1d 0 num2i 0 num2d 0 resuld 0 UCHAR carry 0 Ap ndice II C digo fu
275. nes para el interfaz de usuario void Error char c Esta funci n escribe un mensaje d rror y se sale del programa limpia 2 4 56 15 limpiamos zona de la pantalla gotoxy 2 4 Se posiciona en la pantalla printf sin c Escribe el mensaje pasado como par metro exit 1 Se sale del programa Ap ndice II C digo fuente del simulador P g 192 Simulador de instrucciones del microprocesador MIPS R4000 void lineas void Saca las lineas del interfaz de usuario por pantalla clrscr rin rin Ef tf tf tf tf EL tf tf tf tf Ex EX tf tf tf tf tf Ef tf 900 00 99 t0 t0 0 00 00 0000 0 00 y 3 a MIPS R 4000 O 5 O Er O O S S 5 O O 5 O O a O 5 5 M OOOO void menu void Esta funci n solo saca el men de opciones posibles por pantalla limpia 2 17 56 20 gotoxy rintf toxy intf toxy intf toxy intf toxy intf toxy intf toxy intf toxy intf toxy intf toxy intf WO H O I O RO H O RO RO o oi K RO 3 5 3 6 23 19 7 3 8 2 3 Ejecucitn 4 20 4 Ver direccitn ID Registros Inicia CP 2 18 Borra la pantalla E eN NN TU A A E EA Ne Ne Ne Ne Ne Ne Ne Ne Ne ve OI Dl l 1D 1D D L ZII Ne Ne Ne Ne Ne Ne Se se se 4 17 Nos posicionamos en la pantalla 1 Intro program 4 18 2
276. nguna JALR Jump Register El formato de la instrucci n es JALR rs Ap ndice 1 Descripci n de las instrucciones implementadas en el simulador P g 132 Simulador de instrucciones del microprocesador MIPS R4000 JALR rd rs Descripci n de la instrucci n El programa salta a la direcci n contenida en el registro rs La direcci n de la instrucci n siguiente a la instrucci n siguiente a la instrucci n de salto se guarda en el registro rd El valor por defecto del registro rd es 31 si el valor del campo rd es cero La direcci n contenida en el registro rs debe ser m ltiplo de cuatro debido a que las instrucciones est n alineadas como palabras Si la direcci n no es m ltiplo de cuatro ocurre una excepci n de error de direccionamiento Operaci n 32 64 temp GPR rs GPR rd PC 8 PC lt temp Excepciones Address Error Exception Error de direccionamiento JR Jump Register El formato de la instrucci n es JR rs Descripci n de la instrucci n El programa salta a la direcci n contenida en el registro rs La direcci n contenida en el registro rs debe ser m ltiplo de cuatro debido a que las instrucciones est n alineadas como palabras Si la direcci n no es m ltiplo de cuatro ocurre una excepci n de error de direccionamiento Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 133 Simulador de instrucciones del microprocesador MIPS R4000
277. nosigno rpg rs 1 En rsnosigno metemos la parte baja del reg rs rtsigno rpg rt 0 En rtsigno metemos la parte alta del reg rt rtnosigno rpg rt 1 En rtnosigno metemos la parte baja del reg rt if rpg rs 0 1 0 reg rt 0 0 Si parte alta de alguno es 0 1 if rpg rs 0 rpg rt 0 Si son distintas if rssigno lt rtsigno Si rssigno es menor General_Exception Trap exception gotoxy 30 23 pintet Trap exception S else if rpg rs 0 rpg rt 0 si son iguales if rsnosigno lt rtnosigno Comparamos las partes bajas General Exception Trap exception gotoxy 30 23 printf Trap exception I else En caso de que la parte alta de los dos registros sea cero if rsnosigno lt rtnosigno Comparamos las partes bajas General Exception Trap exception gotoxy 30 23 printf Trap exception BO Ap ndice IT C digo fuente del simulador P g 279 Simulador de instrucciones del microprocesador MIPS R4000 VO JE ES Fin de la instrucci n TLT id TLTU ULONG instruccion Trap if Less Than Unsigned Esta instrucci n provoca una trap exception si el contenido del registro es menor que el contenido del registro rt Los datos son sin signo UCHAR rs rt Para coger el n mero de los registros ULONG regrs regrt Variables intermedias sin signo rs Campo RS instruccion Cogemos el cam
278. nstruccion Move From LO 14 VO El contenido del registro especial LO se guarda en el registro rd UCHAR rd Para tener el nfmero de registro rd Campo RD instruccion Cogemos el campo rd de la instrucci n if Estado UX 0 para 32 bits l rpg rd 1 rpg 33 1 Metemos parte baja de LO en parte baja de rd A if Estado UX 1 para 64 bits l rpg rd 0 rpg 33 0 Metemos parte alta de LO en parte alta de rd rpg rd 1 rpg 33 1 Metemos parte baja de LO en parte baja de rd Fin de la instrucci tn MFLO id MIHI ULONG instruccion Move to HI El contenido del registro rs es cargado en el registro especial HI UCHAR rs Para el n mero de registro rs Campo RS instruccion Cogemos el campo rs de la instrucci n if Estado UX 0 para 32 bits rpg 32 1 rpg rs 1 El contenido de rs se met n HI parte baja Ap ndice II C digo fuente del simulador P g 233 Simulador de instrucciones del microprocesador MIPS R4000 n parte alta de HI else if Estado UX 1 para 64 bits rpg 32 0 rpg rs 0 Parte alta de rs se met rpg 32 1 rpg rs 1 Parte baja de rs se met Fin de la instrucci n MTHI n parte baja de HI Esta instrucci n lo gistros rs y rt y el resultado se guarda en el registro void MTLO
279. nstruction exception En modo 32 bits DSRLV Doubleword Shift Right Logical Variable El formato de la instrucci n es DSRLV rd rt rs Descripci n de la instrucci n El contenido del registro rt se desplaza a la derecha el n mero de bits especificado por los seis bits de menor peso del registro rs insertando ceros en los bits de mayor peso El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s lt GPR rs Ils o GPR rd o GPR rtle3 s Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 128 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Reserved instruction exception En modo 32 bits DSRL32 Doubleword Shift Right Logical 32 El formato de la instrucci n es DSRL32 rd rt sa Descripci n de la instrucci n El contenido del registro rt se desplaza a la derecha 32 sa bits insertando ceros en los bits de mayor peso El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s E 1 sa GPR rd Qs GPR rtle3 s Excepciones Reserved instruction exception En modo 32 bits DSUB Double
280. nt Campo RS instruccion Cogemos el campo rs de la instruccicn Campo RT instruccion Cogemos el campo rt de la instruccitn Campo RD instruccion Cogemos el campo rd de la instrucci tn s rpg rs 1 En regrs metemos el dato del registro rs parte baja t rpg rt 1 1 En regrt metemos el dato del registro rt parte baja Estado UX 0 Para 32 bits regrs lt regrt Si regrs es menor que regrt reg rd 1 0x00000001 Ponemos el registro rd a uno se Si regrs no es menor que regrt reg rd 1 0x00000000 Ponemos el registro rd a cero if Estado UX 1 Para 64 bits rpg rs 0 0 rpg rt 1 0 0 Si las partes altas son 0 if rpg rs 0 rpg rt 0 Si son distintas regrs rpg rs 0 guardamos la parte alta en regrs regrt rpg rt 01 guardamos la parte alta en regrt if regrs lt regrt Si regrs es menor que regrt rpg rd 1 0x00000001 El registro rd se pone a uno rpg rd 0 0 else Si regrs no es menor que regrt rpg rd 1 0x00000000 El registro rd se pone a cero rpg rd 0 0 Ap ndice II C digo fuente del simulador P g 254 Simulador de instrucciones del microprocesador MIPS R4000 else if rpglrs 0 rpg rt 0 Si son iguales if regrs lt regrt Comparamos las partes bajas de cada registro rpg rd 1 0x00000001 El registro se pone a uno rpg rd 0 0 else Si reg
281. o if aca 1 Si aca es igual a uno dest0 Incrementamos la parte alta del destino en uno if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception RA if Estado UX 1 Para 64 bits i if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale i gotoxy 30 23 printf Direccitn fuera de rango else if destino 4 0 Si no es multiplo de 4 i General_Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango de direcc y no hay error de direccionamiento fseek pf destino SEEK SET Nos situamos en el fichero memoria for i 0 i lt 4 i Ap ndice II C digo fuente del simulador P g 297 Simulador de instrucciones del microprocesador MIPS R4000 if Estado RE Si es little endian j 3 1 else if j i Estado RE if fread amp dato j sizeo Error Error al acceder Si es big endian f UCHAR 1 pf 0 Leemos 4 bytes a memoria auxi chartolong dato rpg rt 1 auxi l rpg rt 0 0x00000000 En auxi metemos el dato pasado a long En la parte baja del registro destino metemos auxi La parte alta del reg destino todo a ceros Fin de la instrucci tn LWU void L
282. o rpg rt 0 0xFFEFFFEFE la parte alta del reg rt se pone a unos else if auxrt 0 si es cero rpg rt 0 0x00000000 la parte alta del reg rt se pone a ceros fin de la funci n ADDI void AND ULONG instruccion And Esta funci tn hace la AND logica de los registros rs y rt y el resultado se guarda en el registro rd UCHAR rs rt rd indican el n mero de registro ULONG auxi variable auxiliar rs Campo RS instruccion coge el campo rs de la instruccifn rt Campo RT instruccion coge el campo rt de la instruccictn rd Campo RD instruccion coge el campo rd de la instruccictn if Estado UX 0 para 32 bits rpg rd 1 rpg rs 1 rpg rt1 1 1 hace la operaci n And y el resultado se guarda en rd else if Estado UX 1 para 64 bits rpg rd 1 r g ra i rpg rt1 1 hacemos la and de la parte baja rpg rd 0 rpg rs 0 amp rpg rt 0 hacemos la and de la parte alta fin de la instrucci tn AND Ap ndice II C digo fuente del simulador P g 219 Simulador de instrucciones del microprocesador MIPS R4000 void ADDIU ULONG instruccion Add Immediate Unsigned Esta funci n hace la suma sin signo de los registros rs y un dato inme diato y el resultado lo mete en el registro rt Para 64 bits los 32 bits de mayor peso del registro rt son una extensicn del bit 31 del resultado No ocurre ninguna excep
283. o 64 bits a esta palabra se le hace una extensi n de signo Si alguno de los dos bits menos significativos de la direcci n a la que vamos a acceder es distinto de cero ocurre una Address error exception Operaci n 32 direccion offset s 1 offset1 s 0 GPR base temp Word A partir de la direcci n GPR rt lt temp 64 direccion offset s5 f offset s5 0 GPR base temp Word A partir de la direcci n GPR rt lt temp31 gt temp Excepciones Address error exception LWL Load Word Left El formato de la instrucci n es LWL rt offset base Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 143 Simulador de instrucciones del microprocesador MIPS R4000 Descripci n de la instrucci n Esta instrucci n puede usarse en combinaci n con la instrucci n LWR para cargar un registro con cuatro bytes consecutivos desde memoria cuando los bytes cruzan el l mite de una palabra Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario La instrucci n lee bytes de la palabra en memoria que contiene el byte de comienzo especificado Se cargar n de uno a cuatro bytes dependiendo del byte de comienzo En modo de operaci n 64 bits se hace una extensi n de signo de la palabra cargada Operaci n Tenemos una palabra wor
284. o SEEK_ SET Nos posicionamos en el fichero memoria if fwrite amp datol sizeof UCHAR 1 pf 0 Escribimos el datol Error Error al acceder a memoria if fwrite 8 dato2 sizeof UCHAR 1 pf 0 Escribimos el dato2 Error Error al acceder a memoria Fin de la instrucci n SH Ap ndice II C digo fuente del simulador P g 310 Simulador de instrucciones del microprocesador MIPS R4000 void SW ULONG instruccion Store Word Al offset se 1 xtiend l signo y se suma al contenido del registro base para formar la direccitn El contenido del registro rt se almacena en la direcci n de memoria especificada Si no es multiplo de cuatro se produce un error de direccionamiento UCHAR rt base dato NULL aca base es el campo de rs signed long int off0 offset dest0 destino Parte alta y baja de off y dest ULONG auxi datoalmac Para variable auxiliar y dato almacenado int i j Se utilizan como ndices rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el campo base de la instrucc offset instruccion Ox0000FFFEF Cogemos el offset de la instrucci tn auxi offset En auxi metemos el offset auxi auxi gt gt 15 Desplazamos 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos la extensi tn de signo con unos off0 OXFFFFFEFF
285. o a Datos Interrupt prioridad m s baja Caracter sticas generales del procesador MIPS R4000 P g 33 Simulador de instrucciones del microprocesador MIPS R 4000 UNIDAD DE COMA FLOTANTE La Unidad de Coma Flotante FPU opera como un coprocesador para la CPU llamado coprocesador CP1 y extiende el set de instrucciones de la CPU para realizar Operaciones aritm ticas con valores en coma flotante La figura 12 ilustra la organizaci n funcional de la FPU Cach de Datos FP Bypass Pipeline Chain FP Reg File Figura 12 Diagrama de bloques funcional de la FPU CARACTER STICAS DE LA FPU Esta secci n describe brevemente el modelo de operaci n el set de instrucciones de carga y almacenamiento y el interface del coprocesador en la FPU e Operaciones de 64 bits Cuando el bit FR en el registro de estado de la CPU es igual a cero la FPU est en modo 32 bits y contiene 32 registros de 32 bits que tienen valores de simple cuando se usan Caracter sticas generales del procesador MIPS R4000 P g 34 Simulador de instrucciones del microprocesador MIPS R 4000 en pareja doble precisi n Cuando el bit FR en el registro de estado de la CPU es igual a uno La FPU est en modo 64 bits y los registros se expanden a 64 bits de ancho Cada registro tiene valores de simple doble precisi n La FPU tambi n incluye un registro de Control Estado de 32 bits que proporciona acceso a todas las capa
286. o de cero rpg rd 1 srpg rt 0 En la parte baja metemos la parte alta rpg rd 1 reg rd 1 gt gt sa 32 Desplazamos a la drcha sa 32 bits rpg rd 0 0xFFFFFFFF En la parte alta metemos todo a unos auxi 0xFFFFFFFF lt lt 64 sa en auxi metemos todo a unos lt lt 64 sa bits rpg rd 1 reg rd 1 auxi hacemos la or de parte baja y auxi else if auxi 0 Si auxi es igual a cero rpg rd 1 rpg rt 0 En parte baja metemos parte alta rpg rd 11 rpg ral 1 gt gt sa 32 Desplazamos sa 32 bits rpg rd 0 0x00000000 En parte alta metemos todo a ceros else Si sa no es mayor de 32 bits uxi2 rpg rt 0 1 En auxi2 metemos la parte alta del reg rt uxi2 auxi2 lt lt 32 sa Desplazamos auxi2 32 sa bits f auxi 0 Si auxi es distinto de cero uxi 0OxFFFFFFFF Lo ponemos todo a unos uxi auxi gt gt 32 sa Desplazamos hacia derecha 32 sa bits uxi auxi lt lt 32 sa Tenemos la extension de signo PV Y else if auxi 0 Si auxi es igual a cero auxi 0x00000000 Lo ponemos todo a ceros rpg rd 0 rpg rt 0 gt gt sa En parte alta desplazamos derecha sa bits rpg rd 1 rpg rt 1 gt gt sa En parte baja desplazamos derecha sa bits rpg rd 0 reg rd 0 auxi Hacemos la or de parte alta y auxi rpg rd 1 rpeg rd 1 auxi2 Hacemos la or de parte baja y auxi2 Ap ndice
287. o de direcciones y no error de direcc fseek pf destino SEEK SET Se posiciona en el fichero de memoria Ap ndice II C digo fuente del simulador P g 285 Simulador de instrucciones del microprocesador MIPS R4000 if fread datol sizeof UCHAR 1 pf 0 Lee un byte Error Error al acceder a memoria if fread amp dato2 sizeof UCHAR 1 pf 0 Lee el siguiente byte Error Error al acceder a memoria auxi 0 if Estado RE 0 Si es little endian auxi dato2 En auxi mete el dato2 auxi auxi lt lt 8 Desplaza 8 bits hacia la izquierda auxi auxi datol Hace la or de auxi con datol rpg rt 1 auxi En la parte baja del registro metemos auxi else if Estado RE 1 Si es big endian auxi datol En auxi metemos datol auxi auxi lt lt 8 Desplazamos 8 bits hacia la izquierda auxi auxi dato2 Hacemos la or de auxi y dato2 rpg rt 1 auxi En la parte baja del registro metemos auxi auxi auxi gt gt 15 Desplazamos auxi 15 bits hacia la derecha if auxi 0 Si auxi es distinto de cero rpg rt 1 rpg rt1 1 OxFFFFO000 Se hace la extensin con unos rpg rt 0 0xFFFFFFFF En la parte alta se pone todo a unos else if auxi 0 Si auxi es igual a cero rpg rt 1 rpeg rt 1 amp 0x0000FFFF Se hace la extensin con ceros rpg rt 0 0
288. o de entradas del TLB reservadas para uso exclusivo del SSOO 7 Reservado 8 BadV Addr Posee direcci n virtual mas reciente que caus excepciones determinadas 9 Count Contador de tiempo 10 EntryHi Parte alta de la entrada del TLB 11 Compare Comparador de tiempo 12 SR Registro de estado 13 Cause Causa de la ltima excepci n 14 EPC Contador de programa de excepciones 15 PRId Identificador de revisi n del procesador 16 Config Registro de configuraci n del procesador 17 LLAddr Contiene la direcc f sica leida por la instr de carga y enlace mas reciente 18 WatchLo Operac de carga y almac especificadas causan una excepc parte baja 19 WatchHi Parte alta 20 Xcontext Puntero a la tabla virtual kernel PTE en modo de direccionam 64 bits 21 25 Reservado 26 ECC Chequeo y correcci n de errores ECC de la cache secundaria y paridad de la primaria 27 CacheErr Registro que contiene el indice de cache y bits de estado que indican la fuente y la naturaleza del error 28 TagLo Contienen la etiqueta y paridad de la cach primaria la etiqueta y ECC durante procesamiento de inicializaci n diagn stico o error de la cach 2 29 TagHi Parte alta 30 ErrorEPC Igual que EPC pero usado en ECC y excepciones de error de paridad 31 Reservado Caracter sticas generales del procesador MIPS R4000 P g 21 Simulador de instrucciones del microprocesador MIPS R 4000 E
289. o la tecla esc return 0 Se sale de la funcitn else Si no se ha pulsado la tecla esc tecla i car printf Sc tecla il EA jwhile 1 lt 4 tecla il X0 Ponemos al final M0 para saber fin de cadena v unsigned long strtoul tecla sendptr 16 Lo pasamos a unsigned long return 1 Devuelv 1 n mero int leeinstr unsigned long v Esta instrucci n lo que hac s leer una instrucci n desde el teclado del ordenador Si se pulsa escape se sale de la opcictn indicada Ap ndice II C digo fuente del simulador P g 214 Simulador de instrucciones del microprocesador MIPS R4000 Hay que meter la instrucci fn con sus ocho numeros char tecla 9 endptr array de tres caracteres y puntero unsigned long temp Variable temporal unsigned char car int i 0 Para el contador do do car toupper getch Lee el primer car cter introducido if car 8 amp amp 1 gt 0 printf Sc car printi Sc car 1 while car lt 0 car gt 9 amp amp car lt A car gt F amp amp car 27 if car 27 Si se ha pulsado la tecla esc return 0 Se sale de la funcitn else Si no se ha pulsado la tecla esc tecla i car printf Sc tecla il i while i lt 8 tecla i 0 Ponemos al final M0 para saber fin de cadena v unsigned long strtoul tecla sendptr 16 Lo pasamos a unsigned long return 1
290. offsetis offset E6PR base temp Halfword A partir de la direcci n GPR rt lt 0 temp Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 141 Simulador de instrucciones del microprocesador MIPS R4000 64 direccion 4 offsetis offset s 0 GPR base temp Halfword A partir de la direcci n GPR rt lt 0 temp Excepciones Address error exception LUI Load Upper Immediate El formato de la instrucci n es LUI rt immediate Descripci n de la instrucci n El dato inmediato de 16 bits se desplaza hacia la izquierda 16 bits y se concatena con 16 bits de ceros El resultado se guarda en el registro rt En modo 64 bits a la palabra que se guarda en el registro se le hace una extensi n de signo Operaci n 32 GPR rt lt immediate 01 64 GPR rt lt immediate1s gt immediate 01 Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 142 Simulador de instrucciones del microprocesador MIPS R4000 LW Load Word El formato de la instrucci n es LW rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma a el contenido del registro base para formar la direcci n a la que vamos a acceder La palabra localizada a partir de la direcci n de memoria especificada se guarda en el registro rt En mod
291. omayorpeso desplazado rpg rt 0 rpg rt 0 amp OxFFFFFFOO Hacemos and de parte alta datomenorpeso datomenorpeso gt gt 24 Desplazamos 24 bits hacia derecha datomayorpeso datomayorpeso lt lt 8 Desplazamos 8 bits hacia la izquierda rpg rt 1 datomenorpeso datomayorpeso hacemos la or de ambas rpg rt 0 rpeg rt 0 auxi Hacemos la or de parte alta y auxi else if desplaz 4 rpg rt 1 datomayorpeso Si es 4 metemos todo else if desplaz 5 Si desplazamiento es igual a cinco datomayorpeso datomayorpeso gt gt 8 Desplazamos datomayorp 8 bits drcha rpg rt 1 srpg rt 1 amp 0xFF000000 Hacemos la and con parte baja rpg rt 1 reg rt 1 datomayorpeso Hacemos la or con parte baja Ap ndice II C digo fuente del simulador P g 305 Simulador de instrucciones del microprocesador MIPS R4000 else if desplaz 6 Si desplazamiento es igual a seis datomayorpeso datomayorpeso gt gt 16 Desplazamos 16 bits hacia derecha rpg rt 1 srpg rt 1 amp 0OxFFFF0000 Hacemos la and con parte baja rpg rt 1 reg rt 1 datomayorpeso Hacemos la or con parte baja else if desplaz 7 Si desplazamiento es igual a siete datomayorpeso datomayorpeso gt gt 24 Desplaza 24 bits hacia derecha rpg rt 1 rpg rt 1 amp OxFFFFFFOO Hacemos la and con parte baja rpg rt 1 reg rt 1 datomayorpeso Hacemos la or con parte baja else if Estado RE 1
292. ones implementadas en el simulador P g 137 Simulador de instrucciones del microprocesador MIPS R4000 Para Little Endian Memoria 0000 2A 29 31 76 58 73 45 39 Registro Desplazam Registro rt 0 gt 2A X X X X X X X 1 gt 29 2A X X X X X X 2 gt 31 29 2A X X X X X 3 gt 76 31 29 2A JX X X X 4 gt 58 76 31 29 2A JX X X 5 gt 3 58 76 31 29 2A JX X 6 gt 45 73 58 76 31 29 2A X 7 gt 39 45 73 58 76 31 29 2A X Lo que hab a en el registro antes de LDL Excepciones Reserved instruction exception En modo 32 bits LDR Load Doubleword Right El formato de la instrucci n es LDR rt offset base Descripci n de la instrucci n Esta instrucci n puede usarse en combinaci n con la instrucci n LDL para cargar un registro con ocho bytes consecutivos desde memoria cuando los bytes cruzan el l mite de una doble palabra Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 138 Simulador de instrucciones del microprocesador MIPS R4000 Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario La instrucci n lee bytes de la doble palabra en memoria que contiene el byte de comienzo especificado Se cargar n de uno a ocho bytes dependiendo del byte de comienzo Esta operaci n solo est definida en
293. ones y datos as como la l gica de control de la cach de segundo nivel El modelo de programaci n del MIPS R4000 incluye 32 registros de enteros de 64 bits de los cuales el registro cero es un cero hardware y 32 de coma flotante de 32 bits agrupables en 16 de 64 bits El resto del libro se estructura de la siguiente manera Cap tulo 1 Caracter sticas generales del procesador MIPS R4000 En este cap tulo se hace una descripci n general de las caracter sticas del MIPS R4000 Cap tulo 2 Manual de usuario del simulador de instrucciones MIPS R4000 Este cap tulo sirve como gu a para el usuario del simulador explicando su manejo y funcionamiento Cap tulo 3 Descripci n del dise o del simulador de instrucciones En este cap tulo se explica como funciona el c digo del simulador y c mo est estructurado Ap ndice I Descripci n de las instrucciones implementadas en el simulador MIPS R4000 En este ap ndice se incluye el subconjunto de instrucciones implementadas en el simulador con una descripci n detallada de cada una de ellas Ap ndice II C digo fuente del simulador de instrucciones MIPS R4000 Bibliograf a Introducci n P g 3 CAP TULO 1 CARACTERISTICAS GENERALES DEL PROCESADOR MIPS R 4000 Simulador de instrucciones del microprocesador MIPS R 4000 REGISTROS DE LA CPU La unidad central de proceso CPU proporciona los siguientes registros e 32 registros de prop sito general e Un registro
294. ore Doubleword From FPU MTC1 Move Word To FPU MFC1 Move Word From FPU CTC1 Move Control Word To FPU CFCI Move Control Word From FPU DMTC1 Doubleword Move To FPU DMFC1 Doubleword Move From FPU Instrucciones de Conversi n de datos OpCode Descripci n CVT S fmt Floating point Convert to Single FP CVT D fmt Floating point Convert to Double FP CVT W fmt Floating point Convert to 32 bit Fixed Point CVT L fmt Floating point Convert to 64 bit Fixed Point ROUND W fmt Floating point Round to 32 bit Fixed Point ROUND L fmt Floating point Round to 64 bit Fixed Point TRUNC W fmt Floating point Truncate to 32 bit Fixed Point TRUNC L fmt Floating point Truncate to 64 bit Fixed Point CEIL W fmt Floating point Ceiling to 32 bit Fixed Point CEIL L fmt Floating point Ceiling to 64 bit Fixed Point FLOOR W fmt Floating point Floor to 32 bit Fixed Point Caracter sticas generales del procesador MIPS R4000 P g 39 Simulador de instrucciones del microprocesador MIPS R 4000 FLOOR L fmt Floating point Floor to 64 bit Fixed Point Instrucciones Computacionales OpCode Descripci n ADD fmt Floating point Add SUB fmt Floating point Subtract MUL fmt Floating point Multiply DIV fmt Floating point Divide ABS fmt Floating point Absolute Value MOV fmt Floating point Move NEG fmt Floating point Negate SQRT fmt Floating point Square Root Instrucciones de Salto
295. os parte baja de rt despl drch sa rpg rd 0 reg rd 0 auxi hacemos or con auxi rpg rd 1 reg rd 1 auxi2 hacemos la or con auxi2 fin de la instrucci n DSRAV void DSRA32 ULONG instruccion Doubleword Shift Right Arithmetic 32 El contenido del registro rt se desplaza a la derecha 32 sa bits ndiendo el bit de mayor peso El resultado se guarda en el registro rd xt UCHAR rt rd sa Para el n fmero de registro y desplazamiento de bits ULONG auxi auxi2 Variables auxiliares Ap ndice II C digo fuente del simulador P g 245 Simulador de instrucciones del microprocesador MIPS R4000 rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn auxi instruccion 0x00007C0 Cogemos el campo sa de la instrucci tn auxi auxi gt gt 6 Desplazamos auxi 6 bits hacia la derecha sa UCHAR auxi Lo convertimos a tipo unsigned char sa sa 0x20 sumamos a sa 32 if Estado UX 0 Para 32 bits i General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits auxi rpg rt 0 En auxi metemos la parte alta del registro rt auxi auxi gt gt 31 Lo desplazamos 31 bits hacia la derecha if sa gt 32 Si sa es mayor de 32 bits if auxi 0 Si auxi es distint
296. parte alta del reg todo a ceros rpg rd 1 rpg rt 1 lt lt sa Metemos en parte baja el dato final despl Fin de la instruccitn SLL id SLLV ULONG instruccion Shift Left Logical Variable Esta instrucci n hace un desplazamiento lftgico hacia la izquierda al to de 32 bits del registro rt y el resultado se guarda en el registro rd UCHAR rt rd rs sa Para el n fmero de los registros y desplazamiento ULONG auxi variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn rs Campo RS instruccion Cogemos el campo rs de la instrucci tn auxi rpg rs 1 0x0000001F sa UCHAR auxi este sa se refiere a s if Estado UX 0 Para 32 bits rpg rd 1 rpg rt 1 lt lt sa Se desplaza sa bits hacia la izquierda else if Estado UX 1 Para 64 bits 1 lt lt sa Mi Si a auxi rpg rt auxi auxi gt gt 31 if auxi 0 Desplaza sa bits hacia la izq y se mete en auxi ra el bit 31 del dato ya desplazado uxi es distinto de cero deberja ser uno rpg rd 0 0xFFFFF os else if auxi 0 rpg rd 0 0x00000 rpg rd 1 reg rt 1 splazado fin de la instrucci FFF la parte alta del registro se pone toda a Si 000 lt lt sa auxi es igual a cero la parte alta del reg se pone toda a ceros en la parte baja se mete el dato
297. pg 34 11 rpg 34 1 4 NullifyCurrentInstruction else if Estado UX 1 Para 64 bits if rpg rs 0 rpg rt 1 01 rpg rs 1 rpg rt 1 11 Si son distintos rpg 34 1 rpg 34 1 offset Al CP se le suma el offset else rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction se anula la sig Fin de la instrucci n BNEL void BGEZ ULONG instruccion Branch On Greater Than Or Equal to Zero UCHAR rs Para coger el nfmero de registro signed long int offset Para el desplazamiento ULONG auxi condicion Variable auxiliar y condicicn rs Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion 0x0000FFFF Cogemos el campo offset de la instr offset offset lt lt 2 Desplazamos dos bits hacia la izquierda auxi offset En auxi metemos offset auxi auxi gt gt 17 Desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset 0OxFFFC0000 Se extiende el signo if Estado UX 0 Para 32 bits condicion rpg rs 1 gt gt 31 miramos el bit 32 if condicion 0 Si el bit 31 del registro es cero rpg 34 1 rpg 34 1 offset Sumamos el desplazam al CP else if Estado UX 1 Para 64 bits condicion rpg rs 0 gt gt 31 miramos el bit 64 if condicion 0 Si es cero es qu s mayor o igual a cero rpg 34 1 rpg 34 1 offset Sumamos el desplazam al C
298. pg rt1 11 Se hace la xor else if Estado UX 1 Para 64 bits rpg rd 0 rpg rs 0 rpg rt 0 Se hace la xor rpg rd 1 rpg rs 1 rpg rt 1 Se hace la xor Fin de la instrucci n XOR void XORI ULONG instruccion Xor Immediate El dato de 16 bits se extiende con ceros y se combina con el contenido del registro rs en una operaci n or exclusiva UCHAR rs rt Para coger el nfmero de los registros ULONG inmediato Para el dato inmediato rs Campo RS instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n inmediato instruccion amp 0x0000FFFF Cogemos el dato inmediato de instr if Estado UX 0 Para 32 bits rpg rt 1 rpg rs 1 inmediato Se hace la xor de reg y dato inm else if Estado UX 1 Para 64 bits rpg rt 0 rpg rs 0 0x00000000 Se hace la xor de la parte alta rpg rt 1 rpg rs 1 inmediato Se hace la xor del reg y dato inm fin de la instrucci tn XORI void DADDIU ULONG instruccion Doubleword Add Immediate Unsigned Se hace una extensi n del dato inmediato y se suma al contenido del reg rs para formar el resultado El resultado se guara en el registro general rt No ocurre ninguna excepci n de desbordamiento y si se ejecuta en modo 32 bits se produce una Reserved instruction exception UCHAR r
299. piamos una zona determinada de la pantalla gotoxy 2 17 printf Direcci n de Memoria pedimos una direcci n de memoria escape leedir direccion la leemos en formato hexadecimal if escape 0 return 0 hile direccion gt 65535 controlamos que no se pase de OxFFFF er memoria direccion visualizamos la direccit n pedida Oz inicializamos la x y la y para poder escribir el dato intro 4 ducido por pantalla o bucle gotoxy 2 printf Escribe byte Informamos que hay que meter un byte gotoxy 2 19 printf 2041X direccion Imprimimos la direcci fn a modificar scape leebyte dato leemos el byte que vamos a meter en memoria if escape 0 Si se pulsa escape se sale de la opciftn return 0 if pf fopen memoria r b NULL abrimos fich para tura escr Error Error al acceder a memoria Escribimos mensaje fseek pf direccion SEEK SET nos posicionamos en direcci n a escribir if fwrite 8 dato sizeof UCHAR 1 pf 0 escribimos en fichero Error Error al escribir en memoria mensaje de error Ap ndice II C digo fuente del simulador P g 194 Simulador de instrucciones del microprocesador MIPS R4000 fclose pf cerramos el fichero gotoxy x y se posiciona el cursor en la posici n x y printf 02X dato pone en pantalla el dato que hemos metido
300. po rs de la instruccitn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn regrs rpglrs 1 En regrs metemos la parte baja del reg rs regrt rpg rt 1 En regrt metemos la parte baja del reg rt if Estado UX 0 Para 32 bits if regrs lt regrt Si regrs es menor que regrt General_Exception Trap exception gotoxy 30 23 print Trap exception Ho else if Estado UX 1 Para 64 bits if rpg rs 0 0 reg rt 0 0 Si la parte alta de alguno 0 if rpg rs 0 rpg rt 0 Si las partes altas son distintas regrs rpg rs 0 Metemos la parte alta del reg rs en regrs regrt rpg rt 0 Metemos la parte alta del reg rt en regrt if regrs lt regrt Las comparamos General_Exception Trap exception gotoxy 30 23 printf Trap exception Aa else if rpg rs 0 rpg rt 0 Si las partes altas son iguales if regrs lt regrt Comparamos las partes bajas General Exception Trap exception gotoxy 30 23 printf Trap exception AN else En caso de que la parte alta de los dos registro sea cero if regrs lt regrt Comparamos las partes bajas de cada registro Ap ndice II C digo fuente del simulador P g 280 Simulador de instrucciones del microprocesador MIPS R4000 General Exception Trap exception gotoxy 30 23 printi 1 Trap exception Tz fin
301. por la pantalla del simulador el mnem nico de la instrucci n a ejecutar junto con sus registros o datos inmediatos dependiendo del modo de direccionamiento que utilice ese formato Para que el simulador saque el mnem nico de la instrucci n por pantalla decodificar instrucci n lo primero que hay que hacer es la concatenaci n de bits explicada Descripci n del dise o del simulador de instrucciones P g 88 Simulador de instrucciones del microprocesador MIPS R4000 anteriormente formando as el n mero de la posici n del array formato a la que hay que acceder En esa posici n del array nos encontramos como hemos dicho antes con una estructura de dos campos De estos dos campos nos interesa coger el dato que hay en el campo formato Con este n mero podemos acceder a la posici n formato en el array tablaf mencionado en las estructuras de datos anteriormente Como dicho array es de punteros a funciones si por ejemplo el campo formato valiese 3 acceder amos a la posici n 3 del array tablaf que apuntar a a la funci n Formato_tres que est encargada de sacar por pantalla cualquier instrucci n perteneciente al formato tres A estas funciones Formato_cero Formato_uno etc se les pasa como par metro el campo nombre de la misma estructura de la cual hemos obtenido el campo formato Esto se hace para que la funci n pueda sacar el mnem nico de la instrucci n a ejecutar Proceso de ejecuci n de una instrucci n Des
302. ption Integer overflow exception gotoxy 30 23 printf Integer overfl exception else rpg rd 1 regrd metemos el resultado en el registro destino ahora vamos a hacer la extensin de signo if auxrd 0 si el bit de signo del resultado es 0 rpg rd 0 0xFEFFEFEFFEFE los 32 bits mas altos se ponen a uno else if auxrd 0 si el bit de signo del resultado es O rpg rd 0 0x00000000 los 32 bits mas altos e ponen a cero fin de la funci n ADD void ADDI ULONG instruccion Add Immediate Esta funci tn hace la suma con signo de los registros rs y un dato inme diato y el resultado lo mete en el registro rt Para 64 bits los 32 bits de mayor peso del registro rt son una extensicn del bit 31 del resultado Si hay desbordamiento se produce una excepcitn UCHAR rs rt indican el nfmero de registro signed long int regrs regrt inmediato porque es suma con signo ULONG auxi auxrs auxrt inme son variables intermedias rs Campo RS instruccion cogemos el campo rs de la instruccitn rt Campo RT instruccion cogemos el campo rt de la instruccitn regrs rpgl rs 1 en regrs metemos el dato del registro rs auxi instruccion Ox0000FFFF vamos a calcular el dato inmediato inmediato auxi lo guardamos en la variable inmediato auxi auxi gt gt 15 miramos el bit 15 del dato inmediato if auxi 0 si es cero inmediato
303. pu s del proceso de decodificaci n el usuario del simulador ya sabe la instrucci n que va a ser ejecutada Cuando el usuario pulse la tecla E la instrucci n que est en la pantalla del simulador se ejecutar Estructuras de datos utilizadas En este apartado voy a explicar las estructuras de datos que he utilizado para ejecutar una instrucci n Se han declarado tres arrays de punteros a funciones que se llaman tabla tabla0 y tablal cada una de las cuales contiene las instrucciones que le corresponde Las instrucciones pertenecientes al primer tipo est n en tabla las del segundo tipo en tabla0 y las del tercer tipo en tablal En las tres tablas est n ordenadas cada una de ellas por n mero de c digo de operaci n No hay posibilidad de repetirse c digos de operaci n porque las instrucciones est n distribuidas en tres tablas Antes de hacer la llamada a la funci n que ejecuta la instrucci n correspondiente la funci n encargada de ejecutar las instrucciones mira los seis bits m s altos del c digo de la instrucci n que se quiere ejecutar Si estos bits son distintos de cero o uno accede a tabla y con el c digo de operaci n se accede al puntero de tabla que hace la llamada a Descripci n del dise o del simulador de instrucciones P g 89 Simulador de instrucciones del microprocesador MIPS R4000 la funci n que ejecuta la instrucci n Si los seis bits m s altos son igual a cero se miran los seis bits de m
304. ql to Zro Lnk Likely Brch On Greatr Than Or Equal to 0 Likely Branch On Less Than Zero Branch On Less Than Zero And Link Branch On Less Than Zero And Link Likely Branch On Less Than Zero Likely Trap if Equal Inmediate Trap if Greater Than Or Equal Inmediate Trap if Greater Than Or Equal Inm Unsign Trap if Less Than Inmediate Ap ndice II C digo fuente del simulador P g 188 Simulador de instrucciones del microprocesador MIPS R4000 void TLTIU ULONG instruccion Trap if Less Than Inmediate Unsigned void TNEI ULONG instruccion Trap if Not Equal Inmediate A partir de aqu voy a declarar los formatos de cada instruccion void Formato cero ULONG instruccion UCHAR dec void Formato uno ULONG instruccion UCHAR dec void Formato dos ULONG instruccion UCHAR dec void Formato tres ULONG instruccion UCHAR dec void Formato cuatro ULONG instruccion UCHAR dec void Formato cinco ULONG instruccion UCHAR dec void Formato seis ULONG instruccion UCHAR dec void Formato siete ULONG instruccion UCHAR dec void Formato ocho ULONG instruccion UCHAR dec void Formato nueve ULONG instruccion UCHAR dec void Formato diez ULONG instruccion UCHAR dec void Formato once ULONG instruccion UCHAR dec void Formato doce ULONG instruccion UCHAR dec void Formato trece ULONG instruccion UCHAR dec void Formato catorce ULONG
305. r z SDCz Store Double Coprocessor z Extensiones a ISA Instrucciones del CPO OpCode Descripci n DMFCO Doubleword Move From CPO DMTC Doubleword Move To CPO MTC Move to CPO MFC Move from CPO TLBR Read Indexed TLB Entry TLBWI Vrite Indexed TLB Entry TLBWR Vrite Random TLB Entry TLBP Probe TLB for Matching Entry CACHE Cache Operation ERET Exception Return Caracter sticas generales del procesador MIPS R4000 P g 15 Simulador de instrucciones del microprocesador MIPS R 4000 FORMATOS DE DATOS Y DIRECCIONAMIENTO El R 4000 usa cuatro formatos de datos una doble palabra de 64 bits doubleword una palabra de 32 bits word una media palabra de 16 bits halfword y un byte de 8 bits La ordenaci n de los bytes en cada uno de los formatos de datos halfword word doubleword puede configurarse en big endian o little endian Esto se refiere a la localizaci n del byte O dentro de una estructura de datos de muchos bytes Las figuras 3 y 4 muestran la ordenaci n de los bytes dentro de palabras y la ordenaci n de las palabras dentro de estructuras de multiples palabras para big endian y little endian Cuando el R4000 se configura como un sistema big endian el byte O es el byte m s significativo proporcionando compatibilidad con MC 68000 e IBM 370 La figura 3 muestra esta configuraci n Direcc Direcc
306. recciones fseek pf destino SEEK SET Nos posicionamos en el fichero memoria if fread 8 dato sizeof UCHAR 1 pf 0 Leemos el dato Ap ndice II C digo fuente del simulador P g 283 Simulador de instrucciones del microprocesador MIPS R4000 VO re en ex m de in Error Error al acceder a memoria rpg rt 1 dato En la parte baja del reg rt metemos el dato rpg rt 1 reg rt 1 amp 0x000000FF Hacemos extensi n con ceros rpg rt 0 0 En la parte alta del registro rt metemos todo ceros Fin de la instrucci n LBU id LH ULONG instruccion Load Halfword El offset se hace una extensitn de signo y se suma al contenido del gistro base para formar una direccitn El contenido de la doble palabra la localizaci n de memoria especificada por la direccitn efectiva se tiende el signo y se carga en el registro rt Si la direccitn no es ltiplo de 2 ocurre un error de direccionamiento UCHAR rt base datol dato2 aca base es el campo de rs signed long int off0 offset dest0 destino Parte alta y baja de off y st ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instruccitn base Campo RS instruccion Cogemos el campo rs de la instrucci tn offset instruccion Ox0000FFFF Cogemos el campo offset de la strucc auxi offset En auxi metemos lo que hay en offs
307. registro base mas desplazamiento inmediato con signo de 16 bits e Computacionales Realizan operaciones aritm ticas l gicas de desplazamiento de multiplicaci n y divisi n con los valores de los registros Estas operaciones incluyen formatos de instrucciones de Registro R Type en los que ambos operandos y el resultado est n almacenados en los registros e Inmediato 1 Type en las que un operando es un valor inmediato de 16 bits e Saltos absolutos y relativos Estas instrucciones cambian el flujo de control de un programa En saltos absolutos Jumps la direcci n se forma poniendo los 26 bits del campo target como los bits de orden alto del Contador de Programa J Type o la direcci n de un registro R Type Los saltos relativos Branches tienen un offset de 16 bits relativo al contador de programa I Type Las instrucciones de Salto absoluto y enlace guardan su direcci n de retorno en el registro 31 e GCoprocesador Estas instrucciones realizan operaciones en los coprocesadores Las instrucciones de carga y almacenamiento del coprocesador son I Type e GCoprocesador 0 Estas instrucciones realizan operaciones en los registros del CPO para controlar el manejo de la memoria y el tratamiento de las excepciones e Especiales Estas instrucciones realizan llamadas al sistema y operaciones de punto de parada breakpoint Estas instrucciones son siempre R Type e Excepciones Estas instrucciones causan un salto relativo al vector
308. registro rt se comparan Si los dos registros son distintos el programa salta a la direcci n que se ha formado de la suma anterior Si no se cumple la condici n la instrucci n siguiente a la instrucci n de salto se anula y no se ejecuta Operaci n 32 target amp offset s f offset 0 condicion lt GPR rs GPR rt if condicion then PC lt PC target Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 101 Simulador de instrucciones del microprocesador MIPS R4000 else se anula la siguiente instr endif 64 target offset s ff offset 0 condicion lt GPR rs GPR rt if condicion then PC lt PC target else se anula la siguiente instr endif Excepciones Ninguna BGTZ Branch On Greater Than Zero El formato de la instrucci n es BGTZ rs offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits Si el contenido del registro rs es mayor que cero el programa salta a la direcci n que se ha formado de la suma anterior Operaci n 32 target amp offset s f offset 0 condicion GPR rs gt 0 Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 102 Simulador de instrucciones del microprocesador MIPS R4000
309. relativo y Comparaci n OpCode Descripci n C cond fmt Floating point Compare BCIT Branch on FPU True BCIF Branch on FPU False BCITL Branch on FPU True Likely BC1FL Branch on FPU False Likely EXCEPCIONES EN COMA FLOTANTE El registro de Control Estado de la FP contiene un bit Enable para cada tipo de excepci n ORGANIZACI N DE LA CACH Y OPERACI NES Vamos a usar la siguiente terminolog a e La cach primaria ser referida como la P cach e Ia cach secundaria ser referida como la S cach Caracter sticas generales del procesador MIPS R4000 P g 40 Simulador de instrucciones del microprocesador MIPS R 4000 e La cach de datos primaria ser referida como la D cach e La cach de instrucciones primaria ser referida como la I cach ORGANIZACI N DE LA MEMORIA La figura 17 muestra la jerarquia del sistema de memoria del R 4000 Las cach s est n situadas entre la CPU y la memoria principal Est n dise adas para acelerar los accesos a memoria y son transparentes al usuario Cada bloque funcional en la figura 17 tiene la capacidad de almacenar m s datos que el bloque situado sobre l Por ejemplo la memoria principal tiene una mayor capacidad que la cach secundaria Al mismo tiempo cada bloque funcional tarda m s en acceder a los datos que el bloque situado sobre l Por ejemplo se tarda m s en acceder a los datos en la memoria principal que en los registros de
310. rintf Trap exception DD Fin de la instrucci tn TEOI void TNEI ULONG instruccion Trap If Not Equal Immediate Al dato inmediato se le hace una extensi n de signo y se compara con el contenido del registro rs Si el contenido del registro rs no es igual que el dato inmediato extendido ocurre una trap exception UCHAR rs Para coger el nfmero de registro rs ULONG inmediato inme0 auxi Variables sin signo rs Campo RS instruccion Cogemos el campo rs de la instrucci n inmediato instruccion 0x0000FFFF Cogemos el campo inmediato auxi inmediato gt gt 15 En auxi metemos inmediato desplazado 15 bits drcha if auxi 0 Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Hacemos extensicn de signo con unos inme0 0xFFFEFFFFF La parte alta de inmediato la ponemos a unos Ap ndice II C digo fuente del simulador P g 269 Simulador de instrucciones del microprocesador MIPS R4000 else if auxi 0 Si auxi es igual a cero inme0 0x00000000 Ponemos la parte alta de inmediato a ceros if Estado UX 0 Para 32 bits if rpg rs 1 inmediato Si parte baja de reg distinto que inmediato General_Exception Trap exception gotoxy 30 23 printf Trap exception Aa else if Estado UX 1 Para 64 bits if rpg rs 0 inme0 rpg rs 1 inmediato Si son distintos General_Ex
311. ro a registro el resultado de la instrucci n se escribe en el registro durante el estado WB Las instrucciones de salto relativo no realizan operaciones durante este estado RETARDO DE SALTO Branch Delay El pipeline de la CPU tiene un retardo de salto de tres ciclos y un retardo de carga load delay de dos ciclos El retardo de salto de tres ciclos es el resultado de la comparaci n de salto durante el estado EX de el salto produciendo una direcci n de instrucci n que est permitida en el estado IF cuatro ciclos m s tarde La figura 25 ilustra el retardo de salto Branch IF IS RE EX DF DS TC WB IF IS RE EX DF DS TC WB Tres instr de IF IS RE EX DF DS TC WB retardo de IF IS RE EX DF DS TC WB salto IF IS RE EX DF DS TC WB target Branch Delay Figura 25 Retardo de Salto del Pipeline de la CPU RETARDO DE CARGA Load Delay La termianaci n de una carga al final del estado DS produce un operando que est permitido para el estado EX de la tercera instrucci n subsecuente La figura 26 muestra retardo de carga Caracter sticas generales del procesador MIPS R4000 P g 56 Simulador de instrucciones del microprocesador MIPS R 4000 Load IF IS RE EX DF DS TC WB IF Iis RE ExN pF Ds TC WB IF IS
312. rpeso Hacemos la or entre ambas rpg rt 0 reg rt 0 auxi Hacemos or de parte alta y auxi else if desplaz 5 Si desplazamiento es igual a cinco auxi datomayorpeso gt gt 16 En auxi metemos datomayorpeso desplazado rpg rt 0 rpg rt 0 amp OxFFFFO000 Hacemos and con parte alta datomenorpeso datomenorpeso gt gt 16 Desplazamos 16 bits hacia derecha datomayorpeso datomayorpeso lt lt 16 Desplazamos 16 bits hacia la izq rpg rt 1 datomenorpeso datomayorpeso Hacemos la or de ambas rpg rt 0 reg rt 0 auxi Hacemos or de parte alta y auxi else if desplaz 6 Si desplazamiento es igual a seis Ap ndice II C digo fuente del simulador P g 306 Simulador de instrucciones del microprocesador MIPS R4000 auxi datomayorpeso gt gt 8 En auxi metemos datomayorpeso desplazado rpg rt 0 rpg rt 0 amp OxFFO00000 Hacemos la and con parte alta datomenorpeso datomenorpeso gt gt 8 Desplazamos 8 bits hacia derecha datomayorpeso datomayorpeso lt lt 24 Desplazamos 24 bits hacia izq rpg rt 1 datomenorpeso datomayorpeso Hacemos la or de ambas rpg rt 0 reg rt 0 auxi Hacemos la or de parte alta y auxi else if desplaz 7 Si desplazamiento es igual a siete rpg rt 0 datomayorpeso En la parte alta metemos datomayorpeso rpg rt 1 datomenorpeso En la parte baja metemos datomenorpeso fin de la instrucci n LDR void L
313. rs 1 1 hacemos el positivo en complemento a dos regrs0 rpg rs 0 invertimos todos los bits if regrsl 0 regrs0 si hay acarreo al sumar a regrsl 1 inc regrs0 regrtl rpg rt 1 11 1 el otro operando tambi n le cambiamos el signo regrt0 rpg rt 0 if regrtl 0 regrt0 cambio 0 No hay que hacer cambio de signo al final else if regrs0 0 amp amp regrt0 0 Si solo el reg rs es negativo regrsl rpg rs 1 1 hacemos el positivo en complemento a dos regrs0 rpg rs 0 invertimos todos los bits if regrsl 0 regrs0 si hay acarreo al sumar a regrs1l 1 inc regrs0 cambio 1 Hay que hacer un cambio de signo al resu ltado regrtl rpg rt 1 El registro rt al ser positivo se regrt0 rpg rt 0 queda como est else if regrt0 0 amp amp regrs0 0 Si solo el reg rt es negativo regrtl rpg rt 1 1 hacemos el positivo en complemento a dos regrt0 rpg rt 0 invertimos todos los bits if regrtl 0 regrt0 si hay acarreo al sumar a regrtl 1 inc regrtO Ap ndice II C digo fuente del simulador P g 328 Simulador de instrucciones del microprocesador MIPS R4000 cambio 1 Hay que hacer un cambio de signo al resultado final regrsl rpg rs 1 el registro rs al ser positivo se queda como est regrs0 rpgl rs 0 else if regrs0 0 amp amp regrt0 0 Si los dos reg son positivos
314. rs es mayor que o igual al contenido del registro rt ocurre una Trap exception Operaci n 32 64 if 0 GPR rs 2 0 GPR rxt then TrapException endif Excepciones Trap exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 177 Simulador de instrucciones del microprocesador MIPS R4000 TLT Trap If Less Than El formato de la instrucci n es TLT rs rt Descripci n de la instrucci n El contenido del registro rt se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es menor que el contenido del registro rt ocurre una Trap exception Operaci n 32 64 1f GPR rs lt GPR rt then TrapException endif Excepciones Trap exception TLTI Trap If Less Than Immediate El formato de la instrucci n es TLTI rs i mmediate Descripci n de la instrucci n El dato inmediato de 16 bits con su extensi n de signo se compara con el contenido del registro rs Considerando ambas cantidades como enteros con signo si el contenido del registro rs es menor que el dato inmediato con su extensi n de signo ocurre una Trap exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 178 Simulador de instrucciones del microprocesador MIPS R4000 Operaci n 32 if GPR rs lt immediate1s immediate 1s then TrapExc
315. rs no es menor que regrt rpg rd 1 0x00000000 El registro rd se pone a cero rpg rd 0 0 else Si las partes altas son igual a cero if regrs lt regrt Comparamos las partes bajas rpg rd 1 0x00000001 Se pone el registro rd a uno rpg rd 0 0 else si regrs no es menor que regrt rpg rd 1 0x00000000 Se pone el registro rd a cero rpg rd 0 0 Fin de la instrucci n SLTU void SLTI ULONG instruccion Set on Less Than Immediate El dato de 16 bits s xtende y se compara con el contenido del registro rs Las dos cantidades tienen que ser enteros con signo Si rs es menor que el dato inmediato extendido el resultado se pone a uno y si no es asj se pone a cero El resultado se guarda en el registro rt UCHAR rs rt Para guardar el nfmero de registro signed long int rssigno inmesigno inme0 inmediato signed long int ULONG rsnosigno inmenosigno Datos sin signo ULONG auxi variable auxiliar inme0 son los 32 bits de mayor peso del dato inmediato en 64 bits rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn inmediato instruccion Ox0000FFFF Cogemos el dato inmediato de instr auxi inmediato En auxi metemos el dato inmediato auxi auxi gt gt 15 Desplazamos hacia la derecha 15 bits if auxi 0
316. rte alta de destino en uno desplaz destino 0x00000003 Cogemos el desplazamiento destino destino OXFFFFFFEC Cogemos el l mite de palabra datoalmac rpgl rt 1 En datoalmac metemos parte baja de reg rt dato lontocar datoalmac Pasamos a array de caracteres un long if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si se sale del rango gotoxy 30 23 printf Direcci n fuera de rango a Si no se sale del rango if Estado RE 0 si es little endian as pf destino desplaz SEEK SET Nos situamos en el fichero k for i 0 i lt 4 desplaz i g j 3 1 if fwrite 8 dato 3 sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria else if Estado RE 1 si es big endian fseek pf destino SEEK_SET Nos situamos en el fichero for i desplaz i gt 0 i j 3 1 if fwrite 8 dato 3 sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria else if Estado UX 1 Para 64 bits Ap ndice II C digo fuente del simulador P g 315 Simulador de instrucciones del microprocesador MIPS R4000 if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango A si no se sale if Es
317. rte alta del reg rt t si regrs es mayor o igual Trap exception e Si las partes altas son iguales si regrs mayor o igual q regrt Trap exception mi Si la parte alta de los dos registros es cero Si regrs es mayor o igual q Trap exception gotoxy 30 23 printf Trap exception Fin de la instrucci n TGEU void TLT ULONG instruccion Trap if Less Than Ap ndice II C digo fuente del simulador P g 278 Simulador de instrucciones del microprocesador MIPS R4000 rs Esta instrucci n provoca una trap exception si el contenido del registro es menor que el contenido del registro rt Los datos son con signo UCHAR rs rt Para coger el nf fmero de registro signed long int rssigno rtsigno Datos con signo ULONG rsnosigno rtnosigno Datos sin signo rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn if Estado UX 0 Para 32 bits rssigno rpg rs 1 En rssigno metemos la parte baja del reg rs rtsigno rpg rt 1 En rtsigno metemos la parte baja del reg rt if rssigno lt rtsigno si rssigno es menor que rtsigno General Exception Trap exception gotoxy 30 23 printf 1 Trap exception else if Estado UX 1 Para 64 bits rssigno rpg rs 0 En rssigno metemos la parte alta del reg rs rs
318. rte alta del registro destino todo a ceros fin de la instrucci tn LHU void LW ULONG instruccion Load Word Al offset se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n El contenido de la palabra en direcci n de memoria especificada por la direccitn efectiva se carga en el registro rt En modo 64 bits la palabra cargada se extiende Si alguno Ap ndice II C digo fuente del simulador P g 288 Simulador de instrucciones del microprocesador MIPS R4000 de los dos bits menos significativos de la direcci n no es cero ocurre un error de direccionamiento UCHAR rt base dato 4 aca base es el campo de rs signed long int off0 offset dest0 destino parte alta y baja de offs y desti ULONG auxi Variable auxiliar int 1 3 Los utilizaremos como ndices rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el campo base de la instruccicn offset instruccion Ox0000FFFF Cogemos el campo offset de la instrucc auxi offset En auxi metemos lo que hay en offset auxi auxi gt gt 15 Desplazamos lo que hay en auxi 15 bits hacia derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFFO000 Hacemos la extensi n de signo de offset off0 OXFFFFFFFE En la parte alta de offset metemos todo unos else if auxi 0 Si aux
319. s del simulador de manera que el usuario al leerlo pueda manejar el programa y moverse por el interfaz de usuario con m s soltura El simulador de instrucciones del R 4000 sirve para ejecutar programas que utilizan el repertorio de instrucciones del propio microprocesador El men principal se compone de 10 opciones que se muestran en la figura 1 Vamos a explicar que hace cada una de estas opciones tambi n habr ejemplos gr ficos MIPS R4000 O000000000000000 00 0 0 0 0 0 8 O000000000000000 O000000000000000 000000 0O0OOODOOO O000000000000000 O000000000000000 oa 010 0J0 010 8 1018 O000000000000000 O000000000000000 OOOO 00000000000 00000000000 00000 pogogogogogogoga 1 Intro program 3 Creditos 00000000 0000000d Intro datos Registros Gacialir 000000000 0noo000a 3 Ejecuci n Inicia EP 00000 00000000000 der direcci n amp 8 Configurac HI OOOO 000000000000 PEO0000000000000000 LO OOOO OOOO Figura 1 1 Introducir Programa Esta opci n nos permite introducir nuestro programa en memoria principal Cuando pulsamos esta opci n el simulador pide una direcci n de comienzo A continuaci n nos pide que metamos una instrucci n completa Cuando hemos introducido la instrucci n nos pide la siguiente y as sucesivamente hasta que metamos todas las instrucciones que forman nuestro programa Para terminar de meter instrucciones pulsaremos la tecla escape Para verlo me
320. s little endian fseek pf destino SEEK SET Nos situamos en el fichero memoria for i 0 i lt desplaz 1 i j desplaz i if fwrite amp dato j sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria else if Estado RE 1 si es big endian fseek pf destinotdesplaz SEEK SET Nos situamos en el fichero for i 0 i lt 4 desplaz i j i if fwrite amp dato j sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria Ap ndice II C digo fuente del simulador P g 313 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones if Estado RE 0 si es little endian fseek pf destino SEEK SET Nos situamos en el fichero memoria for i 0 i lt desplaz 1 1 j desplaz i if fwrite amp dato j sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria else if Estado RE 1 si es big endian fseek pf destino desplaz SEEK SET Nos situamos en el fich for i 0 i lt 4 desplaz i E j i
321. s rt aca Para coger el nfmero de registros y acarreo ULONG inmediato auxi Para el dato inmediato y variable auxiliar rs Campo RS instruccion Cogemos el campo rs de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n inmediato instruccion Ox0000FFFF Cogemos el dato inmediato de instr auxi inmediato En auxi metemos el dato inmediato auxi auxi gt gt 15 Lo desplazamos 15 bits hacia la derecha if Estado UX 0 Para 32 bits Ap ndice II C digo fuente del simulador P g 236 Simulador de instrucciones del microprocesador MIPS R4000 General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits if auxi 0 Si auxi es distinto de cero rpg rt 0 rpg rs 0 OxFFFFFFFF Sumamos las partes altas inmediato inmediato OxFFFF0000 Extendemos el dato inmediato else if auxi 0 Si auxi es igual a cero rpg rt 0 rpg rs 0 0x00000000 Sumamos las partes altas rpg rt 1 rpg rs 1 inmediato Sumamos las partes bajas aca acarreo rpg rs 1 inmediato Miramos si hay acarreo if aca 1 rpg rt 0 Si acarreo en parte baja incrementamos alta Fin de la instrucci tn DADDIU void DADDI ULONG instruccion Doubleword Add Immediate Se hace una extensi fn de signo al dato inmediato y se sum
322. s si hay acarreo if aca 1 Si aca es igual a uno dest0 Incrementamos la parte superior de destino en uno desplaz destino 0x00000007 Cogemos el desplazamiento destino destino amp OxFFFFFFF8 Ponemos el limite de doublword m s cercano if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception sale else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se gotoxy 30 23 Nos situamos printf Direcci n fuera de rango Informamos else Si no se sale del rango de direcciones fseek pf destino SEEK_SET Nos situamos en el fichero de la memoria for i 0 i lt 4 i if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian j 1i if fread 8 doble0 3 sizeof UCHAR 1 pf 0 Leemos 4 bytes Error Error al acceder a memoria for i 0 i lt 4 i if Estado RE 0 Si es little endian Ap ndice II C digo fuente del simulador P g 304 Simulador de instrucciones del microprocesador MIPS R4000 j 3 i else if Estado RE 1 Si es big endian j i if fread amp doblel j sizeof UCHAR 1 pf 0 Leemos 4 bytes Error Error al acceder a memoria if Estado
323. se llama un fallo de cach primaria 3 Si ocurre un fallo de cach primaria el controlador de cach hace un chequeo para ver si la instrucci n dato est en la cach secundaria e Si la instrucci n dato est presente en la cach secundaria se coge y se escribe en la cach primaria e Si la instrucci n dato no est presente en la cach secundaria el dato se coge de la memoria como si fuera una linea de cach y se escribe en la cach secundaria y en la cach primaria 4 El procesador coge la instrucci n dato de la cach primaria y la operaci n contin a Caracter sticas generales del procesador MIPS R4000 P g 42 Simulador de instrucciones del microprocesador MIPS R 4000 Es posible que el mismo dato est en tres lugares simult neamente la memoria principal la cach secundaria y la cach primaria Utiliza la pol tica de post escritura write back que consiste en que el dato modificado en la cach primaria no se escribe en memoria hasta que la l nea de cach sea reemplazada DESCRIPCI N DE LA CACH DEL R4000 Como se mostraba en la figura 17 el R4000 contiene caches de instrucciones y datos separadas La figura 17 tambi n mostraba que el R4000 soporta una cach secundaria que puede estar dividida en porciones separadas una porci n contene datos y la otra porci n contiene instrucciones o puede ser una cach unida conteniendo instrucciones y datos combinados La tabla que se muestra a continu
324. sente en exactamente una cach en el sistema es exclusive y puede estar en uno de los estados exclusive e Dirty Una l nea de cach que contiene datos que han cambiado desde que fueron cargados de memoria est en estado Dirty y debe estar en uno de los estados dirty shared Caracter sticas generales del procesador MIPS R4000 P g 50 Simulador de instrucciones del microprocesador MIPS R 4000 e Clean Una l nea de cach que contiene datos que no han sido cambiados desde que fueron cargados de memoria est en estado clean y puede estar en uno de los estados clean e Shared Una l nea de cach que est presente en mas de una cach en el sistema Cada l nea de cach primaria y secundaria en los sistemas R4000 est en uno de los estados descritos en la tabla que se muestra a continuaci n y que lista con los tipos de cach y los modelos del R4000 en cu les de los estados pueden ser encontrados Estado de D nde se usa ese Permitido en la l nea de Descripci n los modelos A estado Cach del R4000 Una l nea de cach que no contiene informaci n valida debe ser marcada invalid y no puede ser usada Por ejemplo una l nea de cach se marca e R4000PC i A Cach Primaria Invalid invalid si la misma informaci n R40005C De Secundaria localizada en otra cach es modificada R4000MC Una l nea de cach en cualquier otro estado que no sea invalid se
325. set Se suma el offset al CP else rpg 34 1 rpg 34 1 4 NullifyCurrentInstruction pasa de la sig Fin de la instrucci n BEOL Ap ndice II C digo fuente del simulador P g 259 Simulador de instrucciones del microprocesador MIPS R4000 void BNE ULONG instruccion Branch If Not Equal Se comparan los contenidos de los registros rs y rt Si los dos registros son distintos el programa hace un salto relativo marcado por el campo offset 1 UCHAR rs rt Para el n fmero de los registros signed long int offset Para el offset ULONG auxi Variable auxiliar rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn offset instruccion Ox0000FFFEF Cogemos el campo offset de la instr offset offset lt lt 2 Desplazamos hacia la izquierda dos bits auxi offset En auxi metemos offset auxi auxi gt gt 17 Lo desplazamos 17 bits hacia la derecha if auxi 0 Si auxi es distinto de cero offset offset OxFFFCOO0OO Se hace una extensi n de signo con unos if Estado UX 0 Para 32 bits if rpg rs 1 rpg rt 1 1 1 Si la parte baja de los regs es distinta rpg 34 1 rpg 34 1 offset Al contador CP se le suma el offset else if Estado UX 1 Para 64 bits if rpg rs 0 rpg rt1 0 1 reg rs 1 rpg rt 1 distintos Si
326. si n de signo a 32 64 bits dependiendo del modo de operaci n y ese dato se suma al dato que hay en el registro rs El resultado se guarda en el registro rt En modo 64 bits el bit 31 del resultado se extiende Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 95 Simulador de instrucciones del microprocesador MIPS R4000 La nica diferencia entre esta instrucci n y la instrucci n ADDI es que ADDIU nunca causa una excepci n de desbordamiento Integer Overflow Exception Operaci n 32 GPR rt lt GPR rs immediate s immediate ss o 64 temp lt GPR rs immediates f immediate s o NN GPR rt lt temps 1 tempz31 0 Excepciones Ninguna ADDU Add Unsigned El formato de la instrucci n es ADDU rd rs rt Descripci n de la instrucci n El contenido del registro rs y el contenido del registro rt se suman y el resultado se guarda en el registro rd En modo 64 bits el bit 31 del resultado se extiende La nica diferencia entre esta instrucci n y la instrucci n ADD es que ADDU nunca causa una excepci n de desbordamiento Integer Overflow Exception Operaci n 32 GPR rd lt GPR rs GPR rt 64 temp GPR rs GPR rt GPR rd lt temp31 temps1 0 Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 96 Simulador de instrucciones del microprocesador MIPS R4000 Excepciones Ninguna
327. solo est definida para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 GPR rd lt GPR rs GPR rt Excepciones Reserved instruction exception En modo 32 bits J Jump El formato de la instrucci n es J target Descripci n de la instrucci n La direcci n de 26 bits del campo target se desplaza hacia la izquierda dos bits y se combina con los bits de orden alto de la direcci n del CP El programa salta a esta direcci n Operaci n 32 temp target PC lt PC31 28 temp I 0 64 temp target PC PCes 28 temp 0 Excepciones Ninguna Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 131 Simulador de instrucciones del microprocesador MIPS R4000 JAL Jump And Link El formato de la instrucci n es JAL target Descripci n de la instrucci n La direcci n de 26 bits del campo target se desplaza hacia la izquierda dos bits y se combina con los bits de orden alto de la direcci n del CP El programa salta a esta direcci n La direcci n de la instrucci n siguiente a la instrucci n siguiente a la instrucci n de salto se guarda en el registro 31 Operaci n 32 temp amp target GPR 31 lt PC 8 PC lt PCa 28 temp 0 64 temp amp target GPR 31 lt PC 8 PC lt PC 3 28 temp 0 Excepciones Ni
328. ssigno gt rtsigno rssigno rtsigno y rssigno gt rtsigno rpg 33 0 dividir regrs0 regrsl regrt0 regrt1 COCIENTE0 rpg 33 1 dividir regrs0 regrsl regrt0 regrt1 COCIENTE rpg 32 0 dividir regrs0 regrs1 regrt0 regrtl RESTOO rpg 32 1 dividir regrs0 regrs1 regrt0 regrtl RESTO if cambio 1 reg 33 1 rpg 33 1 1 hacemos el positivo en complemento a dos rpg 33 0 rpg 33 0 invertimos todos los bits if rpg 33 1 0 rpg 33 1 0 1 si hay acarreo al sumar a regrtl 1 inc regrt0 reg 32 1 rpg 32 1 1 hacemos el positivo en complemento a dos rpg 32 0 reg 32 0 invertimos todos los bits if rpg 32 1 1 0 rpg 32 1 0 1 si hay acarreo al sumar a regrtl1l 1 inc regrt0 Ap ndice II C digo fuente del simulador P g 230 Simulador de instrucciones del microprocesador MIPS R4000 else if rssigno lt rtsigno rpg 33 0 0 En el cociente hay un cero rpg 33 1 0 rpg 32 0 rpg rs 0 El resto es igual que el dividendo rpg 32 1 rpg rs 1 else if rpg rs 0 rpg rt 0 Si las dos partes altas son iguales if rsnosigno gt rtnosigno rsnosigno rtnosigno si mayor 0 dividir 1 dividir 0 dividir 1 dividir ambio 1 regrs0 regrs1 regrt0 regrtl COCIENTEO regrs0 regrs1l regrt0 regrtl COCIENTE regrs0 regrs1 regrt0 regrtl RESTOO regrs0 regrs1 regrt0 regrtl RESTO
329. stro base para formar la direcci n a la que vamos a acceder A la media palabra Halfword localizada a partir de la direcci n de memoria especificada se le hace una extensi n de signo y se guarda en el registro rt Si el bit menos significativo de la direcci n a la que se va a acceder es distinto de cero ocurre una Address error exception Operaci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 140 Simulador de instrucciones del microprocesador MIPS R4000 32 direccion offset s5 1 offset s o0 FGPR base temp Halfword A partir de la direcci n GPR rt lt tempis temp 64 direccion offset s5 f offset s5 0 GPR base temp Halfword A partir de la direcci n GPR rt lt temps temp Excepciones Address error exception LHU Load Halfword Unsigned El formato de la instrucci n es LHU rt offset base Descripci n de la instrucci n Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma a el contenido del registro base para formar la direcci n a la que vamos a acceder A la media palabra Halfword localizada a partir de la direcci n de memoria especificada se le hace una extensi n con ceros y se guarda en el registro rt Si el bit menos significativo de la direcci n a la que se va a acceder es distinto de cero ocurre una Address error exception Operaci n 32 direccion 4
330. stros rs y rt El cociente es guardado en el registro LO y el resto es guardado en el regis tro HI Para 64 bits se hace una extensi n de signo ULONG auxi cociente resto regrs regrt Variables sin signo UCHAR rs rt Indican el n mero de registro rs Campo RS instruccion Cogemos el campo rs de la instruccitn rt Campo RT instruccion Cogemos el campo rt de la instruccitn regrs rpg rs 11 En regrs metemos contenido del registro rs my F a my F an regrt rpg rt 1 En regrt metemos el contenido del registro rt if Estado UX 0 para 32 bits if rpglrt 1 0 Si el divisor es igual a cero gotoxy 30 23 printf Divisi n por cero Informamos que no se pued else si el divisor no es igual a cero rpg 33 1 regrs regrt En LO guardamos el cociente de la divisicn o rpg 32 1 regrs regrt En HI guardamos el resto de la divisiftn Ap ndice II C digo fuente del simulador P g 224 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado UX 1 para 64 bits if rpglrt 1 0 Si el divisor es igual a cero gotoxy 30 23 printf Divisi n por cero Informamos de el error else si el divisor no es igual a cero cociente regrs regrt En cociente se guarda el cociente de la div resto regrs r
331. t rpg rd 1 rpg rd Fin de la inst void SRAV ULONG inst Esta instrucci n ha y el resultado se gua UCHAR rt rd rs sa ULONG auxi Vari Si auxi es distinto de cero FFFFFF En parte alta metemos todo unos gt gt 32 sa En auxi metemos todo 1 despl drcha 32 sa sa Desplazamos 32 sa bits hacia la izquierda Si auxi es igual a cero 000000 Ponemos la parte alta a cero En auxi metemos un cero 1 gt gt sa En parte baja metemos parte baja gt gt sa 1 auxi Hacemos la or con auxi rucci n SRA ruccion Shift Right Arithmetic Variable ce un desplazamiento de bits aritm tico hacia la derecha rda en el registro rd Para coger los registro y el desplazamiento able auxiliar Ap ndice II C digo fuente del simulador P g 251 Simulador de instrucciones del microprocesador MIPS R4000 rs Campo RS instruccion Cogemos el campo rs de la instrucci tn rt Campo RT instruccion Cogemos el campo rt de la instrucci tn rd Campo RD instruccion Cogemos el campo rd de la instrucci tn auxi rpg rs 1 0x0000001F Cogemos el desplazamiento sa UCHAR auxi este sa se refiere a s if Estado UX 0 Para 32 bits bts bit auxi rpg rt 1 gt gt 31 En auxi metemos el reg rt desplaz a la drcha 31 if auxi 0 Si auxi es distinto de cero auxi 0xFFFFFFFF gt gt 32 sa En aux
332. t 1 Si contenido de rs es distinto del de rt General Exception Trap exception gotoxy 30 23 printf Trap exception EN else if Estado UX 1 Para 64 bits if rpg rs 0 rpg rt 1 01 rpglrs 1 rpg rt1 1 Si alguna de las dos partes alta baja de cada registro son distintas General_Exception Trap exception gotoxy 30 23 printf Trap exception DD E fin de la instrucci n TN id TGE ULONG instruccion Trap If Greater Than Or Equal Si el contenido del registro rs es mayor o igual que el contenido del gistro rt ocurre una Trap exception Los dos regs deben ser con signo UCHAR rs rt Para coger el n mero de registro signed long int rssigno rtsigno para tener los valores de regs con gno ULONG rsnosigno rtnosigno para tener valores sin signo rs Campo RS instruccion cogemos el campo rs de la instrucci n rt Campo RT instruccion cogemos el campo rt de la instrucci tn if Estado UX 0 Para 32 bits f rssigno rpg rs 1 Metemos el dato de 32 bits en rssigno rtsigno rpg rt 1 Metemos el dato de 32 bits en rtsigno Ap ndice II C digo fuente del simulador P g 276 Simulador de instrucciones del microprocesador MIPS R4000 if rssigno gt rtsigno rssigno rtsigno Si es mayor o igual General_Exception Trap exception gotoxy 30 23 printf Trap exception DD
333. t de la instrucci n inmediato instruccion Ox0000FFFF Cogemos el campo inmediato BESET regori rpg rs 1 amp 0x0000FFFF Cogemos los 16 bits mas bajos resul inmediato regori hace la or con los 16 bits de inmediato izqreg rpg rs 1 OxFFFFO0O000 bits 31 16 del registro izqreg izqreg Ox0000FFFF Los 16 bits mas bajos se ponen a 1 resul resul OxFFFFO0O000 Ponemos los 16 bits mas altos a 1 resul resul izqreg Esto es lo que vamos a meter en el registro if Estado UX 0 Para 32 bits rpg rt 1 resul Guardamos el resultado en la parte baja del reg zM if Estado UX 1 Para 64 bits rpg rt 0 rpg rs 0 Dejamos la parte alta como est rpg rt 1 resul Guardamos el resultado en la parte baja del reg fin de la instruccitn ori void XOR ULONG instruccion Exclusive Or Se hace la xor l tgica del registro rs y rt y el resultado se guarda en el registro rd UCHAR rs rt rd Para guardar el nfmero del registro rs Campo RS instruccion Cogemos el campo rs de la instrucci tn Ap ndice IT C digo fuente del simulador P g 235 Simulador de instrucciones del microprocesador MIPS R4000 rt Campo RT instruccion Cogemos el campo rt de la instrucci n rd Campo RD instruccion Cogemos el campo rd de la instrucci n if Estado UX 0 Para 32 bits rpg rd 1 rpeg rs 1 1 r
334. ta rpg rd 0 auxi 0 0 OXFFFFFFFF Xor de auxi y OxXFFFFFFFF Fin de la instrucci tn NOR void OR ULONG instruccion hac s hacer la operaci n OR ltgica de los re rd qu Ap ndice II C digo fuente del simulador P g 234 Simulador de instrucciones del microprocesador MIPS R4000 UCHAR rs rt rd Para coger el n mero del registro ULONG auxi 1 2 1 variable auxiliar rs Campo RS instruccion cogemos el campo rs de la instrucci n rt Campo RT instruccion cogemos el campo rt de la instrucci n rd Campo RD instruccion cogemos el campo rd de la instrucci n if Estado UX 0 Para 32 bits rpg rd 1 rpg rs 1 rpg rt1 1 1 se hace la or directamente else if Estado UX 1 Para 64 bits rpglrd 1 rpg rs 1 rpg rt1 1 Se hace la or de la parte baja rpg rd 0 rpg rs 0 rpg rt 0 Se hace la or de la parte alta fin de la instrucci n OR void ORI ULONG instruccion Or Immediate El dato inmediato se extiende con ceros y se combina con el contenido del registro rs en una operaci tn or l gica El resultado se guarda en el registro rt UCHAR rs rt Para el n mero de los registros ULONG inmediato regori resul izqreg variables sin signo de 32 bits s Campo RS instruccion Cogemos el campo rs de la instrucci tn t Campo RT instruccion Cogemos el campo r
335. ta el registro rs rt y el resultado se guarda en el registro rd Para 64 bits se hace una extensi n de signo Si se produce desbordamiento se produce una excepcitn UCHAR rs rt rd Para guardar el n fmero del registro ULONG regrs regrt regrd Variables intermedias ULONG auxrs auxrt auxrd Variables auxiliares para ver signo rs Campo RS instruccion Cogemos el campo rs de la instruccitn rt Campo RT instruccion Cogemos el campo rt de la instruccitn rd Campo RD instruccion Cogemos el campo rd de la instrucci n regrs rpg rs 1 Guardamos parte baja de rs en regrs regrt rpg rt 1 1 Lo cambiamos de signo regrd regrs regrt Sumamos y guardamos en regrd auxrd regrd En aux metemos lo que hay en reg porque queremos auxrs regrs Ver el signo bit 32 auxrt regrt auxrd auxrd gt gt 31 Los desplazamos 31 bits hacia la derecha auxrs auxrs gt gt 31 auxrt auxrt gt gt 31 if Estado UX 0 para 32 bits if auxrs auxrt amp amp auxrd auxrs Vemos si hay desbordamiento General _Exception Integer overflow exception gotoxy 30 23 printf Integer overfl exception else rpg rd 1 regrd Guardamos en el registro el resultado else if Estado UX 1 para 64 bits if auxrs auxrt amp amp auxrd auxrs Vemos si hay desbordamiento Ap ndice II C digo fuente del simu
336. tado RE 0 si es little endian 7 pf destino desplaz SEEK SET Nos situamos en el fichero k for 1 0 i lt 4 desplaz i l j 3 1 if fwrite 8 dato 3 sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria else if Estado RE 1 si es big endian fseek pf destino SEEK SET Nos situamos en el fchero for i desplaz i gt 0 1i j 3 1 if fwrite 8 dato 3j sizeof UCHAR 1 pf 0 Escribe dato Error Error al acceder a memoria fin de la instrucci n SWR void SD ULONG instruccion Store Double Al offset se le hace una extensi n de signo y se suma al contenido del registro base para formar una direccicn El contenido del registro rt es almacenado en la direccitn de memoria especificada La direcci n debe ser m ltiplo de 8 Si se ejecuta en modo 32 bits se produce una reserved instruction exception UCHAR rt base aca base es el campo de rs y acarreo signed long int off0 offset dest0 destino Parte alta y baja de off y dest ULONG datomenorpeso datomayorpeso auxi Para dato de mayor y menor peso y auxi UCHAR doble0 NULL doblel NULL Para convertir el long a array de char int i j Se utilizan como ndices rt Campo RT instruccion Cogemos el campo rt de la instrucci tn base Campo RS instruccion Cogemos el
337. tate Tag P n 4 para lineas de 4 palabras n 5 para l neas de 8 palabras Dato Figura 21 Organizaci n de los datos y etiquetas de la cach primaria Organizaci n de la Cach Secundaria Cada l nea de cach secundaria tiene asociada una etiqueta de 19 bits que contiene los bits 35 17 de la direcci n f sica un ndice de 3 bits para la cach primaria VA 14 12 y 3 bits para el estado de l nea de la cach Estos 25 bits por un c digo de detecci n de errores ECC de 7 bits La figura 22 muestra el formato de la l nea de cach secundaria del procesador R4000 El tama o de la l nea de cach secundaria est en el campo SB del registro de configuraci n Config register Caracter sticas generales del procesador MIPS R4000 P g 48 Simulador de instrucciones del microprocesador MIPS R 4000 31 2524 2221 19 18 0 ECC ECC para la etiqueta secundaria CS Estado de la cach secundaria O Invalid 1 reserved 2 reserved 3 reserved 4 Clean Exclusive 5 Dirty Exclusive 6 Shared 7 Dirty Shared Pidx ndice de la cach primaria bits 14 12 de la direcci n virtual Stag Etiqueta f sica bits 35 17 de la direcci n f sica Figura 22 Formato de l nea de la cach secundaria La cach secundaria del R4000 tiene las siguientes caracter sticas e Post escritura e Mapeado directo e Indexada con una direcci n f sica e Chequeada con una etiqueta f sica e Organizada con una l nea de cach de
338. te dato 32 bits a 4 de 8 bits ULONG temp Variable temporal UCHAR conversion Para la conversi tn int J Indice if conversion UCHAR malloc 4 sizeof UCHAR NULL Se crea espacio printf Insuficiente espacio en memoria n exit 1 Ap ndice II C digo fuente del simulador P g 200 Simulador de instrucciones del microprocesador MIPS R4000 for 3 0 3 lt 4 3 Bucle temp x En temp metemos x temp temp gt gt 8 3 Desplazamos 8 j bits hacia la derecha conversion 3 3 UCHAR temp Lo guardamos en conversitn return conversion Devuelve el array int Coger instruccion void Esta funci n devuelve la instruccitn cogida LONG auxiliar auxiliar2 cont CHAR car 4 car2 4 cop caracter finbreak 0 har ejecucion secuencial paralelo breakpoint LONG breakpoint 0 int paralelo 0 escape int 1 y 17 m U U e U UCHAR dec format tecla para decodificar la instruccion y formato UCHAR dec2 format2 cop2 limpia 2 17 56 20 5 limpia una zona de la pantalla gotoxy 2 17 printf Modo de ejecucitn Pide modo de ejecuci tn gotoxy 2 19 printf Atl Secuencial Secuencial printf At 2 Paralelo Paralelo printf At3 Breakpoint Breakpoint punto de parada do gotoxy 21 17 Nos situamos en la pantalla ejecucion getch Coge opci n de teclado while ejecucion 1 amp amp ejecucion 2
339. tenido de la palabra de la direccitn Ap ndice II C digo fuente del simulador P g 296 Simulador de instrucciones del microprocesador MIPS R4000 especificada se carga en el registro rt La palabra cargada se extiende con ceros La direcci n debe ser m ltiplo de 4 Si se ejecuta en modo 32 bits se produce una address error exception error de direccionamiento UCHAR rt base dato 4 aca base es el campo de rs dato y acarreo signed long int off0 offset dest0 destino Parte alta y baja de offs y dest ULONG auxi Variable auxiliar int i j Las utilizamos como ndice t Campo RT instruccion Cogemos el campo rt de la instruccitn ase Campo RS instruccion Cogemos el campo base de la instruccitn ffset instruccion Ox0000FFFF Cogemos el offset de la instrucci n uxi offset En auxi metemos lo que hay en la variable offset uxi auxi gt gt 15 Desplazamo 15 bits hacia la derecha DPVP OTDt if auxi l 0 Si auxi es distinto de cero offset offset OxFFFFO000 Se extiende el signo con unos off0 OXFFFFFFFF La parte alta del offset se pone todo a unos else if auxi 0 Si auxi es igual a cero off0 0 La parte alta del offset se pone todo a ceros destino rpg base 1 offset Hacemos registro base mas desplazamiento dest0 rpglbase 0 off0 Hacemos reg base off0 parte alta aca acarreo rpg base 1 offset Miramos si hay acarre
340. tenido que introducir un dato de 32 bits Los registros de prop sito especial HI y LO y el contador de programa CP no se pueden modificar desde aqu El nico modo de modificar los registros HI y LO es a trav s de las instrucciones de multiplicaci n divisi n y movimiento de datos MIPS R4000 0000 00 00 00 00 00 00 00 00 00 00 00 00 y 0 00 00 00 00 00 00 00 00 00 00 00 00 0 00 00 00 DO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0 00 00 00 00 00 00 00 00 00 00 00 DO 00 00 00 00 00 00 00 00 00 00 00 00 0 00 00 00 00 00 00 00 00 O 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2 gt 32 bits mayor peso 32 bits menor peso Desea modificar otro Figura 15 7 Inicia_CP Esta opci n se suele utilizar cuando se desea que el registro CP apunte a otra direcci n distinta siempre alineada como palabra De este modo podemos comenzar a ejecutar un programa a partir de la direcci n que nosotros queramos Si el valor de la direcci n introducida no es m ltiplo de cuatro no est alineada como una palabra nos volver a pedir la direcci n hasta que sea m ltiplo de cuatro 8 Configuraci n Esta opci n sirve para cambiar la configuraci n del simulador Cuando se pulsa esta opci n el simulador muestra la configuraci n actual y seg n nos mues
341. tf 32 bits miramos si 32 bits 64 else if Estado UX 1 printf 64 bits gotoxy 25 19 situamos el cursor if Estado RE 0 printf Little endian Little o big else if Estado RE 1 printf Big endian gotoxy 25 20 situamos el cursor Ap ndice II C digo fuente del simulador P g 213 Simulador de instrucciones del microprocesador MIPS R4000 if Estado KSU 0 printf Kernel Kernel supervisor o usuario else if Estado KSU 1 printf Supervisor else if Estado KSU 2 printf Usuario gotoxy 2 20 situamos el cursor printf Pulsa tecla informaci n getch pulsar tecla para continuar return 0 fin de la funcion configuracin int leedir unsigned long v Esta instrucci n lo que hac s leer una direcci tn de memoria desde el teclado del ordenador Si se pulsa escape se sale de la opcitn indicada Hay que meter la direcci tn con sus cuatro numeros char tecla 5 endptr array de tres caracteres y puntero unsigned long temp Variable temporal unsigned char car int i 0 Para el contador do do car toupper getch Lee el primer car cter introducido if car 8 amp amp i gt 0 printf Sc car printf Sc car rcy while car lt 0 car gt 9 amp amp car lt A car gt F amp amp car 27 if car 27 Si se ha pulsad
342. tide offset 0 condicion lt GPR rs GPR rt if condicion then PC E PC target else se anula la siguiente instr endif Excepciones Ninguna BNE Branch On Not Equal El formato de la instrucci n es BNE rs rt offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits El contenido del registro rs y el contenido del registro rt se comparan Si los dos registros son distintos el programa salta a la direcci n que se ha formado de la suma anterior Operaci n 32 target offsets offset 0 condicion GPR rs GPR rt if condicion then PC E PC target Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 100 Simulador de instrucciones del microprocesador MIPS R4000 endif 64 target offset s ff offset 0 condicion lt GPR rs GPR rt if condicion then PC lt PC target endif Excepciones Ninguna BNEL Branch On Not Equal Likely El formato de la instrucci n es BNEL rs rt offset Descripci n de la instrucci n Se forma una direcci n de salto relativo de la suma de la direcci n de la siguiente instrucci n al salto y el offset de 16 bits con extensi n de signo desplazado a la izquierda dos bits El contenido del registro rs y el contenido del
343. tiende el dato inmediato de 16 bits y se compara con el contenido del registro rs Las dos cantidades son sin signo Si el registro rs es menor que el dato inmediato el resultado se pone a uno y en caso contrario el resultado que se guarda en el registro rt se pone a cero UCHAR rs rt Para guradar el nfmero de los registros ULONG regrs inmediato inme0 auxi unsigned long int inme0 son los 32 bits de mayor peso del dato inmediato en 64 bits rs Campo RS instruccion Cogemos el campo rs de la instruccitn rt Campo RT instruccion Cogemos el campo rt de la instruccitn inmediato instruccion Ox0000FFFF Cogemos el dato inmediato de instr auxi inmediato En auxi metemos el dato inmediato auxis auxi gt gt 15 Lo desplazamos 15 bits hacia la derecha regrs rpgl rs 1 En regrs metemos el registro rs parte baja if auxi 0 Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Extendemos el dato inmediato inme0 0xFFFFFFFF La parte alta del dato inmediato se pone a unos else if auxi 0 Si auxi es igual a cero inme0 0x00000000 La parte alta del dato inmediato se pone a ceros if Estado UX 0 Para 32 bits if regrs lt inmediato Si regrs es menor que inmediato rpg rt 1 0x00000001 La parte baja del reg rt se pone a uno else rpg rt 1 0x00000000 La parte baja del reg rt se pone a cero else if Estado
344. tino gt 65535 destino lt 0 Si se sale del rango de dirs gotoxy 30 23 printf Direccitn fuera de rango else if destino 2 0 Si la direcci n es m ltiplo de dos General_Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango de dirs y no hay error de direcc fseek pf destino SEEK SET Nos posicionamos en el fichero memoria if fread 8datol sizeof UCHAR 1 pf 0 cogemos un byte Error Error al acceder a memoria if fread amp dato2 sizeof UCHAR 1 pf 0 leemos el siguiente byte Error Error al acceder a memoria if Estado RE 0 Si es little endian auxi dato2 En auxi metemos dato2 auxi auxi lt lt 8 Desplazamos 8 bits hacia la izquerda auxi auxi datol Hacemos la or de auxi y datol rpg rt 1 auxi En la parte baja del registro rt metemos auxi else if Estado RE 1 Si es big endian auxi datol En auxi metemos datol auxi auxi lt lt 8 Desplazamos 8 bits hacia la izquierda auxi auxi dato2 Hacemos la or de auxi y dato2 rpg rt 1 auxi En la parte baja del registro metemos auxi rpg rt 1 rpg rt 1 amp 0x0000FFFF Hacemos una extensi n con ceros Ap ndice IT C digo fuente del simulador P g 287 Simulador de instrucciones del microprocesador MIPS R4000
345. tion UCHAR rt rd sa Para el n fmero de los registros y desplazamiento ULONG auxi Variable auxiliar rt Campo RT instruccion Cogemos el campo rt de la instrucci n rd Campo RD instruccion Cogemos el campo rd de la instrucci n auxi instruccion 0x00007C0 Cogemos el campo sa de la instruccitn auxi auxi gt gt 6 Lo desplazamos 6 bits hacia la derecha sa UCHAR auxi Lo convertimos a char sa sa 0x20 sumamos a sa 32 if Estado UX 0 Para 32 bits General Exception Reserved instruction exception gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Para 64 bits if sa gt 32 Si sa es mayor de 32 rpg rd 0 rpg rt 1 En la parte alta del registro se mete la baja rpg rd 1 0x00000000 En la parte baja del registro se pone a cero rpg rd 0 rpg rd 0 lt lt sa 32 La parte alta se despl sa 32 bits else Si sa no es mayor de 32 rpg rd 0 rpg rt 0 lt lt sa La parte alta se desplaza sa bits izq auxi rpg rt 1 en auxi metemos la parte baja del reg rt auxi auxi gt gt 32 sa auxi lo desplazamos 32 sa bits derecha rpg rd 0 reg rd 0 auxi Hacemos la or de auxi y parte alta rpg rd 1 rpg rt 1 lt lt sa Desplazamos la parte baja sa bits fin de la instrucci n DSLL32 void DSRA ULONG instruccion Doubleword Shift Right Arithmetic el
346. tle endian rpg rt 1 srpg rt 1 amp OxFFFFFFOO Hacemos and con parte baja rpg rt 1 srpg rt 1 auxi Hacemos or de auxi con parte baja else if Estado UX 1 Para 64 bits if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del rango de direcciones fseek pf destino SEEK SET Nos situamos en el fichero de memoria for i 0 i lt 4 i if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian J 1 Ap ndice II C digo fuente del simulador P g 295 Simulador de instrucciones del microprocesador MIPS R4000 if fread 8dato 3J sizeof UCHAR 1 pf 0 Leemos 4 bytes auxi chartolong dato Error Error al acceder a memoria En auxi metemos el dato convertido a long es little endian if Estado RE 0 Si auxi auxi gt gt desplaz 8 else if Estado RE 1 auxi auxi gt gt 3 desplaz Desplazamos Si es Big endian 8 Desplazamos if desplaz 0 Si desplazamiento es igual a cero if Estado RE 1 Si es Big endian rpg rt 1 rpg rt 1 amp OxFFFFFFOO Hacemos and con parte baja rpg rt 1 rpg rt1 1 auxi Hacemos or de parte baja y auxi else if Estado RE auxi rpg rt 1 auxi En parte baja m
347. tn ADDIU void ADDU ULONG instruccion Add Unsigned Esta funci n hace la suma sin signo de los registros rs y rt y el resul tado lo mete en el registro rd Para 64 bits los 32 bits de mayor peso del registro rd son una extensitn del bit 31 del resultado UCHAR rs rt rd indican el n mero de registro ULONG temp 1 2 aux variable temporal y variable auxiliar rs Campo RS instruccion cogemos el campo rs rt Campo RT instruccion cogemos el campo rt rd Campo RD instruccion cogemos el campo rd if Estado UX 0 para 32 bits rpg rd 1 rpg rs 1 rpg rt 1 1 sumamos sin signo y guardamos el resultado en registro rd Ap ndice II C digo fuente del simulador P g 220 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado UX 1 para 64 bits temp 0 1 rpg rs 1 rpg rt 1 sumamos sin signo aux temp 0 1 pasamos el resultado temporal a la var aux aux aux amp 0x80000000 vamos a ver el valor del bit 31 aux aux gt gt 31 if aux 0 rpg rd 0 0xFFFFFFFF si no es cero extendemos con unos else if aux 0 rpg rd 0 0x00000000 si es cero extendemos con ceros rpg rd 1 temp 0 1 finalmente guardamos el resultado que est en la variable temporal en la parte baja de rd fin de la instrucci n ADDU void SUB ULONG instruccion Subtract Res
348. to de la instrucci n es LDL rt offset base Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 136 Simulador de instrucciones del microprocesador MIPS R4000 Descripci n de la instrucci n Esta instrucci n puede usarse en combinaci n con la instrucci n LDR para cargar un registro con ocho bytes consecutivos desde memoria cuando los bytes cruzan el l mite de una doble palabra Al desplazamiento de 16 bits se le hace una extensi n de signo y se suma al contenido del registro base para formar una direcci n la cual especifica un byte arbitrario La instrucci n lee bytes de la doble palabra en memoria que contiene el byte de comienzo especificado Se cargar n de uno a ocho bytes dependiendo del byte de comienzo Esta operaci n solo est definida en modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n Tenemos una doble palabra doubleword que es 394573587631292A Para Big Endian Memoria 0000 39 45 73 58 76 31 29 2A Registro Desplazam Registro rt 0 gt 39 45 TS 58 76 31 29 2A 1 gt 45 78 58 76 Sil 29 2A JX 2 gt TS 58 76 31 29 2A X X 3 gt 58 76 31 29 2A X X X 4 gt 76 31 29 2A X X X X 5 gt 3L 29 2A JX X X X X 6 gt 29 2A JX X X X X X 7 gt 2A X X X X X X X Ap ndice I Descripci n de las instrucci
349. tra la figura 16 nos pide si queremos cambiar la configuraci n Manual de Usuario del simulador de instrucciones MIPS R4000 P g 82 Simulador de instrucciones del microprocesador MIPS R4000 MIPS R4000 0000 00 RO 0000000000000000 0010 00 R1 0000000000000000 0020 00 R 2 0000000000000000 0030 00 R3 0000000000000000 0040 00 R4 0000000000000000 0050 00 R5 D000000000000000 0060 00 R6 DOOO00D0O000D000000 0070 00 R D0000000000000000 0080 00 R8 0000000000000000 0090 00 R9 D000000000000000 DOAO 00 R10 0000000000000000 0060 00 R11 0000000000000000 R12 0000000000000000 Configuraci n actual R13 0000000000000000 gt R14 0000000000000000 gt Little endian R15 0000000000000000 Cambiarla S N _ Usuario gt 16 31 HT D0000000000000000 PC D0000000000000000 LO 0000000000000000 Figura 16 Si la opci n pulsada es N la configuraci n se queda tal y como est Por el contrario si la opci n pulsada es S nos da a elegir entre modo de ejecuci n 32 bit y modo de ejecuci n en 64 bits Despu s da a elegir la ordenaci n de los bytes en memoria little endian big endian Ya se ha cambiado la configuraci n Muestra la actual y pulsando una tecla sale al men principal La figura 17 muestra c mo pide el modo de operaci n 32 64 bits MIPS R4000 RO OO000OOD0O00D0000 00 RI OO000000000000000 REG O000000000000000 3100000000000 00000 F4 00000OOOOOOOOOOC E a Re 00
350. tro nreg que es el n de registro a partir del cual comenzamos a visualizarlos Se visualizan de 16 en 16 registros Si nreg 0 se ven del 0 al 15 y si nreg 16 s ven del 16 al 31 se trata de eso por lo tanto conviene que nreg sea 0 o 16 pero eso ya lo controlo yo in in gotoxy 59 4 Nos posicionamos i contador para ver los registros Toma valores del 0 al 31 pos 0 para controlar la posici tn vertical en la pantalla for i nreg i lt nreg 16 1i Vemos a partir de nreg gotoxy 59 4 pos seg n se incrementa i vamos pasando de l nea printf R d i printf S5081X rpglil1 01 Vemos registro por pant printf S081X rpg i 1 pos incrementamos pos Ahora voy a poner una informaci n en pantalla Si se pulsa ver de los registros 0 15 o del 16 31 gotoxy 64 21 Nos posicionamos se puede if nreg 0 Si nreg vale 0 es qu stamos viendo del 0 15 printf gt 16 31 Ponemos que si pulsas puedes ver del 16 31 Ap ndice II C digo fuente del simulador P g 197 Simulador de instrucciones del microprocesador MIPS R4000 else if nreg 16 Si nreg vale 16 es qu stamos viendo del 16 32 printf gt 0 15 Ponemos que si pulsas puedes ver del 0 15 gotoxy 6 Nos posicionamos printf ME printf 3 o rpg 32 0 Vemos la parte alta del registro HI printf 081X rp
351. ucci n DMULTU void MULT ULONG instruccion Multiply Multiplica con signo el contenido de los registros rs y rt Los 32 bits mas bajos del resultado se guardan en el registro LO y los 32 bits m s altos del resultado se guardan en el registro HI En 64 bits se hace una extensicn de signo en el correspondiente registro del resultado UCHAR rt rs sa cambio 0 Para el nfmero de los registros y cambio signo ULONG auxi regrs regrt variables auxiliares y para los registros rs Campo RS instruccion Cogemos el campo RS de la instrucci n rt Campo RT instruccion Cogemos el campo rt de la instrucci n regrs rpg rs 1 gt gt 31 vamos a ver el signo que tiene cada registro regrt rpg rt 1 gt gt 31 Para ello desplazamos a la derecha 31 bits if regrs 0 amp amp regrt 0 Si los dos registros son negativos regrs rpg rs 1 1 hacemos el positivo en complemento a dos regrt rpg rt 1 1 cambio 0 No hace falta hacer el cambio de signo en el resultado else if regrs 0 amp amp regrt 0 Si solo el registro rs es negativo regrs rpg rs 1 1 hacemos el positivo en complemento a dos cambio 1 Para hacer el cambio de signo en el resultado final regrt rpgl rt 1 El registro rt se queda como est else if regrt 0 amp amp regrs 0 Si solo el registro rt es negativo l regrt rpg rt 1 1 Hacemos el positivo en complemento a dos
352. vimiento Estas instrucciones mueven datos entre memoria el procesador principal y los registros de prop sito general de la FPU Conversi n Estas instrucciones realizan operaciones de conversi n entre varios formatos de datos Computacionales Estas instrucciones realizan operaciones aritm ticas de valores en coma flotante en los registros de la FPU Comparaci n Estas instrucciones realizan comparaciones de los contenidos de los registros y acti an sobre un bit condicional basado en los resultados Salto relativo si se cumple la condici n Estas instrucciones realizan un salto a la direcci n especificada si la condici n se cumple En los formatos de instrucci n que vemos en las tablas que se muestran a continuaci n el fmt adjunto al c digo de la operaci n de la instrucci n especifica el formato de dato S especifica coma flotante en binario simple Caracter sticas generales del procesador MIPS R4000 P g 38 Simulador de instrucciones del microprocesador MIPS R 4000 precisi n D especifica coma flotante en binario doble precisi n W especifica coma fija en binario de 32 bits y L especifica coma fija en binario de 64 bits En las siguientes tablas muestran el set de instrucciones de coma flotante Instrucciones de Carga Movimiento y Almacenamiento de datos OpCode Descripci n LWC1 Load Word to FPU SWCI1 Store Word from FPU LDC1 Load Doubleword to FPU SDC1 St
353. viscoc a cero for 3 0 3 lt 16 3 Se llama as porque contiene el divisor y el diviscoc i 3 0 cociente de la divisitn Ap ndice II C digo fuente del simulador P g 225 Simulador de instrucciones del microprocesador MIPS R4000 Cogemos el dividendo for i 0 i lt 8 1 1 temp dividendo0 lt lt 4 i 0 4 8 12 16 dividres 0 i temp gt gt 28 28 siempre for i 8 i lt 16 1 temp dividendo lt lt 4 1 8 0 4 8 12 16 dividres 0 i temp gt gt 28 28 siempre Cogemos el divisor for i 0 i lt 8 i temp divisor0 lt lt 4 i 0 4 8 12 16 diviscoc 0 i temp gt gt 28 28 siempre for i 8 i lt 16 i temp divisor lt lt 4 i 8 0 4 8 12 16 diviscoc 0 i temp gt gt 28 28 siempre ahora vamos a Calcular a partir de donde acaban los ceros i 0 while dividres 0 i 0 i Buscamos el l1 mite del dividendo 3 0 while diviscoc 0 3 0 J Buscamos el 1 mite del divisor if i 3 arco 15 else if i lt j if dividres 0 i gt diviscoc 0 j arco i 15 j else if dividres 0 i lt diviscoc 0 j arco i 15 j 1 else if dividres 0 i diviscoc 0 3 c 0 while dividres 0 i c diviscoc 0 j c amp amp c lt 16 3 CERA if c 2 arco i 15 j else if dividres 0 i c lt diviscoc 0 j c arco i 15 j 1 else if dividres 0 i c gt diviscoc 0 j c arco 1 15 3 Ap ndi
354. visor En Kernel o 64 bits no se produce DSLLV Doubleword Shift Left Logical Variable El formato de la instrucci n es DSLLV rd rt rs Descripci n de la instrucci n El contenido del registro rt es desplazado a la izquierda el n mero de bits especificado por los seis bits de menor peso que contiene el registro rs insertando ceros en los bits de menor peso El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s lt GPR trs Is o GPR rd GPR rt 63 s o0 o Excepciones Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 124 Simulador de instrucciones del microprocesador MIPS R4000 Reserved Instruction exception En modo 32 bit DSLL32 Doubleword Shift Left Logical 32 El formato de la instrucci n es DSLL32 rd rt sa Descripci n de la instrucci n El contenido del registro rt es desplazado a la izquierda 32 sa bits instertando ceros in los bits de orden bajo El resultado se guarda en el registro rd Esta operaci n se define solo para modo de operaci n de 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una reserved instruction exception Operaci n 64 s E 1 sa GPR rd lt GPR rt 63 s o0 0 Excepciones Reserved instruction exception En
355. word Subtract El formato de la instrucci n es DSUB rd rs rt Descripci n de la instrucci n Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 129 Simulador de instrucciones del microprocesador MIPS R4000 El contenido del registro rt se resta del contenido del registro rs para formar un resultado que se guarda en el registro rd Ocurre una Integer overflow exception si se produce un desbordamiento en complemento a dos El registro destino rd no se modifica cuando ocurre esta excepci n Esta operaci n est definida solo para modo de operaci n en 64 bits La ejecuci n de esta instrucci n en modo 32 bits causa una Reserved instruction exception Operaci n 64 GPR rd lt GPR rs GPR rt Excepciones Integer overflow exception Reserved instruction exception En modo 32 bits DSUBU Doubleword Subtract Unsigned El formato de la instrucci n es DSUBU rd rs rt Descripci n de la instrucci n El contenido del registro rt se resta del contenido del registro rs para formar un resultado que se guarda en el registro rd La nica diferencia entre esta instrucci n y la instrucci n DSUB es que DSUBU nunca causa desbordamiento No ocurre nunca una Integer overflow exception Ap ndice I Descripci n de las instrucciones implementadas en el simulador P g 130 Simulador de instrucciones del microprocesador MIPS R4000 Esta operaci n
356. xception Reserved instruction exception Si modo kernel no s jecuta excepcion gotoxy 30 23 printf Reserved Instr exception else if Estado UX 1 Estado KSU 0 Para 64 bits O KERNEL if dest0 0 dest0 0 amp amp destino gt 65535 destino lt 0 Si se sale gotoxy 30 23 printf Direccitn fuera de rango else if destino 8 0 Si no es m ltiplo de ocho General_Exception Error de direccionamiento gotoxy 30 23 printf Address Error exception else Si no se sale del rango de direcc y no se produce error de direcc fseek pf destino SEEK SET Nos situamos en el fichero de memoria for i 0 i lt 4 i if Estado RE 0 Si es little endian j 3 1 Ap ndice II C digo fuente del simulador P g 317 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado RE 1 Si es big endian j i if fwrite amp doble0 j sizeof UCHAR 1 pf 0 Escribimos doble0 Error Error al acceder a memoria for i 0 1 lt 4 i if Estado RE 0 Si es little endian j 3 i else if Estado RE 1 Si es big endian j i if fwrite amp doble1 j sizeof UCHAR 1 p 0 Escribimos doblel Error Error al acceder a memoria Fin de la instruccitn SD void SDL ULONG instruccion
357. y se compara con el contenido del registro rs Considerando ambas cantidades como enteros sin signo si el contenido del registro rs es mayor o igual que el dato inmediato extendido ocurre una Trap Exception UCHAR rs Para coger el nfmero de registro rs ULONG inmediato inme0 auxi regrs Variables sin signo rs Campo RS instruccion Cogemos el campo rs de la instrucci tn regrs rpgl rs 11 En regrs metemos la parte baja del registro rs Ap ndice II C digo fuente del simulador P g 271 Simulador de instrucciones del microprocesador MIPS R4000 inmediato instruccion Ox0000FFFF Cogemos el campo inmediato auxi inmediato gt gt 15 En auxi metemos el dato inmediato despl 15 bits drcha if auxi 0 Si auxi es distinto de cero inmediato inmediato 0xFFFF0000 Hacemos extensitn de signo con unos inme0 0xFFFFFFFF Ponemos la parte alta de dato inmediato todo a unos else if auxi 0 Si auxi es igual a cero inme0 0x00000000 Ponemos la parte alta de dato inmediato todo a ceros if Estado UX 0 Para 32 bits if regrs gt inmediato regrs inmediato Si es mayor o igual General Exception Trap exception gotoxy 30 23 printf 1 Trap exception else if Estado UX 1 Para 64 bits if rpg rs 0 0 inme0 0 Si la parte alta es distinta de cero if rpg rs 0 inme0 Si las dos partes a
358. z destino 0x00000003 Cogemos el desplazamiento a partir del limite destino destino amp OxFFFFFFFC Cogemos el l mite de la palabra if Estado UX 0 Para 32 bits if destino gt 65535 destino lt 0 Si se sale del 1 mite gotoxy 30 23 printf Direccitn fuera de rango else Si no se sale del limite fseek pf destino SEEK_SET Nos situamos en el fichero destino for i 0 i lt 4 i if Estado RE 0 Si es little endian j 3 1 else if Estado RE 1 Si es big endian j i if fread 8 dato 3j sizeof UCHAR 1 pf 0 Cogemos 4 bytes Error Error al acceder a memoria auxi chartolong dato Lo pasamos a long y lo metemos en auxi if Estado RE 0 Si es little endian auxi auxi lt lt 3 desplaz 8 Desplazamos Ap ndice II C digo fuente del simulador P g 291 Simulador de instrucciones del microprocesador MIPS R4000 else if Estado RE 1 Si es Big endian auxi auxi lt lt desplaz 8 Desplazamos if desplaz 0 Si desplazamiento es igual a cero if Estado RE 1 rpg rt 1 auxi En reg rt metemos auxi else if Estado RE 0 Si es little endian rpg rt 1 rpeg rt 1 amp Ox00FFFFFF hacemos and con parte baja rpg rt 1 reg rt 1 auxi Hacemos or con auxi else if desplaz 1 Si desplazamiento es
Download Pdf Manuals
Related Search
Related Contents
Tappin Roots 100518066 Use and Care Manual V7 2GB DDR3 1066 MHz SO-DIMM PC3-8500 Notebook Memory Module manuel d`utilisation des amortisseurs float mxr Copyright © All rights reserved.