我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux中x64和x86有哪些区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux中x64和x86有哪些区别

这篇文章主要为大家展示了“linux中x64和x86有哪些区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中x64和x86有哪些区别”这篇文章吧。

区别:1、寄存器分配不同,x64有16个寄存器,x86只有8个寄存器;2、汇编指令不同;3、函数调用不同;4、参数传递不同;5、栈帧不同,x64没有栈帧的指针,而x86用ebp作为栈帧指针;6、x64的运算速度比x86高。

本教程操作环境:linux5.9.8系统、Dell G3电脑。

Linux x86(32位)和x64(64位)的区别

0x01:寄存器分配的不同

linux中x64和x86有哪些区别

(1)64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位,而剩下的寄存器名则是从r8 - r15,其低位分别用d、w、b指定长度;
(2)32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数,rax作为返回值;
(3)64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;
(4)64位支持一些形式的以PC相关的寻址,而32位只有在jmp的时候才会用到这种寻址方式;

0x02:(新增)汇编指令的不同

linux中x64和x86有哪些区别

mov、push、pop扩展了movq系列的mov和pushq以及popq用来操作quad word。

补充:

(1)movabsq不是32位的扩展,是纯新增的指令。用来将一个64位的字面值直接存到一个64位寄存器中。因为movq只能将32位的值存入,所以新增了这样一条指令

(2)64位的汇编代码在ret之前可能会加一句rep,这里的rep没有实际意义,只是出于AMD处理器的原因,避免jmp所到达的地方直接就是ret,这样会使得处理器运行更快一些

0x03:函数调用的不同

(1)x_64的参数通过寄存器传递(见前文);
callq 在栈里存放一个8位的返回地址;
(2)许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;
(3)函数可以获取到栈至多128字节的空间。这样函数就可以在不更改栈指针的情况下在栈上存储信息(也就是说,可以提前用rsp以下的128字节空间,这段空间被称为red zone,在x86-64里,时刻可用);
(4)不再有栈帧指针,现在栈的位置和栈指针相关。大多数函数在调用的一开始就分配全部所需栈空间,之后保持栈指针不改变;
(5)一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。

0x04:参数传递的不同

(1)6个寄存器用来传递参数(见前文);

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

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

0x05:栈帧的不同

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

(1)本地变量太多,寄存器不够;
(2)一些本地变量是数组或结构体;
(3)函数使用了取地址操作符来计算一个本地变量的地址;
(4)函数必须用栈传送一些参数给另外一个函数;
(5)函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复);

但是现在的栈帧经常是固定大小的,在函数调用的最开始就被设定,在整个调用期间,栈顶指针保持不变,这样就可以通过对其再加上偏移量来对相应的值进行操作,于是EBP就不再需要作为栈帧指针了。虽然很多时候我们认为没有“栈帧”,但是每次函数调用都一定有一个返回地址被压栈,我们可以也认为这一个地址就是一个“栈帧”,因为它也保存了调用者的状态。

0x06:运算速度不同

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

以上是“linux中x64和x86有哪些区别”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux中x64和x86有哪些区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux中x64和x86有哪些区别

这篇文章主要为大家展示了“linux中x64和x86有哪些区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中x64和x86有哪些区别”这篇文章吧。区别:1、寄存器分配不同,x64有1
2023-06-26

linux中at和crontab有哪些区别

这篇“linux中at和crontab有哪些区别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux中at和cronta
2023-07-02

linux中ext4和ext3有哪些区别

这篇文章主要讲解了“linux中ext4和ext3有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中ext4和ext3有哪些区别”吧!区别:1、ext3有32000个子目录
2023-06-30

linux中awk和sed有哪些区别

这篇文章主要讲解了“linux中awk和sed有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中awk和sed有哪些区别”吧!linux中awk和sed的区别:1、sed是
2023-06-30

linux中ex3和ex4有哪些区别

这篇文章主要介绍“linux中ex3和ex4有哪些区别”,在日常操作中,相信很多人在linux中ex3和ex4有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux中ex3和ex4有哪些区别”的疑
2023-06-29

linux中poll和select有哪些区别

这篇文章主要讲解了“linux中poll和select有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中poll和select有哪些区别”吧!linux中poll和sele
2023-07-02

linux中xfs和ext4有哪些区别

本篇内容主要讲解“linux中xfs和ext4有哪些区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux中xfs和ext4有哪些区别”吧!区别:1、单个文件的大小,EXT4可以是16GB
2023-06-30

linux中sed和awk有哪些区别

这篇文章主要讲解了“linux中sed和awk有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中sed和awk有哪些区别”吧!区别:1、sed是流编辑器,而awk是文本格式
2023-06-30

linux中fork和exec有哪些区别

这篇文章主要介绍“linux中fork和exec有哪些区别”,在日常操作中,相信很多人在linux中fork和exec有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux中fork和exec有哪
2023-06-30

linux中sudo和su有哪些区别

本篇内容介绍了“linux中sudo和su有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、sudo是以root用户方式执行
2023-06-30

linux中vsz和rss有哪些区别

这篇文章主要介绍“linux中vsz和rss有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux中vsz和rss有哪些区别”文章能帮助大家解决问题。linux中vsz和rss的区别:1
2023-07-02

freebsd和linux有哪些区别

这篇文章主要介绍“freebsd和linux有哪些区别”,在日常操作中,相信很多人在freebsd和linux有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”freebsd和linux有哪些区别”的疑
2023-06-22

linux和macos有哪些区别

这篇文章将为大家详细讲解有关linux和macos有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区别:1、linux是开源的免费系统,可以在很多种设备上运行也允许开发者二次开发,而macos是苹
2023-06-26

nuttx和linux有哪些区别

这篇“nuttx和linux有哪些区别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nuttx和linux有哪些区别”文章吧
2023-07-02

linux和ubuntu有哪些区别

这篇文章主要为大家展示了“linux和ubuntu有哪些区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux和ubuntu有哪些区别”这篇文章吧。linux和ubuntu的区别:1、li
2023-06-22

linux中vi和cat的区别有哪些

本篇内容主要讲解“linux中vi和cat的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux中vi和cat的区别有哪些”吧!vi和cat的区别:1、cat是一个文本打印的命令,
2023-06-30

linux中buffer和cache的区别有哪些

本文小编为大家详细介绍“linux中buffer和cache的区别有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux中buffer和cache的区别有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-29

php在windows和linux中有哪些区别

今天小编给大家分享一下php在windows和linux中有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。php在w
2023-06-30

FreeBSD和Linux的区别有哪些

小编给大家分享一下FreeBSD和Linux的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!FreeBSD描述历史FreeBSD的***个版本发布于19
2023-06-16

编程热搜

目录