Print a Floating Point Value in ARM64 assembly
==============================================
I've found that calling the function "printf" to print a
floating point value from an Assembly program is not trivial.
First, to use the specifier "%f", you need to have a double-precision
value in the corresponding operand (a register).
The second thing, I've found is that an immediate value passed to
a register is of length 16 bits.
So, if you try a 32-bit or more numbers using the 'mov' or 'fmov'
commabd you will get:

* For an integer:

 immediate value cannot be moved by a single instruction

* For a floating-point number:

 invalid floating point constant at operand 2

An immediate floating number should be what the IEEE 754 standard defines
as half-precision value.

So, you'll need to load the value from an address instead using 'ldr'.

Searching the web, I've found in a Reddit discussion that the site
https://godbolt.org can help you generate Assembly code from C.
A useful command I found if you want to load a page and your CPU Support it
is "adrp"[1].
Yes, you can find amazing things on ".org" sites!

You can learn even more about the architecture from the architecture guide [2]

In my program [3], I use "ldr" to simply get the number from an address.

Nom let us talk a little bit about the IEEE 754 standard for double precision:

Double-precision numbers are represented by 64-bit fields:
* The highest bit is the sign (0 for positive, 1 for negative), where is zero?
 well, according to IEEE 745, there are +0 and -0.

* Bits 52 thru 62 - the exponent. Holds a value between 0 and 7ffh.

* Bits 0 thru 51 - are the mantissa.

The rules:
1. When both the mantissa and the exponent are zeros, the real value
  is +0 or -0 depending on the sign.

2. When the exponent is zero, the real value is mantisa / 2^52.

3. When the exponent is 7ffh and the mantissa is zero, the value is
  +infinity or -infinity depending on the sign.

4. When the exponent is 7ffh and the mantissa is non-zero, the value
  is NaN - not a number, but a computation error.

5. Otherwise, the real value is (1 + mantissa/2^52)*2^(exponent-3ff)

For example, when the requested number is 41.3:

1. 41.3 is a positive number, thus the sign digit is 0
2. 41.3 is greater than or equal to 32, and smaller than 64, thus
  the exponent is 5+3ffh=404h
3. 41.3 / 32 = 1.290625
4. Let us subtract 1, the result is 0.290625
5. Multiply by 2^52 and convert to hexadecimal:
  the mantissa is 4a66666666666h.
6. From steps 1,2 and 5, we get the result:
  4044a66666666666


[1] https://developer.arm.com/documentation/ddi0602/2022-09/Base-Instructions?lang=en

[2] https://developer.arm.com/documentation/102374/latest/

[3] gopher://zaibatsu.circumlunar.space/1/~zaphodb/phlog/callprintf.s