- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
X86-64架构(自学) x86-64的基本指令和对齐 数据传送指令(汇编指令中助记符“q”表示操作数长度为四字(即64位)) movabsq指令用于将一个64位立即数送到一个64位通用寄存器中; movq指令用于传送一个64位的四字; movsbq、movswq、movslq用于将源操作数进行符号扩展并传送到一个64位寄存器或存储单元中; movzbq、movzwq用于将源操作数进行零扩展后传送到一个64位寄存器或存储单元中; pushq和popq分别是四字压栈和四字出栈指令; movl指令的功能相当于movzlq指令 。 X86-64架构(自学) 数据传送指令举例 dest_type convert(source_type x) { dest_type y = (dest_type) x; return y; } 以下函数功能是将类型为source_type的参数转换为dest_type型数据并返回 根据参数传递约定知,x在RDI对应的适合宽度的寄存器(RDI、EDI、DI和DIL)中,y存放在RAX对应的寄存器(RAX、EAX、AX或AL)中,填写下表中的汇编指令以实现convert函数中的赋值语句 问题:每种情况对应的汇编指令各是什么? X86-64架构(自学) 数据传送指令举例 dest_type convert(source_type x) { dest_type y = (dest_type) x; return y; } 以下函数功能是将类型为source_type的参数转换为dest_type型数据并返回 根据参数传递约定知,x在RDI对应的适合宽度的寄存器(RDI、EDI、DI和DIL)中,y存放在RAX对应的寄存器(RAX、EAX、AX或AL)中,填写下表中的汇编指令以实现convert函数中的赋值语句 只需x的低32位 X86-64架构(自学) 算术逻辑运算指令 addq(四字相加) subq(四字相减) imulq(带符号整数四字相乘) orq(64位相或) leaq(有效地址加载到64位寄存器) 以下是C赋值语句“x=a*b+c*d;”对应的x86-64汇编代码,已知x、a、b、c和d分别在寄存器RAX(x)、RDI(a)、RSI(b)、RDX(c)和RCX(d)对应宽度的寄存器中。根据以下汇编代码,推测x、a、b、c和d的数据类型 movslq %ecx, %rcx imulq %rdx, %rcx movsbl %sil, %esi imull %edi, %esi movslq %esi, %rsi leaq (%rcx, %rsi), %rax d从32位符号扩展为64位,故d为int型 在RDX中的c为64位long型 在SIL中的b为char型 在EDI中的a是int型 在RAX中的x是long型 X86-64架构(自学) 过程调用的参数传递 通过寄存器传送参数 最多可有6个整型或指针型参数通过寄存器传递 超过6个入口参数时,后面的通过栈来传递 在栈中传递的参数若是基本类型,则都被分配8个字节 call(或callq)将64位返址保存在栈中之前,执行R[rsp]←R[rsp]-8 ret从栈中取出64位返回地址后,执行R[rsp]←R[rsp]+8 X86-64架构过程调用举例(自学) long caller ( ) { char a=1; short b=2; int c=3; long d=4; test(a, a, b, b, c, c, d, d); return a*b+c*d; } void test(char a, char *ap, short b, short *bp, int c, int *cp, long d, long *dp) { *ap+=a; *bp+=b; *cp+=c; *dp+=d; } 其他6个参数在哪里? 执行到caller的call指令前,栈中的状态如何? X86-64架构过程调用举例(自学) long caller ( ) { char a=1; short b=2; int c=3; long d=4; test(a, a, b, b, c, c, d, d); return a*b+c*d; } 第15条指令 X86-64架构过程调用举例(自学) 执行到test的ret指令前,栈中的状态如何?ret执行后怎样? void test(char a, char
您可能关注的文档
- 第二十八章 泌尿系统损伤疾病病人的护理.ppt
- 第二十章 第二节 骨折病人的护理.ppt
- 第二十章_骨与关节损伤病人的护理.ppt
- 第二十章_骨肿瘤病人的护理.ppt
- 第二章 护理学相关理论.ppt
- 第二章 简单的VB程序设计.ppt
- 第二章 民事诉讼中的诉权、诉和反诉制度.ppt
- 第二章 -国际货代销售与报价.ppt
- 第二章 国际商事仲裁机构.ppt
- 第二章 临床接诊.ppt
- 2025年新能源汽车电池材料市场潜力与风险研究报告.docx
- 文旅企业跨界合作模式研究:2025年行业资源整合策略解析.docx
- 智慧养老社区2025年智慧养老社区建设与推广策略研究报告.docx
- 社交电商直播运营策略与粉丝经济转化分析报告2025.docx
- 2025年科技企业孵化器建设资金申请政策解读报告.docx
- 2025年零售行业自有品牌品牌忠诚度与消费者粘性研究报告.docx
- 2025年金融科技产品合规性评估与内控流程再造指南.docx
- 2025年跨境电商平台用户活跃度提升策略报告.docx
- 银发经济与旅游产业融合,2025年市场趋势与投资机会报告.docx
- 2024年新人教PEP版三年级上册英语 Unit 3 Part C 第6课时教学课件.pptx
文档评论(0)