ImageVerifierCode 换一换
格式:PPT , 页数:162 ,大小:644.50KB ,
资源ID:2648581      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2648581.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第5章-程序举例.ppt)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第5章-程序举例.ppt

1、第第5 5章章 汇编语言程序设计汇编语言程序设计一一.EXE文件编程格式文件编程格式允许源程序使用多个逻辑段允许源程序使用多个逻辑段,适合编写大型程序适合编写大型程序,最最终能生成终能生成.EXE文件文件例例:将将N1和和N2两个单字节数以两个单字节数以28为模求和为模求和SUM单元单元5.1 5.1 汇编源程序的编程格式汇编源程序的编程格式.486DATASEGMENTUSE16N1DBxxN2DBxxSUMDB?DATAENDSSTACK_SEGMENTSTACKSTACKUSE16DB128DUP(?)STACK_ENDSBEG:MOVAX,DATAMOVDS,AXMOVAX,STACK

2、_MOVSS,AXMOVSP,128MOVAL,N1ADDAL,N2MOVSUM,ALMOVAH,4CHINT21HCODEENDSENDBEG可省可省CODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACK_说明说明:.EXE文件中堆栈段的设置文件中堆栈段的设置本例以本例以“STACK_”为段名的逻辑段为段名的逻辑段,选用了选用了“STACK”链接参数链接参数,DOS自动认为自动认为“STACK_”段为堆栈段。段为堆栈段。所以所以,DOS将自动给将自动给SS:SP赋初值赋初值因此因此,源程序给源程序给SS:SP赋初值的三条语句是多余的。赋初值的三条语句是多

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

4、程格式1.汇编语言规定汇编语言规定:COM文件的源程序只能有一个段文件的源程序只能有一个段:代码段代码段,不允许不允许有堆栈段有堆栈段在在代代码码段段偏偏移移地地址址=100H处处,必必须须是是程程序序的的启启动动指指令令 程序中使用的数据可以放在代码段的开始或结尾程序中使用的数据可以放在代码段的开始或结尾.486.486CODESEGMENTUSE16CODESEGMENTUSE16ASSUMECS:CODEASSUMECS:CODEORG100HORG100HBEG:JMPSTARTBEG:MOVAL,N1N1DBXXADDAL,N2N2DBXXMOVSUM,ALSUMDB?MOVAH,4

5、CHSTART:MOVAL,N1INT21HADDAL,N2N1DBXXMOVSUM,ALN2DBXXMOVAH,4CHSUMDB?INT21HCODEENDSCODEENDSENDBEGENDBEG2.例例:上例上例,写成写成COM格式源程序格式源程序3.COM文件的生成文件的生成设上例的文件名为设上例的文件名为N1ADDN2.ASM编辑生成编辑生成N1ADDN2.ASM调用调用TASM.EXE生成生成N1ADDN2.OBJTASMN1ADDN2调用调用TLINK.EXE生成生成N1ADDN2.COMTLINKN1ADDN2/t注意:链接参数为小写字母注意:链接参数为小写字母t三三.EXE文

6、件、文件、COM文件的内存映像文件的内存映像INT20H.数据段数据段代码段代码段堆栈段堆栈段DS=ESCS:IPSS:SPPSP用用户户程程序序EXE文件内存映像文件内存映像1.EXE文件的内存映像文件的内存映像DOS把把EXE文件调入文件调入内存之后内存之后,自动在目标程自动在目标程序上方序上方(低地址处低地址处)生成一生成一个有个有256字节的数据块字节的数据块程序段前缀程序段前缀(PSP)DOS令令DS=ES=PSP段基址段基址,即即DS用户数据段段基址用户数据段段基址,ES用户附加段段基址用户附加段段基址DOS令令CS:IP=代码段启代码段启动指令的逻辑地址动指令的逻辑地址三三.EX

7、E文件、文件、COM文件的内存映像文件的内存映像INT20H.数据段数据段代码段代码段堆栈段堆栈段DS=ESCS:IPSS:SPPSP用用户户程程序序EXE文件内存映像文件内存映像1.EXE文件的内存映像文件的内存映像DOS令令SS:SP=用户堆用户堆栈栈段段(如如果果有有堆堆栈栈段段的的话话)栈顶的逻辑地址栈顶的逻辑地址,所以所以:用户程序必须给用户程序必须给DS赋赋值值,使使DS=用户数据段段用户数据段段基址;用户程序必须给基址;用户程序必须给ES赋值赋值,使使ES=用户附加用户附加段段基址段段基址FS=GS=0,如果用户程如果用户程序使用了序使用了FS、GS附加段附加段,则必须给则必须给

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

