第5章-程序举例.ppt

上传人:b****2 文档编号:2648581 上传时间:2022-11-05 格式:PPT 页数:162 大小:644.50KB
下载 相关 举报
第5章-程序举例.ppt_第1页
第1页 / 共162页
第5章-程序举例.ppt_第2页
第2页 / 共162页
第5章-程序举例.ppt_第3页
第3页 / 共162页
第5章-程序举例.ppt_第4页
第4页 / 共162页
第5章-程序举例.ppt_第5页
第5页 / 共162页
点击查看更多>>
下载资源
资源描述

第5章-程序举例.ppt

《第5章-程序举例.ppt》由会员分享,可在线阅读,更多相关《第5章-程序举例.ppt(162页珍藏版)》请在冰豆网上搜索。

第5章-程序举例.ppt

第第55章章汇编语言程序设计汇编语言程序设计一一.EXE文件编程格式文件编程格式允许源程序使用多个逻辑段允许源程序使用多个逻辑段,适合编写大型程序适合编写大型程序,最最终能生成终能生成.EXE文件文件例例:

将将N1和和N2两个单字节数以两个单字节数以28为模求和为模求和SUM单元单元5.15.1汇编源程序的编程格式汇编源程序的编程格式.486DATASEGMENTUSE16N1DBxxN2DBxxSUMDB?

DATAENDSSTACK_SEGMENTSTACKSTACKUSE16DB128DUP(?

)STACK_ENDSBEG:

MOVAX,DATAMOVDS,AXMOVAX,STACK_MOVSS,AXMOVSP,128MOVAL,N1ADDAL,N2MOVSUM,ALMOVAH,4CHINT21HCODEENDSENDBEG可省可省CODESEGMENTUSE16ASSUMECS:

CODE,DS:

DATA,SS:

STACK_说明说明:

.EXE文件中堆栈段的设置文件中堆栈段的设置本例以本例以“STACK_”为段名的逻辑段为段名的逻辑段,选用了选用了“STACK”链接参数链接参数,DOS自动认为自动认为“STACK_”段为堆栈段。

段为堆栈段。

所以所以,DOS将自动给将自动给SS:

SP赋初值赋初值因此因此,源程序给源程序给SS:

SP赋初值的三条语句是多余的。

赋初值的三条语句是多余的。

链接程序要求链接程序要求:

.EXE文件中的源程序必须有堆栈段文件中的源程序必须有堆栈段,否则链接时将给出警告信息否则链接时将给出警告信息Warningnostacksegment但这不代表源程序有错但这不代表源程序有错,仅仅是警告而已仅仅是警告而已如果源程序中不设置堆栈段如果源程序中不设置堆栈段(在链接时在链接时,会给出错误会给出错误信息信息),DOS将自动给程序分配最少将自动给程序分配最少128字节的堆栈字节的堆栈区区,故源程序中故源程序中,如果没有大量数据压栈的话如果没有大量数据压栈的话,可以不可以不设置堆栈段设置堆栈段,从而简化程序。

从而简化程序。

二二.COM文件的编程格式文件的编程格式1.汇编语言规定汇编语言规定:

COM文件的源程序只能有一个段文件的源程序只能有一个段:

代码段代码段,不允许不允许有堆栈段有堆栈段在在代代码码段段偏偏移移地地址址=100H处处,必必须须是是程程序序的的启启动动指指令令程序中使用的数据可以放在代码段的开始或结尾程序中使用的数据可以放在代码段的开始或结尾.486.486CODESEGMENTUSE16CODESEGMENTUSE16ASSUMECS:

CODEASSUMECS:

CODEORG100HORG100HBEG:

JMPSTARTBEG:

MOVAL,N1N1DBXXADDAL,N2N2DBXXMOVSUM,ALSUMDB?

MOVAH,4CHSTART:

MOVAL,N1INT21HADDAL,N2N1DBXXMOVSUM,ALN2DBXXMOVAH,4CHSUMDB?

INT21HCODEENDSCODEENDSENDBEGENDBEG2.例例:

上例上例,写成写成COM格式源程序格式源程序3.COM文件的生成文件的生成设上例的文件名为设上例的文件名为N1ADDN2.ASM编辑生成编辑生成N1ADDN2.ASM调用调用TASM.EXE生成生成N1ADDN2.OBJTASMN1ADDN2调用调用TLINK.EXE生成生成N1ADDN2.COMTLINKN1ADDN2/t注意:

链接参数为小写字母注意:

