format for : 64 bit ("double") float: (sign)(11 bit exponent)(52 bit mantissa) 1.0= 0x3FF0000000000000 = 00 ten 1 rest 0 2.0= 0x4000000000000000 = 0 one 1 rest 0 0.5= 0x3FE0000000000000 = 00 nine 1 rest 0 find sqrt of a number stored in RAM find 3 mistakes! load r0 r1 1101x01 load opcode #r1 holds S address that holds number mov r1,r2 0011x12 mov opcode sub r2,r0,r2 0111202 sub opcode 2^52 clr r3 0001xx3 clr opcode inc r3 r3 0011x33 inc opcode asr r2 r3 r2 0111232 asr opcode add r2 r0 r2 1111202 add opcode #r2 holds the first approx: x 2^61 mov r0 r5 1011x05 mov opcode 2.0 mov r0 r6 1011x06 mov opcode small mov r0 r9 1011x09 mov opcode 2 mov rF rE 0011xFE mov opcode #current PC=rF saved to rE add r9 rE rE 01119EE add opcode #note (rE) is address of following instruction mov r2 r4 0011x24 mov opcode #r4 is the starting x fdiv r1 r2 r3 0111123 fdiv opcode fadd r2 r3 r2 0111232 fadd opcode fdiv r2 r5 r2 0111252 fdiv opcode #r2 is the updated x fsub r2 r4 r4 0111232 fsub opcode fdiv r4 r2 r4 0111123 fdiv opcode fabs r4 r4 0011044 fabs opcode fcmp r4 r6 011046x 2 fcmp opcode = fsub opcode bpl rE 0011xEF conditional version of mov rE rF opcode mov r0 rE 1011x0E mov opcode address to output x store r2 rE 0110CEx store opcode halt example: (all iterations shown) take sqrt of 2. bit pattern of 2.=4000000000000000 (hex) bit pattern of x0=3FF8000000000000 (hex) 1.5000000000000000 1.4166666666666665 1.4142156862745097 1.4142135623746899 1.4142135623730949 bit pattern of xN=3FF6A09E667F3BCC (hex) 1.4142135623730951 (actual) take sqrt of pi 3.14159265358979323d0 bit pattern of pi= 400921FB54442D18 (hex) bit pattern of x0= 3FFC90FDAA22168C (hex) 1.7853981633974483 1.7725007746756094 1.7724538515266270 1.7724538509055159 bit pattern of xN=3FFC5BF891B4EF6A (hex) 1.7724538509055159 (actual)