当前位置 博文首页 > haimianjie2012的专栏:32位程序与64位程序有什么不同

    haimianjie2012的专栏:32位程序与64位程序有什么不同

    作者:[db:作者] 时间:2021-08-18 21:48

    目录

    1.x86-64的历史和动因

    2.x86-64简介

    2.1数据类型

    2.2汇编代码示意

    2.3访问信息

    2.4控制

    2.5数据结构

    2.6总结

    3.32位与64位程序的同

    ?参考文献


    类似题目:(7条消息) Linux x86与arm区别_haimianjie2012的专栏-CSDN博客

    1.x86-64的历史和动因

    字长要从汇编语言的角度理解,就是指令集里面的运算和内存操作时操作数的长度。比如你写一条load a, reg1,那么a这个操作数的长度就是字长。32位机的字长最大是32bit,64位机的字长最大是64bit。

    机器的字长定义了程序能够使用的虚拟地址范围,32位字长就是4GB虚拟地址空间。

    指令体系结构I32是32位字长,因此程序能够使用的最大虚拟地址范围是4GB。

    然而,现在的机器很容配置4GB以上的RAM(随机访问存储器),4GB以外的内存就得不到有效利用。

    ==》I32的32位字长限制了微处理器的能力发挥。

    2003年,AMD推出了基于“x86-64"指令集的64位微处理器,顾名思义,x86-64是Intel指令集到64位的演化。它保持了IA32完全的后向兼容性,并且又增加了新的数据格式,以及其他一些特性,使得能力更强,性能更高。

    IA32==》基于Intel的机器上运行32位linux版本时,硬件和GCC代码组合;

    x86-64==》在AMD和Intel的较新的64位机器上运行的硬件和代码的组合。

    2.x86-64简介

    x86-64代码与IA32机器生成的代码有极大的不同。主要特性如下:

    • 指针和长整数是64位长,整数算术运算支持8、16、32、64位数据类型
    • 通用目的寄存器从8个扩展到16个
    • 许多程序状态都保存在寄存器上,而不是栈上。整型和指针类型的过程参数(最多6个)通过寄存器传递。有些过程根本不需要访问栈。
    • 如果可能,条件操作用条件传送指令实现,会得到比传统分支代码更好的性能。
    • 浮点操作用面向寄存器的指令集(SSE版本2引入)来实现,而不用I32支持的基于栈的方法来实现。

    2.1数据类型

    2.2汇编代码示意

    2.3访问信息

    2.4控制

    2.5数据结构

    2.6总结

    3.32位与64位程序的同

    64位操作系统与32位操作系统区别
    ?? ?1.设计初衷不同
    ?? ??? ?满足需要大量内存和浮点性能的客户需求
    ?? ??? ??? ?机械设计和分析
    ?? ??? ??? ?三维动画
    ?? ??? ??? ?视频编辑和创作
    ?? ??? ??? ?科学计算和高性能计算
    ?? ??? ?为普通用户设计
    ?? ?2.要求配置不同
    ?? ??? ?32位
    ?? ??? ??? ?32位操作系统可以安装在32位CPU电脑或64位CPU电脑上
    ?? ??? ??? ?安装32位操作系统的64位cpu电脑,表现32位性能
    ?? ??? ?64位
    ?? ??? ??? ?64位操作系统智能安装在64位(CPU)电脑上
    ?? ??? ??? ?同时需要安装64位常用软件才能乏味64位性能
    ?? ??? ?小的可以在大的上安装运行,只是性能打折;大的不能在小的上面跑
    ?? ?3.运算速度不同
    ?? ?4.寻址能力不同
    ?? ??? ?64位可以访问更大的内存
    ?? ?6.其他
    ?? ??? ?64位计算有两大好处:进行更大范围的整数运算,支持更大的内存
    ?? ??? ?向下兼容:64位操作系统可以安装32位软件

    ?参考文献

    (7条消息) 32位和64位程序的区别_Akun的博客-CSDN博客_32位程序和64位程序

    《深入理解计算机系统》3.13

    cs