如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
宋军计算机学院信息安全系songjun@cug.edu.cn教学重点多模块化程序设计实例1:test33—数值求和“假模块化”设计方式实例2:test33工程模块连接与复用模块连接与编译“真模块化”设计方式实例3:test33工程;调用库测试:;Test33_2.asm.386.modelflat,stdcallincludewindows.incincludekernel32.incincludemasm32.incincludedebug.incincludelibkernel32.libincludelibmasm32.libincludelibdebug.lib实例3-2:test33工程高级语言特性高级语言特性条件控制伪指令;单分支结构.IFEAX<0negeax.ENDIFmovresult,eax;双分支结构.IFeax==5movebx,eaxmoveax,0.ELSEdeceax.ENDIF;WHILE结构xoreax,eaxmovecx,100.whileecx!=0addeax,ecxdececx.endwmovsum,eaxmovecx,100xoreax,eaxleaebx,array.repeat.ifswordptr[ebx]>=0addeax,[ebx].else.break.endifincebxincebx.untilcxzmovresult,eax宏结构程序设计宏结构程序设计宏的定义宏的定义例:定义一个把16位数据寄存器压栈的宏。PUSHRMACROPUSHAXPUSHBXPUSHCXPUSHDXENDM例:定义二个字存储变量相加的宏。MADDMMACROOPRD1,OPRD2MOVAX,OPRD2ADDOPRD1,AXENDM宏的引用宏的参数传递方式方法2:定义一个宏,把存储变量的“加”和“减”操作合并在一起MOPMMACROOP,OPRD1,OPRD2MOVAX,OPRD2OPOPRD1,AXENDM其中:参数OP是一个对应于操作码的形式参数。宏与子程序的区别宏与子程序的区别宏参数的特殊运算符例:定义一个问候性的字符串宏GREETING,其一个参数说明字符串的变量名,另一个参数指名问候的对象。解:GREETINGMACROMSG,nameMSGDB‘Hello,&name’ENDM假设有下面引用语句,GREETINGSTR1,张三GREETINGMSG1,John那么,它们宏扩展时将会得到如下三个问候性的字符串定义。GREETINGSTR1,张三STR1DB‘Hello,张三’GREETINGMSG1,JohnMSG1DB‘Hello,John’字符串整体传递运算符WindowsAPIWindowsAPI调用API调用APICOM文件的编程例.编写一个显示字符串“Hello”的COM类型的程序。CSEGSEGMENT'CODE'ORG100H;空出前256个字节start:LEADX,MSGMOVAH,09HINT21HMOVAX,4C00HINT21HMSGDB"Hello$";定义字符串CSEGENDSENDstart对上面程序,其生成的COM文件只有23个字节,而其EXE文件的字节数会超过1K。结构内联汇编内联汇编内联汇编VC++内联汇编VC++内联汇编#include<windows.h>charszFileName[]=“c:\\temp.txt”;voidmain(){HMODULEhKernel32;__asm{moveax,fs:[30h]moveax,[eax+0Ch]movesi,[eax+1Ch]lodsdpushdwordptr[eax+8]pophKernel32}汇编与C/C++的混合编程要调用带参数过程定义的过程,不应采用CALL指令,因为比较烦琐应该采用过程调用伪指令INVOKE使用INVOKE伪指令的前提是需要用PROTO伪指令对过程进行声明调用距离语言类型作用范围起始参数寄存器列表参数局部变量例fig6-20new.asm.STACK4096;reserve4096-bytestack.DATA;reservestoragefordatapromptBYTEcr,Lf,'Howmanydisks?',0numberBYTE