Estructura de Computadores Práctica de ensamblador II Universidad Carlos III Universidad Carlos III de Madrid Grupo de Arquitectura de Computadores ESTRUCTURA DE COMPUTADORES Práctica de Programación en el ensamblador de MIPS II. Guía del coprocesador: Resumen de instrucciones en coma flotante del MIPS Ingeniería en Informática ii_ec@arcos.inf.uc3m.es Curso 2008/2009 Resumen de instrucciones en coma flotante del MIPS 1 Estructura de Computadores Práctica de ensamblador II Universidad Carlos III Indice 1. Resumen de instrucción en coma flotante del MIPS_____________________ 3 2. Instrucciones de carga y movimiento de datos en coma flotante _________ 3 3. Instrucciones aritméticas en coma flotante_____________________________ 5 4. Instrucciones de redondeo en coma flotante y cambio de representación 6 5. Instrucciones de comparación en coma flotante ________________________ 8 6. Instrucciones de bifurcación de coma flotante _________________________ 9 Resumen de instrucciones en coma flotante del MIPS 2 Estructura de Computadores Práctica de ensamblador II Universidad Carlos III 1. Resumen de instrucción en coma flotante del MIPS El coprocesador 1 es una unidad de coma flotante. Para trabajar con dicha unidad se hace necesario llevar y traer los datos del banco de registros general al banco de registros de la unidad coma flotante. Las instrucciones de simple precisión pueden utilizar cualquiera de los 32 registros de simple precisión del coprocesador ($f0 a $f31). Las instrucciones de doble precisión pueden utilizar cualquiera de los 16 registros de doble precisión del coprocesador ($f0, $f2,..., $f30). En cuanto a las instrucciones de transferencia en doble precisión entre el coprocesador y el banco general de registros, éstas siempre usan el registro especificado del banco general y el siguiente (por ejemplo, si se especifica $t0, se usa el par de registros $t0,$t1). Así estas instrucciones tienen dos versiones, según su sufijo: • • .s : trabaja con números en coma flotante de simple precisión (floats). .d : trabaja con números en coma flotante de doble precisión (doubles). 2. Instrucciones de carga y movimiento de datos en coma flotante li.s rd, inm Carga inmediato en simple precisión. Carga el valor inmediato inm en el registro rd. li.d rd, inm Carga inmediato en doble precisión. Carga el valor inmediato inm en el registro rd. l.s rd, dir Carga valor en simple precisión. Carga el valor almacenado en la posición de memoria dir en el registro rd. l.d rd, dir Carga valor en doble precisión. Carga el valor almacenado en la posición de memoria dir en el registro rd. lwc1 rd, dir Carga el valor almacenado a partir de la posición de memoria dir en el registro de simple precisión del coprocesador rd. ldc1 rd, dir Resumen de instrucciones en coma flotante del MIPS 3 Estructura de Computadores Práctica de ensamblador II Universidad Carlos III Carga el valor almacenado a partir de la posición de memoria dir en el registro de 64 bits rd. mtc1 rd, ro Mueve a coprocesador 1. Copia el valor del registro general rd en el registro de la unidad de coma flotante ro. mtc1.d rd, ro Mueve double a coprocesador 1. Copia el valor del registro general rd en el registro de la unidad de coma flotante ro. s.s ro, dir Almacena a partir de la dirección dir el valor que se encuentra en el registro ro. s.d ro, dir Almacena a partir de la dirección dir el valor que se encuentra en el registro ro. (de 64 bits) swc1 ro, dir Almacena a partir de la dirección dir el valor que se encuentra en el registro de 32 bits ro. sdc1 ro, dir Almacena a partir de la dirección dir el valor que se encuentra en el registro de 64 bits ro. mfc1 rd, ro Copia el valor del registro de la unidad de coma flotante ro de simple precisión en el registro general rd. mfc1.d rd Copia el valor del registro de la unidad de coma flotante ro de doble precisión en el registro general rd y el siguiente consecutivo. mov.s rd, ro Resumen de instrucciones en coma flotante del MIPS 4 Estructura de Computadores Práctica de ensamblador II Universidad Carlos III Mueve valor en simple precisión. Copia el valor del registro ro en el registro rd. Ambos registros son registros de la unidad de coma flotante. mov.d rd, ro Mueve valor en doble precisión. Copia el valor del registro ro en el registro rd. Ambos registros son registros de la unidad de coma flotante 3. Instrucciones aritméticas en coma flotante neg.s rd, ro Niega valor en simple precisión neg.d rd, ro Niega valor en doble precisión sqrt.s rd, ro Raiz cuadrada de valor en simple precisión sqrt.d rd, ro Raiz cuadrada de valor en doble precisión abs.s rd, ro Valor absoluto en simple precisión abs.d rd, ro Valor absoluto en doble precisión add.s rd, ro1, ro2 Suma valores en simple precisión. Pone en el registro rd la suma los valores de los registros ro1 y ro2. add.d rd, ro1, ro2 Suma valores en doble precisión. Pone en el registro rd la suma los valores de los registros ro1 y ro2. Resumen de instrucciones en coma flotante del MIPS 5 Estructura de Computadores Práctica de ensamblador II Universidad Carlos III sub.s rd, ro1, ro2 Resta valores en simple precisión sub.d rd, ro1, ro2 Resta valores en doble precisión mul.s rd, ro1, ro2 Multiplica valores en simple precisión mul.d rd, ro1, ro2 Multiplica valores en doble precisión div.s rd, ro1, ro2 Divide valores en simple precisión div.d rd, ro1, ro2 Divide valores en doble precisión 4. Instrucciones de redondeo en coma flotante y cambio de representación Las conversiones de valores en coma flotante permiten cambiar el formato de representación entre simple precisión y doble precisión a coma fija (como la representación de los registros de propósito general, complemento a dos). Es decir permiten cambiar la representación en coma flotante a la representación usada en los registros de propósito general. Además también se incluyen en esta categoría las operaciones que permiten llevar a cabo los cuatro tipos de redondeo definidos por el estándar IEEE 754. Así dichas operaciones trabajan con registros $fn, pero cambian su representación (de coma flotante a complemento a dos). Es decir para todas las instrucciones tanto rd como ro son registros del coprocesador ($fn). Una vez realizadas las conversiones de representación se puede realizar el movimiento de datos entro los procesadores. round.w.s rd, ro Resumen de instrucciones en coma flotante del MIPS 6 Estructura de Computadores Práctica de ensamblador II Universidad Carlos III Redondea valor en simple precisión a palabra en punto fijo. Redondea el valor del registro ro hacia el entero más cercano y lo almacena en el registro rd (en complemento a dos). round.w.d rd, ro Redeondea valor en doble precisión a palabra en punto fijo. Redondea el valor del registro ro hacia el entero más cercano y lo almacena en el registro rd (en complemento a dos). ceil.w.s rd, ro Redondea hacia arriba el valor en simple precisión a palabra en punto fijojo ceil.w.d rd, ro Redondea hacia arriba valor en doble precisión a palabra en punto fijo floor.w.s rd, ro Redondea hacia abajo valor en simple precisión a palabra en punto fijo floor.w.d rd, ro Redondea hacia abajo valor en doble precisión a palabra en punto fijo. trunc.w.s rd, ro Trunca valor en simple precisión a palabra en punto fijo trunc.w.d rd, ro Trunca valor en doble precisión a palabra en punto fijo Las siguientes instrucciones realizan la conversión del valor del registro ro y lo almacena en el registro rd. Dichas instrucciones cambian la representación del valor almacenado en rd y lo almacenan en r0. cvt.w.s rd, ro Convierte valor en simple precisión a palabra en punto fijo. Resumen de instrucciones en coma flotante del MIPS 7 Estructura de Computadores Práctica de ensamblador II Universidad Carlos III cvt.w.d rd, ro Convierte valor en doble precisión a palabra en punto fijo. cvt.s.w rd, ro Convierte valor en punto fijo a simple precisión. cvt.d.w rd, ro Convierte valor en punto fijo a doble precisión. cvt.s.d rd, ro Convierte valor en doble precisión a simple precisión cvt.d.s rd, ro Convierte valor en simple precisión a doble precisión 5. Instrucciones de comparación en coma flotante c.cond.s ro1, ro2 Comparación de valores en simple precisión c.cond.d ro1, ro2 Comparación de valores en doble precisión Compara los registro ro1 y ro2 de la unidad de coma flotante. Activa el biestable de condición de la unidad de coma flotante si los valores de los registros cumplen la condición. En caso de no cumplirse lo desactiva. El valor del biestable de condición se puede consultar mediante las instrucciones bc1t, bc1tl, bc1f o bc1fl. El valor cond puede tomar los siguientes valores: f un eq ueq olt ult ole ule sf Falso Desordenado Igual a Desordenado o igual Menor ordenado Desordenado o menor Menor o igual ordenado Desordenado o menor o igual Falso con señal Resumen de instrucciones en coma flotante del MIPS 8 Estructura de Computadores Práctica de ensamblador II ngle seq ngl lt nge le ngt Universidad Carlos III Ni mayor ni igual ni menor Igual con señal Ni mayor ni menor Menor Ni mayor ni igual Menor o igual No mayor 6. Instrucciones de bifurcación de coma flotante Es posible realizar una bifurcación basada en el valor del biestable de condición de la unidad de coma flotante. Dicho biestable se modifica mediante las instrucciones de comparación en coma flotante. bc1t etiq Bifurca si coma flotante cierto. Salta, si está activado (bc1t) o desactivado (bc1f) el biestable de condición del coprocesador 1 (la unidad de coma flotante), a la instrucción marcada con etiq. bc1f etiq Bifurca si coma flotante falso. Salta, si está activado (bc1t) o desactivado (bc1f) el biestable de condición del coprocesador 1 (la unidad de coma flotante), a la instrucción marcada con etiq. Resumen de instrucciones en coma flotante del MIPS 9