百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

我今天才知道INT64转double需要调用函数转换

toyiye 2024-08-22 02:20 5 浏览 0 评论

测试环境:Windows平台,vs2019,Release关闭优化

x86下

8字节数值转成double是调用函数来转换, 无符号调用一个函数, 有符号调用另一个函数

8字节数值乘法除法运算, 也是调用函数来实现, 有符合和无符号都调用同一个函数

位运算, 加减法都不是调用函数

其中除法最复杂, 一共70行汇编, 167个字节才能实现

x64下都是不是调用函数, 直接编译成对应的汇编

图1到图5,都是x86下编译的结果

图2: 8字节无符号转double(符号写成符合了,不要在意这些细节)

图3: 8字节有符号转double

图4: 8字节乘法,有符号无符号都一样

图5: 8字节除法,有符号无符号都一样

图6: x64下的截图,x64不是调用函数实现




完整除法汇编代码

0045B040  push edi  
0045B041  push esi  
0045B042  push ebx  
0045B043  xor  edi,edi  
0045B045  mov  eax,dword ptr [esp+14h]  
0045B049  or   eax,eax  
0045B04B  jge  0045B061  
0045B04D  inc  edi  
0045B04E  mov  edx,dword ptr [esp+10h]  
0045B052  neg  eax  
0045B054  neg  edx  
0045B056  sbb  eax,0  
0045B059  mov  dword ptr [esp+14h],eax  
0045B05D  mov  dword ptr [esp+10h],edx  
0045B061  mov  eax,dword ptr [esp+1Ch]  
0045B065  or   eax,eax  
0045B067  jge  0045B07D  
0045B069  inc  edi  
0045B06A  mov  edx,dword ptr [esp+18h]  
0045B06E  neg  eax  
0045B070  neg  edx  
0045B072  sbb  eax,0  
0045B075  mov  dword ptr [esp+1Ch],eax  
0045B079  mov  dword ptr [esp+18h],edx  
0045B07D  or   eax,eax  
0045B07F  jne  0045B099  
0045B081  mov  ecx,dword ptr [esp+18h]  
0045B085  mov  eax,dword ptr [esp+14h]  
0045B089  xor  edx,edx  
0045B08B  div  eax,ecx  
0045B08D  mov  ebx,eax  
0045B08F  mov  eax,dword ptr [esp+10h]  
0045B093  div  eax,ecx  
0045B095  mov  edx,ebx  
0045B097  jmp  0045B0DA  
0045B099  mov  ebx,eax  
0045B09B  mov  ecx,dword ptr [esp+18h]  
0045B09F  mov  edx,dword ptr [esp+14h]  
0045B0A3  mov  eax,dword ptr [esp+10h]  
0045B0A7  shr  ebx,1  
0045B0A9  rcr  ecx,1  
0045B0AB  shr  edx,1  
0045B0AD  rcr  eax,1  
0045B0AF  or   ebx,ebx  
0045B0B1  jne  0045B0A7  
0045B0B3  div  eax,ecx  
0045B0B5  mov  esi,eax  
0045B0B7  mul  eax,dword ptr [esp+1Ch]  
0045B0BB  mov  ecx,eax  
0045B0BD  mov  eax,dword ptr [esp+18h]  
0045B0C1  mul  eax,esi  
0045B0C3  add  edx,ecx  
0045B0C5  jb   0045B0D5  
0045B0C7  cmp  edx,dword ptr [esp+14h]  
0045B0CB  ja   0045B0D5  
0045B0CD  jb   0045B0D6  
0045B0CF  cmp  eax,dword ptr [esp+10h]  
0045B0D3  jbe  0045B0D6  
0045B0D5  dec  esi  
0045B0D6  xor  edx,edx  
0045B0D8  mov  eax,esi  
0045B0DA  dec  edi  
0045B0DB  jne  0045B0E4  
0045B0DD  neg  edx  
0045B0DF  neg  eax  
0045B0E1  sbb  edx,0  
0045B0E4  pop  ebx  
0045B0E5  pop  esi  
0045B0E6  pop  edi  
0045B0E7  ret  10h

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码