9、那条指令的那条指令三三.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四四.程序段前缀程序段前缀 PSP PSP是是一一个个有有256字字节节的的数数据据块块,由由DOS在在装装载载可可执执行行

10、文文件件时时自自动动生生成成。DOS通通过过PSP向向用用户户程程序序传传递递数据数据,PSP是程序运行不可缺少的部分是程序运行不可缺少的部分 每一个可执行文件都伴随有自己的每一个可执行文件都伴随有自己的PSP五五.返回返回DOS的基本方法的基本方法对于对于EXE文件和文件和COM文件文件,返回返回DOS最常用的方法最常用的方法是调用是调用“INT21H”的的4CH功能。除此之外功能。除此之外:1.对于对于COM文件还有以下文件还有以下3种方法可以返回种方法可以返回DOS,即即:直接执行直接执行INT20H;调用调用INT21H的的0号功能号功能;执行执行RET指令。如果此时指令。如果此时SP

11、仍然等于仍然等于FFFEH的话的话(程序中规范的使用堆栈程序中规范的使用堆栈,在执行在执行RET之前把进栈的之前把进栈的数据全部弹出数据全部弹出,则则SP必然等于必然等于FFFEH),CPU将无条件将无条件转入转入PSP的首单元的首单元,执行那里的执行那里的INT20H,返回返回DOS。2.对于对于EXE文件的编程格式文件的编程格式,还有一种返回还有一种返回DOS的方法的方法,就是在需要返回就是在需要返回DOS的时候的时候,设法使设法使CPU转到转到PSP首首单元单元,执行那里的执行那里的INT20指令。为此指令。为此,源程序必须采取源程序必须采取下面的下面的3项措施项措施,缺一不可缺一不可:

12、把代码段包含在一个远过程之中把代码段包含在一个远过程之中;在给在给DS赋初值之前赋初值之前,用下列用下列3条指令把条指令把PSP首单元的首单元的物理地址压入栈顶物理地址压入栈顶,即即:PUSHDSMOVAX,0PUSHAX在采取了以上两条措施之后在采取了以上两条措施之后,程序在需要返回程序在需要返回DOS的地的地方执行一条方执行一条RET指令即可返回指令即可返回DOS。因为这条因为这条RET指令指令是远过程中的返回指令是远过程中的返回指令,它将从栈顶弹出它将从栈顶弹出4个字节个字节,即把即把PSP首单元的物理地址反弹到首单元的物理地址反弹到CS:IP之中之中,从而使从而使CPU转转移到移到PS

13、P首单元首单元,执行那里的执行那里的INT20H,再返回再返回DOS。综上所述综上所述,虽然返回虽然返回DOS有好几种方法有好几种方法,但是调用但是调用INT21H的的4CH功能功能,是返回是返回DOS的最常用的方法的最常用的方法,它的它的优点是简单、通用优点是简单、通用,而且有利于组织批处理文件。而且有利于组织批处理文件。BIOS/DOSBIOS/DOS调用模式:调用模式:MOV AH,MOV AH,功能号功能号 设置入口参数设置入口参数 INT nINT n 分析出口参数分析出口参数BIOS/DOSBIOS/DOS功能调用功能调用子程序调用结束后一般都有出口参数,这些出口参子程序调用结束后

14、一般都有出口参数,这些出口参数常放在寄存器中,通过出口参数可以知道功能调数常放在寄存器中,通过出口参数可以知道功能调用的成功与否。用的成功与否。其中其中n值因子程序不同而可能不同,比如:值因子程序不同而可能不同,比如:ROMBIOS有有n=51FH,DOS有有n=20H,21H,232AH,2EH,2FH,33H和和67H等几种情况。有的等几种情况。有的n只对应一个子程序,有的只对应一个子程序,有的n对对应很多子程序,应很多子程序,.2 .2 DOSDOS系统系统I/OI/O功能调用功能调用 在在DOSDOS功功能能子子程程序序调调用用中中,我我们们把把通通过过INT21HINT21H来来实实

15、现现的的子程序调用成为子程序调用成为DOSDOS系统功能调用。系统功能调用。调用模式:调用模式:MOVAH,功能号功能号 设置入口参数设置入口参数 INT21H 分析出口参数分析出口参数AH=?执行执行1#子程序子程序执行执行2#子程序子程序IRET21H型中断服务程序型中断服务程序=1=2 功能号功能号0101HH 等待键入一个字符等待键入一个字符,有回显有回显,响应响应Ctrl_CCtrl_C 入口参数入口参数:无。无。出口参数出口参数:AL=AL=按键的按键的ASCASC 码码,若若AL=0,AL=0,表明按键是功表明按键是功 能键、光标键能键、光标键,需再次调用此功能需再次调用此功能,

16、才能返回按键的扩才能返回按键的扩 展码。展码。功能号功能号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