mokjomjopi
description
Transcript of mokjomjopi
-
Quadern de laboratoriEstructura de Computadors
Emilio CastilloJos Mara CelaMontse FernndezDavid LpezJoan Manuel ParcerisaAngel ToribioRubn TousJordi TubellaGladys Utrera
Departament dArquitectura de ComputadorsFacultat dInformtica de BarcelonaQuadrimestre de Primavera - Curs 2014/15Aquest document es troba sota una llicncia Creative Commons
-
Licencia Creative CommonsEsta obra est bajo una licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 Espaa de Creative Commons. Para ver una copia de esta licencia, visite
http://creativecommons.org/licenses/by-nc-sa/2.5/es/
o envie una carta a
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Usted es libre de: copiar, distribuir y comunicar pblicamente la obra hacer obras derivadas
Bajo las condiciones siguientes: Reconocimiento. Debe reconocer los crditos de la obra de la manera especificada por el autor
o el licenciador (pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra).
No comercial. No puede utilizar esta obra para fines comerciales. Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una obra derivada,
slo puede distribuir la obra generada bajo una licencia idntica a sta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los trminos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los
derechos de autor Nada en esta licencia menoscaba o restringe los derechos morales del autor.
Advertencia: Este resumen no es una licencia. Es simplemente una referencia prctica para entender el Texto Legal (la licencia completa).Los derechos derivados de usos legtimos u otras limitaciones reconocidas por ley no se ven afectados por lo anterior.
-
- 53 -
Sessi 4: Codificaci en coma flotant
Objectiu: Estudiar la codificaci de nombres en coma flotant, i practicar la manipulaci de
bits (desplaaments i operacions lgiques bit a bit), i la codificaci de subrutines.
Lectura prvia
En aquesta sessi posarem en prctica els coneixements sobre subrutines, sobre
operacions amb camps de bits, i sobre el format de coma flotant per crear un programa en
assemblador que resolgui el segent problema: sigui A un nmero real codificat en un cert
format de coma fixa en base 2, es demana convertir-lo en el nmero real R equivalent,
codificat en el format de coma flotant de simple precisi.
El format de coma fixa (format inicial)
El format de coma fixa del nmero A s el segent: t 32 bits, el bit 31 cont el signe (0
per als positius) i la resta de bits del 30 al 0 representen la magnitud, codificada en el sistema
posicional de base 2, amb 19 bits a lesquerra de la coma (part entera) i 12 bits a la dreta
(part fraccionria)
011123031
,A =
valorimplicit A( ) 1( )A31 Ai 2i 12
i 0=
30
=
S Magnitud, amb part entera i part fraccionria
:
El format de coma flotant IEEE-754 de simple precisi (format final)
El format de coma flotant del nmero R, de simple precisi definit a lestndard IEEE-
754 tamb t 32 bits: el bit 31 cont el signe (0 per als positius); els 23 bits de menys pes
contenen la mantissa, en base 2, fraccionria, normalitzada, amb bit ocult i coma a la dreta
daquest bit; i els restants 8 bits (del 23 al 30) contenen lexponent, un enter codificat en
excs a 127:
022233031
,R =
valorimplicit R( ) 1( )R31 1 Ri 2i 23
i 0=
22
+
2
127 Ri 2i 23
i 23=
30
+
=
S Exponent Mantissa
-
Sessi 4: Codificaci en coma flotant Estructura de Computadors
- 54 -
Enunciats de la sessi
Aquesta sessi es dedicar a escriure el segent programa de conversi de coma fixa a coma
flotant, seguint les instruccions del text. Els formats de coma fixa i de coma flotant en simple
precisi estan explicats a la Lectura Prvia.
int signe;int exponent;int mantissa;int cfixa = 0x87D18A00; // nmero inicial, en coma fixafloat cflotant; // resultat final, en coma flotant
main() {descompon(cfixa, &signe, &exponent, &mantissa);cflotant = compon(signe, exponent, mantissa);
}
Figura 4.1: Programa en alt nivell que converteix un nmero en coma fixa a coma flotant
El programa de conversi (figura 4.1), sexecuta en dos passos:
Funci descompon. Descompon el nmero en coma fixa en tres parts: signe,
mantissa normalitzada i exponent en excs a 127.
Funci compon. Compon les tres parts, signe, mantissa i exponent, en un nic nmero
en coma flotant en simple precisi.
Per emmagatzemar les tres parts obtingudes al primer pas definirem tres enters de mida
word: signe, exponent i mantissa. En les activitats segents es detalla el funcionament de
les dues subrutines.
-
- 55 -
Estructura de Computadors Sessi 4: Codificaci en coma flotant
Activitat 4.A: Funci descompon
La funci descompon (veure figura 4.2) rep com a parmetres un nombre en coma fixa cf i
tres enters passats per referncia. La funci extrau de cf els segents valors: el signe (0 o 1);
mantissa normalitzada i sense bit ocult (23 bits); i exponent en excs a 127 (8 bits), i els
guarda als enters signe, mantissa i exponent.
Figura 4.2: Codi en alt nivell de la subrutina descompon
void descompon(int cf, int *s, int *e, int *m) {int exp;
*s = (cf < 0); // si s negatiu val 1, sin 0cf = cf = 0) { // normalitza i calcula exponent
cf = cf > 8) & 0x7FFFFF; // alinear i eliminar bit ocultexp = exp + 127; // codificar en excs a 127
}*e = exp; // guarda exponent resultant*m = cf; // guarda mantissa resultant
}
Recordem que el nombre en coma fixa es compon de signe (1 bit) i magnitud (31 bits).
Per tant, la primera operaci de la subrutina consisteix a separar el signe de la magnitud: codi-
fica el signe en lenter signe (0 si s positiu, 1 si s negatiu) i lelimina del nombre cf despla-
ant tots els bits 1 posici a lesquerra. Fixat que la coma de la magnitud ara sha desplaat
tamb 1 posici i est situada a la dreta del bit 13:
1121331 0
,0 x 20magnitud = mantissa
A continuaci es comprova si la magnitud val zero (pot ser un +0 o un -0, ja que hem
eliminat el signe). Si la magnitud s zero, codificarem la mantissa cf i lexponent exp com
zero.
Si no s zero, per obtenir la mantissa normalitzada i lexponent corresponent, desplacem
la coma 18 posicions a lesquerra fins a situar-la a la dreta del bit 31. Compte! que els bits no
-
Sessi 4: Codificaci en coma flotant Estructura de Computadors
- 56 -
es desplacen, tan sols hem dajustar el valor inicial de lexponent exp, que en lloc de 0 ser 18:
131 0
,0 x 218magnitud =
30
mantissa
Per normalitzar la mantissa caldr eliminar els zeros inicials que pugui tenir, desplaant
la magnitud repetidament cap a lesquerra fins que el primer bit no nul ocupi la posici 31.
Naturalment, aquest desplaament de la magnitud sense moure la coma equival a un desplaa-
ment a la dreta de la coma, i en conseqncia necessita un ajust de lexponent, restant-li la
mateixa quantitat. Lalgorisme (figura 4.2) consisteix en un bucle on a cada iteraci es despla-
a cf 1 posici a lesquerra i es decrementa lexponent una unitat, fins que el bit ms signifi-
catiu s 1. En aquest punt, podem dir que la mantissa ja est normalitzada i lexponent
calculat. Per exemple, si suposem que aquest bucle itera k vegades, cf i exp queden aix:
1+k31 0
0 x 218-k0 k
magnitud =,1
mantissa
30
A continuaci, la mantissa normalitzada sha de desplaar a la dreta perqu ocupi els 24
bits de menor pes de cf. Per tal que el bit 31 passi a ocupar la posici 23 cal fer un desplaa-
ment a la dreta de 8 posicions.
Desprs hem de deixar en cf una mantissa de sols 23 bits, posant a zero el bit ocult, que
ara ocupa la posici 23, aix com els bits del 23 al 31, fent una and lgica amb la mscara
0x7FFFFF:
31 0
0 ,0
mantissa
23 22
Desprs, a lexponent exp li sumem 127 per codificar-lo en excs a 127.
Finalment, guardem els resultats de cf i exp als enters mantissa i exponent.
-
- 57 -
Estructura de Computadors Sessi 4: Codificaci en coma flotant
Completa lexercici 4.1 abans de continuar:
Exercici 4.1: Tradueix a assemblador MIPS la subrutina descompon.
descompon:
Al fitxer s4a.s estan ja programats el programa principal (main) i les declaracions de
variables globals en assemblador MIPS. Afegeix-hi el codi de lexercici 4.1. A continuaci,
carregal al simulador, assemblal i executal.
Comprova que al final de lexecuci del programa signe = 1, que exponent=
0x0000008D (141 en decimal), i que matissa = 0x007A3140.
Activitat 4.B: Funci compon
Figura 4.3: Codi en alt nivell de la subrutina compon
float compon(int signe, int exponent, int mantissa){ return (signe
-
Sessi 4: Codificaci en coma flotant Estructura de Computadors
- 58 -
Completa lexercici 4.2 abans de continuar:
Exercici 4.2: Programa en assemblador la subrutina compon.
compon:
Afegeix el codi de lexercici 4.2 al fitxer s4a.s. Veurs que el fitxer cont una subrutina
compon provisional amb 1 sola instrucci, escrita per permetre fer proves a lactivitat 4.A:
esborra-la. A continuaci, assemblal i executal.
Comprova que el nmero resultant, en coma flotant, val cflotant=0xC6FA3140. Tamb
pots comprovar el seu valor en decimal en el simulador. De quina manera ho consultars?
Quin s el valor final de cflotant, en decimal, que dna Mars?
Valor decimal de cflotant =
Exercici 4.3: Codifica en coma fixa i en coma flotant (en hexadecimal) els segents nmeros:
Decimalcfixa
(valor inicial)cflotant
(valor final)
0.0 0x 0x
- 0.0 0x 0x
12.75 0x 0x
Completa el segent exercici abans de continuar:
Verifica que el teu programa tamb converteix correctament els nmeros de lexercici
4.3, inicialitzant cfixa amb els valors de la segona columna i observant al simulador si el
resultat en cflotant s el de la tercera columna.
-
- 59 -
Estructura de Computadors Sessi 4: Codificaci en coma flotant
Activitat 4.C: Errors de precisi en la conversi
Un cop llegida la prctica i resolts els anteriors exercicis hauries de ser capa de reflexionar
sobre els errors de precisi que es poden cometre fent la conversi proposada, i respondre les
preguntes del segent exercici:
Exercici 4.4: Contesta les segents preguntes
1) Quina condici ha de complir el valor inicial de cfixa perqu es produeixi prdua de precisi en la conversi que proposa aquesta prctica?
2) Indica un valor de cfixa per al qual es produiria prdua de precisi al convertir-lo, i el corresponent valor en coma flotant:
3) En quina sentncia concreta del programa en alt nivell es pot produir la prdua de precisi?
4) Quin dels 4 modes darrodoniment que coneixes est portant a la prctica aquest programa de conversi?
5) El format de coma fixa explicat en aquesta prctica permet codificar un rang de valors bastant limitat. Indica un nmero positiu que estigui DINS el rang del format de coma flotant de simple precisi (en decimal) per que estigui FORA del rang del format de coma fixa. Indica tamb quin s el MENOR nmero potncia de 2 que compleixi aquesta condici.
cfixa cflotant
0x 0x
-
Sessi 4: Codificaci en coma flotant Estructura de Computadors
- 60 -
Portada-Quadern-de-LaboratoriQuadern-de-laboratori-sessio4-sp