DOS功能调用及汇编语言程序结构.doc_第1页
DOS功能调用及汇编语言程序结构.doc_第2页
DOS功能调用及汇编语言程序结构.doc_第3页
DOS功能调用及汇编语言程序结构.doc_第4页
DOS功能调用及汇编语言程序结构.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

第九次课4.3 DOS功能调用1、DOS功能在PC机的操作系统(DOS)的开发过程中,为了简化程序,开发了一些常用的子程序,而这些子程序,在用户操作系统的安装过程中,将将这些常用的子程序安装到了内存单元中,用户可以在编写自己的用户程序时,进行调用。其中有两种:BIOS子程序:功能 管理与计算机相连接的外部设备(显示器、键盘、磁盘驱动)程序,称为基本输入输出系统 (basic Input/output system)这部分程序是存放在ROM 区 所以通常称为:ROM BIOSDOS功能程序:与BIOS程序一样,DOS功能程序也是计算机操作系统开发人员编写的一些常用的用于磁盘文件管理的子程序,主要用于磁盘文件的建立、打开、读写、关闭,用户同样可以在自己的程序中对他们进行调用,简化用户程序的开发。与BIOS不同的是DOS功能程序是存放在硬盘上的,在系统上电时,由操作系统,将其安装到内存中的,称为常驻内存程序。用户调用这两种程序一般采用中断指令进行调用: DOS功能的调用方法:1、 在AH中写入功能调用号2、 在指定的寄存器中设置入口参数3、 用INT 21 指令执行调用4、 根据出口参数分析调用执行情况 DOS 功能程序功能1功能2功能3AH=0AH=1AH=3结束实际上,DOS 程序 被组成了一个大程序存放在内存单元中,从nn1:nn2 开始的单元中,在操作系统上电进行系统初始化时,将nn1:nn2 存放到了中断向量表中,0000H:0084H开始的连续4个单元中, 当用户在用户程序中用INT 21H 调用DOS的某一个功能时,即控制程序转移到nn1:nn2 开始的程序,在这段程序中首先根据AH中的功能,可以分析出用户调用的哪一个功能从而在转到相应地方执行相应的程序段。以下以几个DOS功能的应用介绍DOS功能使用方法: 2、常用功能调用1)键盘输入单字符并显示 调用号:01,无入口参数。 功能:等待键入,检查是否是Ctr - Break键,是,退出。不是将键入的字符送 AL 寄存器并显示。MOV AH ,01 INT 21H2)键盘输入字符串调用号:0AH,入口参数:DS:DX = 缓冲区首地址功能:将键盘键入的以 ENTER (0DH)结尾的字符串写到DS:DX指定的内存区。为此,应先用程序设置一内存区。 例:从键盘输入一个字符串,写到从标号BUF开始的单元中 数据段:BUF DB 20 第一个字节设的最大长度(含0DH) DB ? 第二个字节空出,由DOS功能最后填实际长度(不含0DH) DB 20 DUP (?) 第三字节开始写字符 程序段 MOV DX ,OFFSET BUF MOV AH , 0AH INT 21H 注:键入字符超出缓冲区范围,超出的字符丢失且响铃警告,若小于设置范围,保持原来内容3)输出单字符调用号:02, 入口参数:DL 功能:将DL的内容显示(DL = 待输出字符的ASII码) MOV DL ,A MOV AH,02 INT 21H 程序执行后,在显示器上显示字符 A4)输出字符串 调用号:09H, 入口参数:DS:DX(缓冲区首地址) 功能:将缓冲区内以&结尾的字串显示,$(24H)不显示。 BUF DB ABCDEF& MOV DX , OFFSET BUF MOV AH , 09H INT 21H执行结果在显示器上显示 ABCDEF5)返回操作系统调用号:4CH , 无入口参数。 MOV AH ,4CH INT 21H 结束当前程序,返回操作系统。6)设置中断向量调用号:25H ,入口参数:AL = 中断类型号 DS:DX = 中断程序入口地址。 若中断类型号是 40,中断程序入口地址 0300:2400H,装中断向量。 MOV AX ,0300H MOV DS ,AX MOV DX ,2400H MOV AH ,25H MOV AL ,40 INT 21H例 将键盘输入的字符串显示在显示器上 DSG SEGMENTBUF DB 80 DB ? DB 80 DUP(&) 24H DSG ENDS STA SEGMENT ST DB 100H DUP(?) STA ENDSCSG SEGMEMT ASSUMENT CS:CSG,DS:DSG START:MOV AX,DSG MOV DS,AX MOV AX,STA MOV SS,AX MOV IP,LENGTH ST MOV DX,OFFSET BUF MOV AH,0AH INT 21H MOV DX,OFFSET BUF+2 MOV AH, 09H INT 21H MOV AH, 4CH INT 21CSG ENDS END44 汇编过程1、用行编辑文件建立和修改源程序。 在我们作试验的系统上安装有行编辑文件EDLIN 这个文件主要用于汇编源程序的录入: EDLIN ABC.ASM 如果是一个新文件将显示:New file * (录入所编写的源文件)如果是一个已有文件将显示:EDLIN 将ABC文件装入并显示在显示器上对原有的文件进行编辑、修改End of input file2、利用MASM文件将汇编语言源程序汇编为由机器码表示的目标文件。 MASM ABC 可以生成三个文件 目标文件(*.OBJ), 列表文件( *.LST) ,交叉引用文件 *.CRF Object filename ABC.OBJ: 回车 Source filenamenul.LST: 回车 Cross filenamenul.CRF: 回车 Warning Errors: 0 Severe Errors: 03、利用 LINK 文件将目标文件 连接成可执行文件。 LINK ABCRun file ABC.OBJ: 回车 List filenul.LST: 回车 Libraries filenul.CRF: 回车 Warning Errors: No STACK Segment There was 1 error detected4、在DOS下执行文件 ABC4、用DEBUG调试程序。 C: DEBUG ABC。EXE DEBUG程序是专门用于对程序进行调试的一个程序, 在DEBUG中提供了多种命令,用于实现程序的运行过程 g 全速运行命令 t 单步运行命令 等在DEBUG状态下有一个窗口用于显示CPU内部各个寄存器的当前值,同时可以观察到内存中指定单元单元的内容,从而帮助编程人员检测自己编的程序的运行状况。汇编语言程序设计基础(2)一、 汇编语言程序设计结构象高级语言程序一样,任何一个复杂的汇编语言程序均是由一些简单的基本程序结构构成的, 在汇编语言程序中常见的基本程序结构主要包括:顺序结构 循环结构 分支结构 主子程序结构(中断服务程序),(1)顺序结构程序顺序结构是汇编程序中最常见和最简单的一种程序结构。取数N-ALBX指向TABLE查表 XLAT存结果结束开始例1 在内存TABLE 开始的连续16个单元存放着0-15的平方表,求DATA中的任意数N的平方值,结果放在RESULT中。DSG SEGMENTTABLE DB 0,1,4,9,16,25,-225DATA DB ?RESULT DB ?DSG ENDSSSG SEGMENTTT DB 100DUP(?)SSG ENDSCSG SEGMENT ASSUME CS:CSG,DS:DSG,SS:SSGBEGIN: MOV AX,DSG MOV DS, AX MOV AX, SSG MOV SS,AX MOV SP ,LENGTH TT MOV BX, OFFSET TABLE MOV AL, OFFSET DATA XLAT MOV OFFSET RESULT,AL MOV AH ,4CH INT 21CSG ENDSEND BEGIN(2) 分支程序分支程序结构是汇编程序中常见的结构,分以下两种If /then case 条件成立yesno条件1成立条件2成立条件n-1成立P1P2Pn ALNAL80HNOAL=ALAL=ALOR 80H结束例 在内存TABLE 单元存放着一个带符号8位二进制数,对该数求补,结果放在RESULT 单元,DSG SEGMENTTABLE DW NRESULT DB 00HDSE ENDSCSG SEGMENT ASSUMENT CS:CSG,DS:DSGSTART: MOV AX, DSG MOV DS, AX MOV SI,OFFSET TABLE MOV AL, SI CMP AL,80H JC POS NOT AL OR AL,80HPOS: MOV OFFSET RESULT,AL MOV AH,4CHINT 21HCSG ENDSEND START例2 已知在内存TABLE 开始的内存单元中存放一个班50人某门课的考试成绩,统计优(100-90),良(89-80)中(79-70)及格(69-60)差(59-0)的人数。结果分别放到YOU 、LIANG、 ZHONG、 JIGE、 CHA单元CX=50SI=OFFSET TABLEAL=SIAL=90AL=80AL=70AL=60INC YOUINC LANGINC ZHONG INC JIGEINC BUJIGE结束INC SIDEC CXCX=0DSG SEGMENTTABLE DB 95,89,70,-YOU DB 0LIANG DB 0ZHONG DB 0JIGE DB 0BUJIGE DB 0DSG ENDSCSG SEGMENTASSUMENT CS:CSG,DS:DSGSTART: MOV AX, DSG MOV DS, AX MOV CX, 50 MOV SI, OFFSET TABLE NEXT: MOV AL,SI CMP AL,90 JC LIANG1INC BYTE PTROFFSET YOUJMP ADDADDLIANG1: CMP AL, 80JC ZHONG1INC BYTE PTROFFSET LIANGJMP ADDADDZHONG1:CMP AL,70JC JIGE1 INC BYTE PTROFFSET ZHONGJMP ADDADDJIGE1: CMP AL,60JC CHAINC BYTE PTROFFSET JIGEJMP ADDADDCHA:INCBYTE PTROFFSET CHAADDADD: INC SI DEC CX JNZ NEXT MOV AH,4CH INT 21CSD ENDSEND START(3) 循环程序循环程序结构:一般用于对数据快或字符串中的各个元素进行相同处理的场合循环程序常见的有两种结构:一是常见的已知循环次数的循环结构,二是未知循环次数的循环结构初始化循环体循环控制循环次数到循环结束初始化循环体循环条件不满足循环控制循环结束关于第一种循环结构前面已举了很多例子,以下对第二种结构进行举例说明:例 已知在内存STRING开始存放着一0DH(CR) 结尾的字符串,将字符串的长度放到LENG单元中。SISTRINGAH=0AL SIAL=ODHHAH=AH+1SI=SI+1LENGAH结束(3)主子程序结构主子程序结构一般用在再一个程序中多个不同的地方多次完成相同处理的场合。关于主子程序结构的编写要考虑以下几个方面的问题:1、子程序的基本结构2、现场保护及恢复 不要改变主程序的运行状态,包括段寄存器的内容3、入口参数、出口参数 这两个程序参数实际上是一个约定,即被处理的数在哪里,处理结果放在哪里,实际上是解决一个主子程序间数据传送的问题,被传送的可以是数据、可以是数据存放在内存单元的地址,用于主子程序之间传送的方法有很多:(1) 用某一个寄存器,寄存器的内容可以是被处理的数据,也可以是被处理数据在内存中的偏移地址,(2)通过内存单元进行传递,例如规定被处理的数据方在固定的内存单元中(3)通过堆栈段进行传递例 编写一个求内存单元中存放的以$结尾的字符串长度的子程序,设字符串起始地址为STRINGS,方法1、用寄存器传递首地址 当字符与当前数据段在同一段时,只需传递偏移地址,否则需要修改DS的内容 Main: MOV SI,OFFSET STRINGS CALL SON Main: PUSH DSMOV AX

温馨提示

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

评论

0/150

提交评论