链接参数为小写字母t三三.EXE文件、文件、COM文件的内存映像文件的内存映像INT20H.数据段数据段代码段代码段堆栈段堆栈段DS=ESCS:

IPSS:

SPPSP用用户户程程序序EXE文件内存映像文件内存映像1.EXE文件的内存映像文件的内存映像DOS把把EXE文件调入文件调入内存之后内存之后,自动在目标程自动在目标程序上方序上方(低地址处低地址处)生成一生成一个有个有256字节的数据块字节的数据块程序段前缀程序段前缀(PSP)DOS令令DS=ES=PSP段基址段基址,即即DS用户数据段段基址用户数据段段基址,ES用户附加段段基址用户附加段段基址DOS令令CS:

IP=代码段启代码段启动指令的逻辑地址动指令的逻辑地址三三.EXE文件、文件、COM文件的内存映像文件的内存映像INT20H.数据段数据段代码段代码段堆栈段堆栈段DS=ESCS:

IPSS:

SPPSP用用户户程程序序EXE文件内存映像文件内存映像1.EXE文件的内存映像文件的内存映像DOS令令SS:

SP=用户堆用户堆栈栈段段(如如果果有有堆堆栈栈段段的的话话)栈顶的逻辑地址栈顶的逻辑地址,所以所以:

用户程序必须给用户程序必须给DS赋赋值值,使使DS=用户数据段段用户数据段段基址;用户程序必须给基址;用户程序必须给ES赋值赋值,使使ES=用户附加用户附加段段基址段段基址FS=GS=0,如果用户程如果用户程序使用了序使用了FS、GS附加段附加段,则必须给则必须给FS、GS赋初值赋初值三三.EXE文件、文件、COM文件的内存映像文件的内存映像INT20H.代码段代码段堆栈段堆栈段00H00HCS=DS=ES=SSIP=100HSPPSP64K-256COM文件内存映像文件内存映像2.COM文件内存映像文件内存映像COM文文件件调调入入内内存存后后,DOS也在其上方生成一个也在其上方生成一个PSPCS=DS=SS=ES=PSP段段基基址址,即即用用户户程程序序的的代代码码段段、数数据据段段、ESES附附加加段段和和堆堆栈栈区区都在一个都在一个64k的逻辑段中的逻辑段中DOS自自动动使使IP=100H,自自动动执执行行偏偏移移地地址址为为100H处处的那条指令的那条指令三三.EXE文件、文件、COM文件的内存映像文件的内存映像INT20H.代码段代码段堆栈段堆栈段00H00HCS=DS=ES=SSIP=100HSPPSP64K-256COM文件内存映像文件内存映像2.COM文件内存映像文件内存映像DOS自自动动使使SP=FFFEH,且且SS:

SP=SS:

SP+1=0,这这就就意意味味在在COM文文件件中中代代码码段段以以下下,FFFEH以以上上这这一一片片存存储储单单元元都都是是用用户的堆栈区户的堆栈区FS=GS=0四四.程序段前缀程序段前缀PSPPSP是是一一个个有有256字字节节的的数数据据块块,由由DOS在在装装载载可可执执行行文文件件时时自自动动生生成成。

DOS通通过过PSP向向用用户户程程序序传传递递数据数据,PSP是程序运行不可缺少的部分是程序运行不可缺少的部分每一个可执行文件都伴随有自己的每一个可执行文件都伴随有自己的PSP五五.返回返回DOS的基本方法的基本方法对于对于EXE文件和文件和COM文件文件,返回返回DOS最常用的方法最常用的方法是调用是调用“INT21H”的的4CH功能。

除此之外功能。

除此之外:

1.对于对于COM文件还有以下文件还有以下3种方法可以返回种方法可以返回DOS,即即:

直接执行直接执行INT20H;调用调用INT21H的的0号功能号功能;执行执行RET指令。

如果此时指令。

如果此时SP仍然等于仍然等于FFFEH的话的话(程序中规范的使用堆栈程序中规范的使用堆栈,在执行在执行RET之前把进栈的之前把进栈的数据全部弹出数据全部弹出,则则SP必然等于必然等于FFFEH),CPU将无条件将无条件转入转入PSP的首单元的首单元,执行那里的执行那里的INT20H,返回返回DOS。

2.对于对于EXE文件的编程格式文件的编程格式,还有一种返回还有一种返回DOS的方法的方法,就是在需要返回就是在需要返回DOS的时候的时候,设法使设法使CPU转到转到PSP首首单元单元,执行那里的执行那里的INT20指令。

为此指令。

