x86_64 汇编指令
- add 加法
add rax,rbx
rax = rax + rbx - sub 减法
sub rax,rbx
rax = rax - rbx - imul 乘法
imul rax,rbx ; rax = rax * rbx
imul rbx ;
只有一个操作数时另一个操作数是rax , 高位保存在rdx,低位保存在rax
- div 除法
div rcx;
rax = rdx / rcx , rdx = rdx % rcx
被除数在rdx和rax,高位和低位。
除数是指定操作数
商保存在 rax
余数保存在 rdx
-
浮点数的运算完全不同于整数,从寄存器到指令,都有一套独特的处理流程,浮点单元也称作x87 FPU。
-
浮点数的存储方式
类型 | 长度 | 符号位 | 指数位 | 小数部分 |
---|---|---|---|---|
float 在内存中的存储方式
| 1位符号 | 8位指数 | 23位尾数
我们来梳理一下 float 18.567在计算机中的存储是 1100253495
转成二进制后是
0 10000011 00101001000100100110111
第一位为0代表是正数,1为负数
10000011 的十进制是 131, 由于指数部分有正负之分,所以以127为界限,即真实的指数部分是 131 - 127 = 4
小数部分是 00101001000100100110111
加 1. 得到
1.00101001000100100110111
扩大 2^23 得到 100101001000100100110111
转成十进制是 9734455
缩小 2^23在乘以指数部分2^4也就等于是缩小 2^19
9734455 / 2^19 = 18.566999435424805
约等于 18.567 ,所以浮点数是不精确的。
关于指数的界限
float 类型 2^8 -1
double 类型 2^11 -1
也就是2的指数位数次幂 - 1