您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 汇编语言入门教程PPT-第十章:模块化程序设计
将程序分段、采用子程序或宏结构都是进行模块化程序设计本节介绍开发大型程序时采用的方法:源程序文件的包含目标模块连接子程序库第十章模块化程序设计把源程序分放在几个文本文件中,在汇编时通过包含伪指令INCLUDE结合成一体INCLUDE文件名•可将常用的子程序形成.ASM汇编语言源文件•可将常用的宏定义存放在.MAC宏库文件中•可将常量定义、声明语句组织在.INC包含文件中例4.21a①宏库文件lt421a.mac②主程序文件lt421a.asm③子程序文件sub421a.asm10.1源程序文件的包含1dispcharmacrochar;显示char字符movdl,charmovah,2int21hendmdispmsgmacromessage;显示message字符串movdx,offsetmessagemovah,9int21hendmLt421a.macincludelt421a.mac...dispmsgmsg1;提示输入数据movbx,offsetbufcallinput;数据输入cmpcx,0jestart4;没有输入数据则退出movcount,cx...;显示输入的数据...;数据排序...;显示经排序后的数据start4:.exit0includesub421a.asmendLt421a.asm子程序源文件有3个子程序ALdisp;显示2位16进制数子程序(例4.10)sorting;排序子程序(例4.8)input;键盘输入子程序还包含一个宏convert;;将DX两位ASCII码转换为两位16进制数sub421a.asm让我们重点分析键盘输入子程序input;键盘输入子程序;入口参数:ds:bx=存放数据的缓冲区;出口参数:cx=数据个数inputprocpushaxpushdxxorcx,cx;数据个数清0input01:xordx,dx;输入字符清0input02:movah,1;键盘输入一个字符int21hinput之一继续:input之二input10:cmpal,0dhjeinput30;是回车,结束整个数据的输入cmpal,’’jeinput20;是空格和逗号,确认输入了一个数据cmpal,’,’jeinput20cmpal,08hjeinput17;是退格,丢弃本次输入的数据,出错input之二继续:input之三cmpal,’0’;有效数字判断(图4.5b)jbinput17;小于’0’,不是有效数字,出错cmpal,’f’jainput17;大于’f’,不是有效数字cmpal,’a’jbinput11subal,20h;’a’~’f’转换成大写’A’~’F’jmpinput12input11:cmpal,’F’jainput17;字符小于’a’、大于’F’,出错cmpal,’A’jaeinput12;是’A’~’F’,有效字符cmpal,’9’jainput17;是’0’~’9’,有效字符input之三继续:input之四input12:cmpdl,0;有效字符的处理jneinput13movdl,al;dl=0,输入了一个数据的低位,则dl←aljmpinput02;转到字符输入input13:cmpdh,0jneinput17;dl≠0,dh≠0输入3位数据,出错movdh,dl;dl≠0,dh=0输入了一个数据的高位movdl,al;dh←dl,dl←aljmpinput02;转到字符输入input之四继续:input之五input17:movdl,7;输入错误处理movah,2int21hmovdl,'?'movah,2int21hjmpinput01;转到输入一个数据input之五继续:input之六;转换正确的输入数据(图4.5c)input20:convertjmpinput01;转到输入一个数据input30:convertpopdxpopaxret;返回,出口参数已设定inputendpinput之六继续:convert之一;;将DX两位ASCII码转换为两位16进制数(图4.5c)convertmacrolocalinput21,input22localinput24,input25cmpdl,0;;dl=0,没有要转换的数据,退出jeinput25convert之一继续:convert之二cmpdl,'9'jbeinput21subdl,7;;字符A~F,则减7input21:anddl,0fh;;转换低位cmpdh,0;;dh=0,没有高位数据jeinput24cmpdh,'9'jbeinput22subdh,7input22:shldh,1shldh,1shldh,1shldh,1;;转换高位ordl,dh;;合并高、低位convert之二继续:convert之三源文件包含的操作步骤:①分别编辑生成各个文件②汇编、连接主程序文件input24:mov[bx],dl;;存入缓冲区incbxinccx;;数据加1input25:endmconvert之三把常用子程序写成独立的源程序文件,单独汇编,形成子程序的目标文件.OBJ主程序也经过独立汇编之后形成目标文件连接程序将所有目标文件连接起来,最终产生可执行文件需要遵循的原则:①声明共用的变量、过程等②实现正确的段组合③处理好参数传递问题10.2目标代码文件的连接2声明共用的变量、过程•各个模块间共用的变量、过程等要说明PUBLIC标识符[,标识符...];定义标识符的模块使用EXTERN标识符:类型[,标识符:类型...];调用标识符的模块使用•标识符是变量名、过程名等•类型是byte/word/dword(变量)或near/far(过程)•在一个源程序中,public/extern语句可以有多条•各模块间的public/extern伪指令要互相配对,并且指明的类型互相一致实现正确的段组合•子程序文件必须定义在代码段中,也可以具有局部的数据变量•采用简化段定义格式,只要采用相同的存储模式,容易实现正确的近或远调用•完整段定义格式中,为了实现模块间的段内近调用(near类型),各自定义的段名、类别必须相同,组合类型都是public。实际的程序开发中,各个模块往往由不同的程序员完成,不易实现段同名或类别相同,所以索性定义成远调用(far类型)•定义数据段时,同样也要注意这个问题。当各个模块的数据段不同时,要正确设置数据段DS寄存器的段基地址处理好参数传递问题•少量参数可用寄存器或堆栈直接传送数据本身•大量数据可以安排在缓冲区,用寄存器或堆栈传送数据的存储地址•还可利用变量传递参数,但是要采用public/extern声明为公共(全局)变量•这些也是子程序间的参数传递方法例4.21b•主程序lt421b.asm并入宏定义•子程序文件sub421b.asm,要加上段定义语句、声明语句等,但不需要起始点和结束点模块连接的操作步骤:①分别编辑生成各个文件②分别汇编各个文件③连接各个目标文件,形成可执行文件把常用子程序写成独立的源文件,单独汇编形成OBJ文件后,存入子程序库主程序也单独汇编形成OBJ文件主程序连接时,调入子程序库中的子程序模块,产生最终的可执行文件例①主程序文件lt421c.asm②子程序文件sub421c1.asm③子程序文件sub421c2.asm④子程序文件sub421c3.asm10.3子程序库的调入3...;宏定义.codeexternALdisp:near,sorting:near,input:near;声明其他模块中的子程序.startup....exit0endLt421c.asm.modelsmall.codepublicaldispAldispproc...Aldispendpendsub421c1.asm.modelsmall.codepublicsortingsortingproc...sortingendpendsub421c2.asm.modelsmall.codepublicinputinputproc...inputendpendsub421c3.asm库文件调入的操作步骤:①分别编辑生成各个文件②分别汇编各个文件③用库管理文件,将子程序模块添加到库文件(.LIB)中④连接主程序,提供库文件,形成可执行文件补充例题•将子程序补充例题1~3的子程序编写成模块,供主程序调用•实现功能:从键盘输入有符号10进制数,求它们的平均值,然后输出•源程序文件进行简单修改–主程序文件–子程序文件•利用目标代码文件的连接形成可执行文件第一章基础知识汇编语言和C语言编程C/C++语言是一个被广泛使用的程序设计语言,它不仅具有良好的高级语言特征,而且还具有一些低级语言的特点,如:寄存器变量、位操作等。所以,C语言的程序与汇编语言程序之间能很平滑地衔接。另外,目前主要的C语言程序开发环境,如:TurboC/C++、BorlandC/C++等,也都提供了很好的混合编程手段。一、汇编指令的嵌入为了提高C语言程序内某特殊功能段的处理效率,我们可以在其源程序中嵌入一段汇编语言程序段。这样做,虽然能达到提高了程序处理效率的目的,但它无疑以丧失源程序的可移植性为代价。所以,当想用C语言和汇编语言混合编程时,程序员需要权衡采用这种方法的利与弊。在C语言中,嵌入汇编语言的语法如下(*):asmopcodeoperands;ornewline注意:这里的分号';'不是汇编语言中起注释作用的分号,而是作为语句的分隔符。若C语言源程序中嵌入一条汇编语句,则可按下列方式来做:asmmovax,data若要嵌入一组汇编语句,则需要用括号'{'和'}'把它们括起来。asm{movax,data1xchgax,data2movdata1,ax//实现整型变量data1和data2之值的交换}第一章基础知识汇编语言和C语言编程例在C语言源程序中嵌入汇编语言语句实现赋值语句A=A+B+C,其中:A、B、C都是整型变量。解:……asm{pushax//实现整型变量A=A+B+Cmovax,Aaddax,Baddax,CmovA,axpopax}二、C语言程序的汇编输出
本文标题:汇编语言入门教程PPT-第十章:模块化程序设计
链接地址:https://www.777doc.com/doc-4094428 .html