- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编与C/C++的混合编程过程声明和过程调用伪指令过程名 PROC 调用距离 语言类型 作用范围 起始参数 USES 寄存器列表, 参数:类型 LOCAL 参数表 … ;汇编语言语句过程名 ENDP如何调用要调用带参数过程定义的过程,不应采用CALL指令,因为比较烦琐应该采用过程调用伪指令INVOKE使用INVOKE伪指令的前提是需要用PROTO伪指令对过程进行声明过程声明伪指令:用于事先声明过程的结构过程名 PROTO 调用距离 语言类型, 参数:类型过程调用伪指令 INVOKE 过程名,参数,...调用距离调用距离——可以是NEAR16、NEAR32、FAR,表示该过程是近或远调用。简化段格式中,缺省值由.model语句选择的存储模式决定。 语言类型CSYSCALLSTDCALLPASCALBASICFORTRAN命名约定名字前加下划线?名字前加下划线名字变大写名字大写名字大写参数传递顺序从右到左从右到左(注)从左到右从左到右从左到右平衡堆栈的程序调用程序被调用程序被调用程序被调用程序被调用程序被调用程序保存BP???是是是允许VARARG参数是是是???语言类型语言类型——可以是任何有效的语言类型,确定该过程采用的命名约定和调用约定;语言类型还可以由.model伪指令指定 作用范围 作用范围——可以是PUBLIC、PRIVATE、EXPORT,表示该过程是否对其他模块可见。缺省是PUBLIC,表示其他模块可见;PRIVATE表示对外不可见;EXPORT隐含有PUBLIC和FAR,表示该过程应该放置在导出表(export entry table)。起始参数起始参数——采用这个格式的PROC伪指令,汇编系统将自动创建过程的起始代码(Prologue code)和收尾代码(Epilogue code),用于传递堆栈参数以及清除堆栈等。起始参数表示传送给起始代码的参数;它必须使用尖括号“ ”括起来,多个参数用逗号分隔。 寄存器列表寄存器列表——指通用寄存器名,用空格分隔多个寄存器。只要利用“USES 寄存器列表”罗列该过程中需要保存与恢复的寄存器,汇编系统将自动在起始代码产生相应的入栈指令,并对应在收尾代码产生出栈指令。 参数参数∶类型——表示过程使用的形参及类型。在16位段中,缺省的类型是字WORD,在32位段中缺省的类型是双字DWORD。参数类型可以是任何MASM有效的类型或PTR(表示地址指针);在C、SYSCALL、STDCALL语言类型中。PROC伪指令中使用参数,必须定义语言类型。局部变量 如果过程使用局部变量,紧接着过程定义伪指令PROC,可以采用一条或多条LOCAL伪指令说明。其中,可选的“[个数]”表示同样类型数据的个数,类似数组元素的个数。在16位段中,缺省的类型是字WORD,在32位段中缺省的类型是双字DWORD。使用LOCAL伪指令说明局部变量后,汇编系统将自动利用堆栈存放该变量.例fig6-20new.asm此例该自fig6-20.asm,请注意比较。.386.MODEL FLAT, stdcall?ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORDMove PROTO NEAR32 C, :WORD, :BYTE, :BYTE, :BYTE?include io.h ; header file for input/output?cr equ 0dh ; carriage return characterLf equ 0ah ; line feed?.STACK 4096 ; reserve 4096-byte stack?.DATA ; reserve storage for dataprompt BYTE cr,Lf,How many disks? ,0number BYTE 16 DUP (?)count word ?message BYTE cr,Lf,Move disk from spindle source BYTE ? BYTE to spindle dest BYTE ? BYTE .,0.CODEMove PROC NEAR32 c uses eax ebx, countp:word, Sr:byte , Dst:byte, Spa: byte cmp countp , 1 ; NbrDisks = 1? jne elseMore ; skip if m
文档评论(0)