80X86汇编语言程序设计第10章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本章要点 要学习本章,需要具备一定的C/C++语言程序设计基础 了解Microsoft Visual C++ 6.0环境下汇编语言与C/C++语言混合编程的基本方法 了解设计并发程序必须考虑的问题 了解并发环境下实现进程(或线程)同步的基本方法 本章关于并发程序设计方面的知识,对于学习操作系统课程会有所帮助 第10章 汇编语言编程高级主题 第10章 汇编语言编程高级主题 10.1 汇编语言与C/C++语言混合编程 10.2 并发程序设计 10.3 本章小结 10.1 汇编语言与C/C++语言的混合编程 基于Windows 9x/2000/XP/2003等32位环境,以Microsoft Visual C++ 6.0为例。 int类型的数据占4个字节,short类型的数据占2个字节,char类型的数据占1个字节。 所有地址都是32位偏移地址。 基本方法: 嵌入汇编语言 模块连接 10.1 汇编语言与C/C++语言的混合编程 1.嵌入汇编语言 (1)格式 __asm { ; 汇编语言指令序列 } 例如: __asm { mov ax, 1a69h mov dx, 378h out dx, ax } 也可以将__asm放在每条汇编语言指令前。例如: __asm mov ax, 1a69h __asm mov dx, 378h __asm out dx, ax 10.1 汇编语言与C/C++语言的混合编程 1.嵌入汇编语言 说明: 在嵌入的汇编语言指令中,可以使用C/C++语言的数据格式。例如,1a69h可以书写为0x1a69。 嵌入的汇编语言代码不能使用MASM的伪指令来定义数据。 在嵌入的汇编语言代码中,不需要保护寄存器EAX、EBX、ECX、EDX、ESI和EDI的值,必要时由C/C++编译器负责生成保护指令。需要保护寄存器DS、SS、ESP、EBP以及方向标志DF的值。 10.1 汇编语言与C/C++语言的混合编程 1.嵌入汇编语言 (2)汇编语言代码访问C/C++程序中定义的数据 嵌入在C/C++程序中的汇编语言指令,除了可以使用立即数与寄存器外,还可以使用C/C++程序中定义的标识符,如常量、变量、标号、函数名与函数参数等。C/C++编译器自动将它们转换成相应汇编语言指令的操作数,并在标识符前自动加下划线。 一般来说,只要汇编语言指令可以使用内存操作数,就可以使用C/C++程序中的变量。 [例] (略)。 10.1 汇编语言与C/C++语言的混合编程 1.嵌入汇编语言 (3)利用嵌入的汇编语言代码编写C语言函数 通过嵌入汇编语言代码编写C/C++函数时,可以直接按名引用函数参数。 C/C++函数对返回值的约定: 不超过32位的数据被扩展为32位,存放在EAX寄存器中返回; 4~8个字节的返回值存放在EDX:EAX中返回; 对于更大的结构,则将其地址指针存放在EAX中返回。 [例] (略)。 10.1 汇编语言与C/C++语言的混合编程 2.C/C++程序调用汇编语言过程 (1)调用约定 Microsoft Visual C++的调用约定主要包括__cdecl和__stdcall两种。 C/C++函数缺省采用__cdecl调用约定,这种约定在函数名前自动加一个下划线,从右到左将实在参数压入堆栈,由函数的调用者负责堆栈的平衡。 Win32 API函数采用__stdcall调用约定,这种约定从右到左将实在参数压入堆栈,由函数本身负责移去调用者压入堆栈的参数,函数名在编译后被转换为如下形式: _函数名@参数长度 其中,参数长度是指参数表的字节数(十进制)。例如,设函数fun有两个32位参数,则供外部模块调用的名称为_fun@8。 10.1 汇编语言与C/C++语言的混合编程 2.C/C++程序调用汇编语言过程 (2)声明约定 在Microsoft Visual C++中,需要用extern C对所要调用的外部过程、函数和变量予以声明。 形式: extern C 返回值类型 调用约定 函数名(形式参数表); extern C 变量类型 变量名; 在用汇编语言编写的程序中,必须用public声明供外部模块使用的标识符。 10.1 汇编语言与C/C++语言的混合编程 2.C/C++程序调用汇编语言过程 (3)参数的约定 C/C++函数通过堆栈传递参数,函数通过寄存器EAX或EDX:EAX返回值。 注意,在32位环境下,汇编语言访问堆栈时要使用32位寄存器E

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档