南京邮电大学微型计算机原理与接口技术 第5章 孙力娟_第1页
南京邮电大学微型计算机原理与接口技术 第5章 孙力娟_第2页
南京邮电大学微型计算机原理与接口技术 第5章 孙力娟_第3页
南京邮电大学微型计算机原理与接口技术 第5章 孙力娟_第4页
南京邮电大学微型计算机原理与接口技术 第5章 孙力娟_第5页
已阅读5页,还剩157页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章汇编语言编程,1 .EXE文件编程格式使源程序可以使用多个适合编写大型程序的逻辑段,最终。可以创建EXE文件。示例:将1,2个单字节数合计为28,以SUM为单位,5.1程序集源程序的编程格式,486 dataegmenuse 16 N1 db xx N2 dbxxxsdb?dataend stack _ segmentstackstackuse 16 db 128 dup(?)stack _ ends、beg : movax、datamovds、axmovax、stack _ movss、axmovsp、128 moval、n1 addal、nnsEXE文件中的堆段设置此示例中,已选择逻

2、辑段(使用“STACK_”作为段名)、“STACK”链接参数,并且DOS自动将“STACK _”段视为堆段。因此,DOS会自动将初始值分配给SS:SP,因此源程序中为SS:SP指定初始值的三个语句不是必需的。链接器要求:EXE文件的源文件必须包含堆段。否则,链接时将显示警告消息Warningnostacksegment,但这并不表示源程序中存在错误,只是警告。如果您未在源程序中设置堆段(连接时显示错误消息),DOS会自动将至少128字节的堆栈区域分配给程序,因此,如果源程序中没有堆栈大量数据,则可以简化程序,而无需设置堆段。二.COM文件的编程格式1 .汇编语言要求:COM文件的源程序只有一个

3、段:段,不允许段偏移地址=100H的堆段。程序的启动指令中使用的数据必须可以放置在段的开头或结尾。486.486 codeg menuse 16 codeg menuse 16 assume cs 3360 codes : code org 100 horg 100 hbeg : jmpsartbeg 3360 moval,n1 n1 dbxxdal,n1Movah,4ch start : moval,n1 int21 hadal,N2 n1 dbxmovsum,al N2 dbxxmovah,4 chsumdb?Int21 hcodeendscodeendsendbeg,2 .范例:使用CO

4、M格式来源程式撰写,3 .建立COM档案前一个范例中的档案名称N1ADDN2 .建立ASM编辑N1ADDN2。ASM调用TASM。生成EXE n1 addn 2。OBJTASMN1ADDN2调用TLINK。EXE调用N1ADDN2。COMTLINKN1ADDN2/t注意:链接参数采用小写字母t、Iii .EXE文件、COM文件中的内存图像、INT20H、数据段、片段、堆、ds=es、cs : IP、ss: sp、PSP、用户程序、EXE文件内存映像、EXE文件中的内存映像DOS将EXE文件传输到内存后,256字节的PSP.段、段、堆段、DS=es、cs : IP、ss: sp、PSP、用户程序

