一、简介

X86:32位系统,是指操作系统一次性可以处理的位数是32。x86指的是一种cpu的架构,x86架构的特点是cpu的寄存器是32位的。

X64:也可写作X86-64,64位系统,指操作系统一次性可以处理的位数是64。x64架构的特点是cpu的寄存器是64位的。

二、数据类型长度

不同位数OS下的变量类型的长度如下:

32位平台

char         1个字节8位

short        2个字节16位

int            4个字节32位

long         4个字节

long long 8个字节

指针         4个字节

64位平台

char         1个字节

short        2个字节

int            4个字节

long         8个字节(区别)

long long 8个字节

指针        8个字节(区别)

三、寄存器

32位系统的寄存器如下:

64位系统的寄存器如下:

在64位模式下,有16个64位宽通用寄存器(32位模式是8个通用寄存器),默认的操作数宽度是32位(注:与32位模式相同)。但是,通用寄存器保存32位或64位的操作数。如果指定了32位操作数,则可以使用EAX/EBX/ECX/EDX/EBP/ESP/ESI/EDI和新增的R8D~R15D(注:这里D表示Doubledord,32比特宽)。

如果是64位的操作数,则可以使用RAX/RBX/RCX/RDX/RBP/RSP/RSI/RDI和新增的R8~R15。所有的这些寄存器都可以按字节/单字/双字/四字/八字为单位访问。REX指令前缀用来生成64位的操作数,或者用于访问寄存器R8~R15。

当从64位模式切换到兼容模式,再返回到64位模式后,仅存在于64位模式下的寄存器(R8~R15和XMM8~XMM15)中的值会保持不变。但是如果从64位模式切换到兼容模式,再切换到传统模式(注:即32位保护模式或SMM模式)或实模式,最后通过兼容模式返回到64位模式后,R8~R15和XMM8~XMM15寄存器中的值是未定义的(undefined)。

区别有:

  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的时候才会用到这种寻址方式。

X86和X64的区别相关推荐

  1. linux64和x86,Linux x86和x64的区别

    0x01:寄存器分配的不同 (1)64位有16个寄存器,32位只有8个.但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _.e开头的寄存器命名依然可以直接运用于 ...

  2. 简单归纳一下32位、64位、x86、x64的区别和联系

    32位.64位.x86.x64区别和联系 一切都要从1978年说起,英特尔在这年发布了世界上第一款 x86 指令集架构的处理器「Intel 8086」. 之后这个系列的处理器名称都以数字 86 作为结 ...

  3. 浅淡Windows7 32位与64位/x86与x64的区别

    看到有很多会员问到底是选Windows7 x86,还是选x64.这里简单的谈一下这这两种系统的区别. 简单的说x86代表32位操作系统  x64代表64位操作系统. 简单的判断电脑是否支持64位操作系 ...

  4. [分享]Win7 32位与64位/x86与x64的区别

    看到有很多会员问到底是选Windows7 x86,还是选x64.这里简单的谈一下这这两种 系统 的区别. 简单的说x86代表32位操作系统  x64代表64位操作系统. 如果你的 CPU 是双核以上, ...

  5. linux是x64还是x86,Linux x86和x64的区别

    0x01:寄存器分配的不同 (1)64位有16个寄存器,32位只有8个.但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _.e开头的寄存器命名依然可以直接运用于 ...

  6. x86、x64和ia64的区别

    x86或80x86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称.该系列较早期的处理器名称是以数字来表示,并以"86"作为结尾,包括Intel 8086.80186.8 ...

  7. C++内存分布探讨,x86和x64位的细微区别

    网上在探讨C++内存分布的时候,大都是下面这种图, 外加上这么一句话:"栈区申请空间的地址(表示地址的八个十六进制数)是从大到小的,堆区申请空间地址是从小到大的." 但是,小编编译 ...

  8. 目标CPU中的“anyCPU”“x86”“x64”“Itanium”区别

    AnyCPU选项生成平台无关程序集.一个通过AnyCPU选项编译的程序集可毫无问题地运行在x86.x64及Itanium平台上,而生成的程序集基于PE32格式... x86选项用于生成特定于32位In ...

  9. IA64与x64的区别

    说到IA-64与x86-64可能很多人会比较陌生.不知道你在下载系统的时候有没有注意过,有的地方标注了x86/64/ia-64全版本等字样.那x86/x64/ia-64都是什么东西的版本呢?答案就是C ...

  10. Win10+VS2015平台下OpenCV3.1.0的x86和x64平台的Debug与Release模式的编译与配置

    闲话 昨天晚上在新电脑上重新配置了OpenCV3.1,之前虽然也弄过,不过当时是初学者,只是照着网上的教程简单的配置了Debug模式下x86的运行环境(大部分的教程也只教了这种方式的配置......) ...

最新文章

  1. 高斯混合模型(GaussianMixture Model, GMM)聚类、可视化最优协方差形式、通过TSNE进行结果可视化分析、抽取核心特征因子
  2. 构造函数(包含this关键字的简单应用)
  3. 单防区扩展模块怎么用_Zens推出模块化可扩展无线充电器 可为6台设备同时供电...
  4. Deep Learning for Computer Vision with Caffe and cuDNN
  5. Plus from Picture
  6. 你相亲成功的几率有多高?机器学习硬核预测
  7. em算法怎么对应原有分类_[PRML]序列数据 HMM维特比算法及扩展
  8. 修改主从服务器,搭建BIND主从服务器
  9. 【Python】包管理工具pip
  10. 官宣|Apache Flink 1.14.0 发布公告
  11. java tomcat jvm内存_【转】Linux下tomcat JVM内存
  12. MATLAB命令总结
  13. B. Disturbed People(模拟) Codeforces Round #521 (Div. 3)
  14. 通过Excel VBA对序列实现自动分级
  15. 幼儿交往能力培养的调查研究
  16. 自旋锁以及Java中的自旋锁的实现
  17. Charles介绍与使用
  18. k倍区间(前缀和+组合)
  19. 建站技术之csrf django版
  20. 人工雨量计_自动与人工雨量计观测降水量的差异分析

热门文章

  1. A*算法————传教士和野人
  2. 什么是概率?对我有什么用?
  3. 【容器化部署简介】 基于腾讯云TKE: kubernetes(k8s), github actions, devops
  4. 清华大学陈渝老师操作系统课程笔记整理
  5. 伦敦大学计算机研究生雅思要求,【留学科普】伦敦TOP10大学雅思要求来了!你够得上吗?...
  6. 中心极限定理 central limit theorem
  7. gatk过滤_快速入门GATK | Public Library of Bioinformatics
  8. 《新唐书·李白传》原文及翻译
  9. 三角函数积化和差公式
  10. 恩尼格玛模拟器_用C语言编的恩格尼码模拟器