x86与x64的区别

x86与x64的区别... x86与x64的区别 展开
 我来答
老男孩教育
2022-07-26 · 百度认证:北京一天天教育科技有限公司官方账号,教育领域创作者
老男孩教育
专注于Linux高级运维、Python开发、大数据培训,为您分享行业前沿的技术,有效的学习方法和有价值的学习资料。
向TA提问
展开全部

一、寄存器分配的不同

64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;

32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;

64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;

二、函数调用的不同

x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;

许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;

一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。

三、参数传递的不同

6个寄存器用来传递参数;

剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);

调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;

四、栈帧的不同

很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:

a. 本地变量太多,寄存器不够;

b. 一些本地变量是数组或结构体;

c. 函数使用了取地址操作符来计算一个本地变量的地址;

d. 函数必须用栈传送一些参数给另外一个函数;

e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)

五、运算速度的不同

64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。

名片
2024-10-28 广告
正版Hyperworks软件多少钱,购买正版Hyperworks软件,免费咨询Altair Hyperworks软件中国区网站首页,HyperWorks软件提供了完整的CAE有限元分析解决方案,免费试用和咨询官网。... 点击进入详情页
本回答由名片提供
别伤心a
高粉答主

2017-09-03 · 醉心答题,欢迎关注
知道顶级答主
回答量:10.3万
采纳率:88%
帮助的人:1.1亿
展开全部
实际上X86架构是基础架构,X64架构是基于X86的,也可称为X86-64架构。所以只是称呼上不一样,一般人叫X86架构,有64位和32位之分,
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式