5、、EXE文件内存映像、EXE文件中的内存映像DOS命令SS:SP=用户堆段(用户程序为:ES=用户附加段默认段FS=GS=0;用户程序使用FS,GS附加段时为FS;GS中为初始值;3 .EXE文件、COM文件中的内存图像、INT20H、段,堆,00h,00h,cs=ds=ES=ss,IP=100 h,sp,PSP,64K-256,COM文件内存映像,2COM文件内存映像COM文件移动到内存中后,DOS会在其上方自动创建PSPCS=DS=SS=ES=PSP段主地址,即用户程序的段、数据段、ES附加段和堆栈区域位于64k逻辑段中的DOS,并自动执行偏移地址为100H的命令。三.EXE文件、COM文

6、件中的内存图像、INT20H、碎片,堆,00h,00h,cs=ds=es=ss,IP=100 h,sp,PSP,64k-256,com文件内存映像,COM文件内存映像DOS是DOS在装载可执行文件时自动生成的256字节数据块,SP=FFFEH,SS:SP=SS:SP 1=0。也就是说,在COM文件的代码段下有FFFEH。DOS通过PSP将数据传递给用户程序,PSP是程序执行的必需部分。每个可执行文件都附带其自己的PSP。5.返回DOS的基本方法对于EXE文件和COM文件,返回DOS的最常用方法是调用 INT21H 的4ph功能。此外,还可以通过三种方式返回到COM文件的DOS:也就是说,直接运

7、行INT20H。调用INT21H的0号功能;执行RET命令。此时,如果SP仍然与fffeh相同(程序内规范的使用堆栈在运行RET之前弹出所有进入堆栈的数据),则SP必须与FFFEH相同,CPU将无条件切换到PSP上的第一个单元,然后运行INT20H返回DOS。2.对于EXE文件编程格式,还可以在需要返回DOS时将CPU返回到PSP第一个设备,返回到发出INT20命令的DOS。为此,源程序必须采取以下三种措施:一个是:此代码片段不能包含在远进程中。在为DS赋予初始值之前,请使用以下三个命令将PSP第一个设备的物理地址滑至堆栈顶部:pusshdsmovax、0pushax执行这两种操作后,在需要返

8、回DOS的地方执行RET命令以返回DOS。此RET命令在堆栈顶部4字节(PSP第一个设备的物理地址绑定到CS:IP),将CPU发送到PSP第一个单元,运行INT20H,然后在返回到DOS的远距离返回。总之,返回DOS的方法有多种,但调用INT21H的4ph功能是返回DOS的最常用方法,具有简单、通用、有助于配置批处理文件的优点。BIOS/DOS调用模式:MOVAH、功能编号设置入口参数INTn分析出口参数、BIOS/DOS功能调用、子程序调用后通常有出口参数,这些出口参数通常放置在寄存器中,通过出口参数可以知道功能调用是否成功。ROMBIOS可能会因多种情况而异,例如n=51FH,DOS n=

9、20H、21H、232AH、2EH、2FH、33H、67H等。有些n只对应于一个子例程,有些n对应于很多子例程,2DOS系统I/O功能调用将DOS功能子程序调用中通过INT21H实现的子程序调用变为DOS系统功能调用。调用模式:MOVAH,功能编号设置入口参数INT21H分析出口参数,功能编号01H等待输入字符以响应Ctrl_C入口参数3360无。出口参数:AL=键的ASC代码,AL=0表示键是功能键,光标键。要返回到密钥的扩展代码,必须再次调用此功能。功能编号02H显示响应Ctrl_C入口参数:DL=所显示字符的ASC代码的字符。出口参数:无。此功能在屏幕的当前位置显示一个字符,光标向右移动

10、一个单元格,在一行结束处显示字符时,光标返回到下一行的起始单元格。如果在屏幕右下角显示文字,光标返回时将在屏幕上向上滚动一行。实验表明,该功能破坏了AL寄存器的内容。功能编号07H不响应Ctrl_C,并等待输入一个不带回音的字符。没有门户参数:如果出口参数:AL=密钥的ASC代码,AL,则再次调用该功能以从AL中获取密钥的扩展代码。功能编号09H显示字符串并响应Ctrl_C。门户参数:DS:DX=字符串第一个地址,字符串必须以$(即ASC代码24H)结尾。出口参数:无。此功能从屏幕上的当前位置开始,显示字符串,遇到结束标志$时停止,并且不显示$字符。实验结果显示,9号功能也破坏了AL寄存器的内

11、容。功能编号08H等待输入一个字符,而不响应Ctrl_C。没有门户参数:出口参数:AL=密钥的ASC代码,如果为AL0,则再次调用该功能以从AL中获取密钥的扩展代码。功能编号0AH等待输入一系列字符以发送用户程序数据缓冲区入口参数、出口参数,如下图所示。0AH必须输入“回车”作为结束标志。也就是说,按enter键结束此功能调用,光标返回到当前行起始单元格。回车符保留在缓冲区中。数据缓冲区的格式必须在用户程序数据段中设置:缓冲区,并且在调用之前必须将缓冲区第一个地址偏移分配给DX寄存器,如下所示。缓冲区第一个单元必须预设允许的字符数(包括回车符)。用户输入回车时,0AH功能实际输入的字符数(不包

12、括回车)将写入BUF 1单元格。输入的字符串从单元格BUF 2开始按顺序存储。因此,缓冲区的容量必须等于或大于输入的字符串长度2。注:输入的字符串长度必须包括回车符。缓冲区不接受长字符,发出指示蜂鸣音的声音。0AH在接收字符时有回音,响应Ctrl_C,按back space键将从屏幕和缓冲区中删除当前字符。以下程序部分显示了对0AH功能调用的演示,用户可以输入15个字符(包括enter键)。假定数据段BUFDB15DB?DB15DUP(?)片段.MOVAH、0AHMOVDX、OFFSETBUFINT21H.功能编号0CH清除键盘缓冲区,并调用AL指定的功能。使用门户参数:AL,您可以在:01H

13、中输入字符以响应Ctrl_C。06H字符输入未响应I/O. 07H、未响应Ctrl_C的字符。输入回应Ctrl_C而不回应08H回应的字元。输入要写入0AH用户数据区域的文字字符串。其他门户参数必须根据相关功能单独设置。功能编号4ph此功能意味着终止当前程序的执行,并将控制权授予调用的程序。被退出的程序打开的所有文件都将关闭,程序使用的内存空间返回DOS并单独分配。此功能允许终止的程序向调用的程序传递“返回代码”。调用DOS命令退出的程序时,返回代码被视为DOS批处理命令的“IFERRORLEVEL”子命令。入口参数:AL=返回代码(或未设置)。出口参数:无。说明:用户程序在调用1,2,8,9

14、,0AH,0BH,OCH功能时输入Ctrl_C或ctrl _ break,dos将自动调用INT23H中断处理程序以强制中断用户程序,这称为响应Ctrl_C。示例:人机会话程序。问题:如何设置运行程序所需的数据?当程序的数据段程序运行时,通过human会话临时输入程序来加载程序时,通过命令行参数学习前两种方法,从而学习DOS功能调用:Limai?(Y/N),Whatisyourname?1 .对话内容和设计理念,Linai前者是程序提出的询问信息,后者是用户输入的答案,n;程序克隆的名称和回答提示,Limai再问一次,琳达?(Y/N),Whatisyourname?Y,2。方块图:n,data

15、egmenuse16mesg 1db0dh,0ahdbwhatisyourname?$MESG2DB?(y/n) $ bufbdb 30db?DB30DUP(?)dataendscodesegmenuse 16 assume cs : code,da : data beg : movax,datamovds,ax again : movah,9 movdx,offset名称为MOVAH、0AHMOVDX、OFFSETBUFINT21H输入字符串MOVBL、BUF 1MOVBH、0、 486、实际输入的字符数bxmovsi、offset buff2 movbyteprbxs、$;使用$作为字符串

16、终结器MOVAH、2MOVDL、0AHINT21H光标移动到MOVAH、9MOVDX、OFFSETBUF 2INT21H行的下方。输入的字符串:MOVAH、9MOVDX、OFFSETMESG2INT21H提供批准信息MOVAH,1INT21H等待输入CMPAL,Y。Jndainimovah比较,4 chint 21h;返回Doscodendsendbeg,调用. 3 BIOS键盘输入功能将基本I/O系统程序BIOS固定在主板EPROM上,这是最接近硬件的驱动程序,BIOS中的许多子程序可以由用户程序调用,这些子程序称为BIOS功能调用。调用模式:MOVAH,功能编号设置入口参数INT16H分析

17、出口参数,BIOS中常用的键盘输入功能如下,(调用INT16H)功能编号00H读取输入的字符之一。没有响应,Ctrl_C,等待而不输入。没有门户参数:输入出口参数:AL=文字的ASCII代码。如果AL=0,请输入AH=键的扩展代码。功能编号01H查询键盘缓冲区。没有门户参数:出口参数:Z旗标=0表示有输入。此时,输入AL=文字的代码,然后输入AH=文字的扩展代码。完成函数调用后,键码仍保留在键盘缓冲区中。z旗标=1表示没有输入。功能编号02H读取当前变换密钥状态。没有门户参数:出口参数:AL=键盘状态单词。状态单词:AL7位置1表示Insert键有效(按奇数键)。AL6位置1表示CapsLock键有效(相应的指示灯亮起)。AL5位置1表示NumLock键有效(相应的指示灯亮起)。AL4位置1表示ScrollLock键有效(相应的指示灯亮起)。AL3位置1表示按了Alt键。AL2位置1表示按了Ctrl键。AL1位置1表示按了左Shift键。AL0位置1表示按了右侧的Shift键。功能编号10H读扩展键盘,无回显,响应Ctrl_C .门户参数:无

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论