为此,源程序必须采取源程序必须采取下面的下面的3项措施项措施,缺一不可缺一不可:

把代码段包含在一个远过程之中把代码段包含在一个远过程之中;在给在给DS赋初值之前赋初值之前,用下列用下列3条指令把条指令把PSP首单元的首单元的物理地址压入栈顶物理地址压入栈顶,即即:

PUSHDSMOVAX,0PUSHAX在采取了以上两条措施之后在采取了以上两条措施之后,程序在需要返回程序在需要返回DOS的地的地方执行一条方执行一条RET指令即可返回指令即可返回DOS。

因为这条因为这条RET指令指令是远过程中的返回指令是远过程中的返回指令,它将从栈顶弹出它将从栈顶弹出4个字节个字节,即把即把PSP首单元的物理地址反弹到首单元的物理地址反弹到CS:

IP之中之中,从而使从而使CPU转转移到移到PSP首单元首单元,执行那里的执行那里的INT20H,再返回再返回DOS。

综上所述综上所述,虽然返回虽然返回DOS有好几种方法有好几种方法,但是调用但是调用INT21H的的4CH功能功能,是返回是返回DOS的最常用的方法的最常用的方法,它的它的优点是简单、通用优点是简单、通用,而且有利于组织批处理文件。

而且有利于组织批处理文件。

BIOS/DOSBIOS/DOS调用模式:

调用模式:

MOVAH,MOVAH,功能号功能号设置入口参数设置入口参数INTnINTn分析出口参数分析出口参数BIOS/DOSBIOS/DOS功能调用功能调用子程序调用结束后一般都有出口参数,这些出口参子程序调用结束后一般都有出口参数,这些出口参数常放在寄存器中,通过出口参数可以知道功能调数常放在寄存器中,通过出口参数可以知道功能调用的成功与否。

用的成功与否。

其中其中n值因子程序不同而可能不同,比如:

值因子程序不同而可能不同,比如:

ROMBIOS有有n=51FH,DOS有有n=20H,21H,232AH,2EH,2FH,33H和和67H等几种情况。

有的等几种情况。

有的n只对应一个子程序,有的只对应一个子程序,有的n对对应很多子程序,应很多子程序,.2.2DOSDOS系统系统I/OI/O功能调用功能调用在在DOSDOS功功能能子子程程序序调调用用中中,我我们们把把通通过过INT21HINT21H来来实实现现的的子程序调用成为子程序调用成为DOSDOS系统功能调用。

系统功能调用。

调用模式:

调用模式:

MOVAH,功能号功能号设置入口参数设置入口参数INT21H分析出口参数分析出口参数AH=?

执行执行1#子程序子程序执行执行2#子程序子程序IRET21H型中断服务程序型中断服务程序=1=2功能号功能号0101HH等待键入一个字符等待键入一个字符,有回显有回显,响应响应Ctrl_CCtrl_C入口参数入口参数:

无。

无。

出口参数出口参数:

AL=AL=按键的按键的ASCASC码码,若若AL=0,AL=0,表明按键是功表明按键是功能键、光标键能键、光标键,需再次调用此功能需再次调用此功能,才能返回按键的扩才能返回按键的扩展码。

展码。

功能号功能号02H显示一个字符显示一个字符,响应响应Ctrl_C入口参数入口参数:

DL=待显字符的待显字符的ASC码。

码。

出口参数出口参数:

无。

无。

本功能在屏幕的当前位置显示一个字符本功能在屏幕的当前位置显示一个字符,光标右移一光标右移一格格,如果是在一行末尾显示字符如果是在一行末尾显示字符,则光标返回下一行的开则光标返回下一行的开始格。

如果是在屏幕的右下角显示字符始格。

如果是在屏幕的右下角显示字符,光标返回时屏光标返回时屏幕幕要上滚一行。

要上滚一行。

试验表明试验表明,该项功能要破坏该项功能要破坏AL寄存器的寄存器的内容。

内容。

功能号功能号07H等待键入一个字符等待键入一个字符,无回显无回显,不响应不响应Ctrl_C。

入口参数入口参数:

无。

无。

出口参数出口参数:

AL=按键的按键的ASC码码,若若AL,需再次调用需再次调用该功能才能在该功能才能在AL中得到按键的扩展码。

中得到按键的扩展码。

功能号功能号09H显示字符串显示字符串,响应响应Ctrl_C。

入口参数入口参数:

DS:

DX=字符串首地址字符串首地址,字符串必须以字符串必须以$(即即A

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1