版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《计算机系统》64位系统《计算机系统》课程教学组2025年春季学期43512从32位到64位数据与指令信息访问与数据操作程序的控制小结内容提要I386&IA32IA64INTEL&HPAlpha处理器
X64AMDItaniumINTEL1985从32位到64位1990199219992001IA32EM64TINTEL642006从32位到64位字长限制了微处理器能力增长32位字长能寻址的地址空间为4GB,即一个程序最多只能有效使用到4GB的内存字长限制了数据处理与计算越来越多的计算任务要求更大的数据运算空间和数据表示范围计算技术的发展要求更大的字长从32到64是沿用字长翻倍传统的选择05040301通用目的寄存器从8个扩展到16个尽可能使用条件传送来实现条件操作,具有更好的分支性能指针与长整型为64位;整数算术运算支持8、16、32、64位数据类型浮点操作使用基于寄存器的指令集X86-64的特点02大部分程序状态可以保存在寄存器而不是栈43512从32位到64位数据与指令信息访问与数据操作程序的控制小结内容提要X86-64的数据类型C声明Intel类型汇编后缀X86-64大小IA32大小char字节b11short字w22int双字l44longint四字q84longlongint四字q84char*四字q84float单精度s44double双精度d88longdouble扩展精度t10/1610/12*
longdouble在x86-64系统中分配16个字节,在IA32系统中分配12个字节,但均只实际使用最低位的10个字节。X86-64的数据对齐X86-64中的数据结构与IA32遵循同样规则数组、结构、联合都是划分成对应长度的块,块中保存各自元素。更严格的对齐标准任何K字节的数据起始地址必须是K的倍数:数据类型对齐位置short2字节边界int4字节边界long8字节边界double8字节边界longdouble16字节边界X86-64的指令longintsimple_l(longint*xp,longinty){ longintt=*xp+y; *xp=t; returnt;}simple_l:pushl %ebpmovl %esp,%ebpmovl 8(%ebp),%edxmovl12(%ebp),%eaxaddl (%edx),%eaxmovl %eax,(%edx)popl %ebpretIA32simple_l:movq %rsi,%raxaddq (%rdi),%raxmovq %rax,(%rdi)retX86-64指针与长整型都是64位寄存器位64位:%rxx无需使用栈帧,没有栈帧准备与退出指令参数传送都是通过寄存器,无需访问内存43512从32位到64位数据与指令信息访问与数据操作程序的控制小结内容提要X86-64通用寄存器共16个:传统的8个:%rax~%rsi(变成64位)加上新增的%r8~%r15所有通用寄存器都可以访问低32位、低16位和低8位%rax,%rcx,%rdx和%rbx的第二个字节,即:%ah,%ch,%dh和%bh,依然可以由单字节操作数的指令直接访问没有帧指针(栈底)寄存器,%rbp因此可以作为通用寄存器数据传送指令指令效果描述movabsqI,RR
I传送绝对四字movS,DD
S传送movq传送四字movsS,DD
SignExtend(S)符号扩展传送movsbq符号扩展字节传送四字movswq符号扩展字传送四字movslq符号扩展双字传送四字movzS,DD
ZeroExtend(S)零扩展传送movzbq零扩展字节传送四字movzwq零扩展字传送四字pushqSR[%rsp]R[%rsp]–8M[R[%rsp]]S进栈四字popqDD
M[R[%rsp]]R[%rsp]R[%rsp]+8出栈四字算术指令增加了在四字(64位)上进行运算的指令,后缀为qaddq,subq,leaq
等等结果的位数不同导致指令对寄存器不同操作产生32位结果的指令(addl),目的寄存器高32位置零产生16位和8位结果的指令(addw或addb),只改变16位或8位目的寄存器不同大小操作数混合的操作,GCC会选择对应的指令组合依据操作数大小,向上对齐;并使用对应的指令后缀乘法与除法有类似IA32的扩展操作来实现128位的操作均采用类似[%rdx]:[%rax]的方式来保存乘积或者被除数43512从32位到64位数据与指令信息访问与数据操作程序的控制小结内容提要程序控制增加了在四字上进行比较(cmp)和测试(test)的指令,后缀为q循环与分支的实现基本类似,主要区别在于参数传递(有无栈帧)fact_whilemovl $1,%eaxcmpl $1,%edijle .L7.L10imull %edi,%eaxsubl $1,%edicmpl $1,%edijg .L10.L7:repret 阶乘函数的64位版本参数传递1.可将最多6个参数通过寄存器,而不是栈,来传递到过程,消除了内存访问开销。3.栈指针可固定不动,函数可以访问越过栈指针最多128个字节内容,此时对栈位置的引用相对于栈指针进行。2.只有无法把所有局部变量都放入寄存器的函数才需要使用栈;同时64位的返回地址也存放在栈中。4.寄存器也分为调用者保存和被调用者保存X86-64过程栈的使用栈的访问寄存器保存64位系统过程调用#include"stdio.h"voidmain(){inta=3,b=4;intc=sum(a,b);printf("Thesumis%d\n",c);}intsum(intx,inty){intz=0;z=x+y;returnz;}64位系统过程调用#include"stdio.h"intmain(){inta=3,b=4;intc=sum(b,a,b+a,b-a,a*b,2*b);return0;}intsum(intr,ints,intt,intu,intv,intx,inty){intz=0;z=r+s+t+u+v+x+y;returnz;}43512从32位到64位数据与指令信息访问与数据操作程序的控制小结内容提要指针翻倍向下兼容减少栈帧使用处理能力处理能力字长翻倍给予处理器更强的数据(和寻址)处理能力减少栈帧使用额外增加的通用寄存器帮助过程保存状态参数,减少栈帧访问和检索开销向下兼容32位和64位应用均可运行,成为高端机器的普遍选择指针翻倍指针变量的大小翻倍,意味着总的存储器需求也
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年q锅炉工考试试题及答案
- 机械工程师制造技术绩效衡量表
- 园林绿化工程确保工程质量的技术及组织管理保障措施
- 小学五年级上册语文期末教学反思
- 路灯施工方案
- 节前节后安全检查记录
- 2026年道德模范身边好人颁奖典礼活动方案
- 2026年造价员考试《工程量清单》培训试卷(含解析)
- 小学校本研修计划及总结
- 产品项目策划书
- 《环境保护产品技术要求 工业废气吸附净化装置》HJT 386-2007
- 期中测试卷(1~4单元)(试题)2024-2025学年四年级上册数学北师大版
- M+小牛电动车维修手册
- DL-T-5161.13-2018电气装置安装工程质量检验及评定规程第13部分:电力变流设备施工质量检验
- (正式版)JBT 14789-2024 气力输送系统术语
- 肝病科进修总结汇报
- 公安局xx派出所业务用房建设可行性论证报告
- 14K118 空调通风管道的加固
- GB/T 7601-2008运行中变压器油、汽轮机油水分测定法(气相色谱法)
- 药物临床试验质量检查记录表
- 抽样调查第1章引言课件
评论
0/150
提交评论