实验六 DOS功能调用程序设计
- 格式:ppt
- 大小:55.50 KB
- 文档页数:9
DOS功能调⽤及汇编语⾔程序设计举例DOS功能调⽤及汇编语⾔程序设计举例5.1 DOS功能调⽤DOS-磁盘操作系统,象WINDOS操作系统⼀样是进⾏计算机系统管理的软件,在WINDOS 以前,PC机上主要应⽤的是DOS 操作系统,两者间的最⼤区别是在DOS 操作系统下,⽤户可以利⽤⾃⼰所编的程序直接对外设(硬件端⼝)进⾏操作,如对磁盘进⾏读写,对打印机进⾏控制等,⽽在WINDOS操作系统下,⽤户只能通过特有的驱动程序才能对其进⾏操作,因为所有外设均被WINDOS操作系统统⼀管理,⽤户⽆法在⾃⼰的程序中对他门进⾏操作。
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 功能⼦程序被组成了⼀个⼤程序存放在内存单元中,从nn1:nn2 开始的单元中,在操作系统上电进⾏系统初始化时,将nn1:nn2 存放到了中断向量表中,0000H:0084H开始的连续4个单元中,当⽤户在⽤户程序中⽤INT 21H 调⽤DOS的某⼀个功能时,即控制程序转移到nn1:nn2 开始的程序,在这段程序中⾸先根据AH中的功能,可以分析出⽤户调⽤的哪⼀个功能从⽽在转到相应地⽅执⾏相应的程序段。
DOS系统功效调用系统日期[试验题目]:DOS系统功效调用—系统日期[试验目]:1 熟悉DOS操作中部分常见命令;2 掌握DOS功效调用中取系统日期方法;3 了解利用展转求余将机器二进制数转化为ASCII码方法。
[试验内容]:利用DOS功效调用2AH取系统目前日期, 返回参数后分别减1后显示在屏幕上(系统目前时间为/12/19, 要求在屏幕上显示字符串THE DATE IS: /11/18)。
[试验原理]:DOS是PC机上应用广泛操作系统, 其中包含了丰富服务程序, 这些程序为DOS 功效调用。
在此试验中, 主程序先利用DOS功效调用2AH取系统目前日期, 系统将各项参数自动放入默认寄存器中(年份放入CX中,月份放入DL中, 日期放入DL中), 再将放入寄存器中参数根据年, 月, 日次序移入事先开辟对应单元内(CX中年参数移入字单元YEAR中, DH中月参数移入字节单元MONTH中, DL中日参数移入字节单元DAY中), 然后将对应寄存器清零后, 将已经存入开辟单元中参数根据年, 月, 日次序移入对应寄存器内(年参数放入AX中, 月参数和日参数放入AL中), 将参数分别减1。
调用把二进制数转换为ASCII码子程序把被减过后参数以ASCII码字符形式显示在屏幕上。
子程序用展转求余法将被减过1后参数逐位转换为ASCII 码。
将放入AX中参数作为被除数, 将放入SI中参数10作为除数。
除余数放入DX中, 商继续放在AX中。
将放入DX中二进制余数加30H转化为ASCII码, 放入年参数末尾数字6对应地址内(即BX所指向内存地址内), 随即BX值减1指针前移以存放下一个字符。
AX中商继续除10, 反复上面过程直至将参数全部转化完成。
[试验设备]:装有MASM5.0PC机一台。
[试验步骤]:1源程序编辑:在DOS环境下利用命令‘D:\>MD HUIBIAN’命令在D盘下建立一目录名为HUI BIAN子目录, 并用‘D:/>CD HUIBIAN’命令将此目录设置为目前目录。
DOS功能的调⽤DOS功能的调⽤:主要包含三⽅⾯的⼦程序:设备驱动(基本I/O),⽂件管理和其他(包括内存管理,⾃取时间,⾃取终端向量,总之程序等)随着DOS版本的升级,这种DOS功能调⽤的⼦程序数量也在不断的增加,功能恶搞更加完备,使⽤也更加⽅便调⽤的⽅法可以按照下⾯⽅法调⽤DOS功能【1】根据需调⽤的功能调⽤准备⼊⼝参数,有部分调⽤是不需要⼊⼝参数的,但是⼤部分的功能调⽤需要⼊⼝参数,在调⽤前应该准备好⼊⼝参数【2】把功能调⽤号送到AH【3】发软中断指令INT 21H基本的I/O的调⽤1:带回响键盘输⼊(1号功能调⽤)功能:从标准输⼊设备上读⼀字符,并将该字符回显在标准输出设备上,通常情况下,输⼊设备就是键盘,输出设备就是屏幕,如果键盘⽆字符可读,则⼀直等待,直到有字符可读⼊⼝参数:⽆出⼝参数:AL = 督导字符的代码(ASCII码)说明:如果独到的字符是ctrl+c或者CTRL+Break,则结束⼯作2:不带回响键盘输⼊的输⼊(8号功能的调⽤)除读到的输⼊字符不在屏幕上显⽰意外,同1好功能调⽤相似3:直接键盘输⼊(7号调⽤功能)功能:从标准输⼊上读取⼀个字符,通常情况下,标准输⼊就是键盘,如果键盘⽆字符可读,则⼀直等待到有字符可读⼊⼝参数:⽆出⼝参数:AL= 读到字符的代码说明:不检查读到的字符是否是CTRL +C或者是CTRL+break 不回显读到的字符4:显⽰输出(2号功能嗲⽤)功能:向标准输⼊设备写⼀字符,通常情况下,标准输出设备就是屏幕⼊⼝参数:DL = 要输出的字符(ASCII码)出⼝参数:⽆说明:在显⽰输出时检查是否按照CTRL+C或者CTRL+Break5:直接控制台输⼊输出功能:字节控制台输⼊输出,通常情况下,控制台输⼊就是键盘输⼊,控制台输出就是屏幕输出⼊⼝参数:若DL = 0FFH,表⽰输⼊,否则表⽰输出出⼝参数:输⼊时:ZF =1 ,表⽰⽆字符可读,ZF= 0表⽰读到字符,AL= 输⼊字符代码;输出时:⽆说明:【1】:在输⼊时,如果⽆字符可读,并不等待【2】:不检查CTRL+C或者CTRL+Break【3】在读到字符时也不回显【4】再输⼊时,如果AL = 0,表⽰⽤户曾按下过⼀个扩展键,在下⼀次调⽤该功能是,返回该扩展按键的扫描码【5】在输出时,不解释表符等特殊控制符6:显⽰字符串(9号功能调⽤)功能:在标准输出上显⽰⼀个祝福穿,通常标准输出就是屏幕⼊⼝参数:DS:DS= 需要输出字符串的⾸地址,字符串字符‘$’为结束标志出⼝参数:⽆说明:在现实输出时检查是否按下:CTRL +C或者是CTRL+BREAK,如果是则结束程序输⼊字符串(0AH功能的调⽤)功能:从输⼊上读⼀个字符串,通常情况下,标准输⼊就是键盘⼊⼝参数:DS:DX = 缓冲区⾸地址出⼝参数:接收到的输⼊字符串在缓冲区中说明:(1)缓冲区第⼀字节置为缓冲区的最⼤容量,可以认为是⼊⼝参数,缓冲区第⼆字节存放实际读⼊的字符数,可认为是出⼝参数的⼀部分,第三字节开始存放接受的字符串(2)字符串以回车符结束,回车符是字符串接收到的最后⼀个字符(3)如果输⼊的字符串超过缓冲区所能容纳的最⼤字符数,则随后的输⼊字符被丢弃并且响铃,直到遇到回车符为⽌(4)如果在输⼊时按下CTRL+C或者CTRL+break,则程序结束(8)去键盘输⼊状态(0BH号功能的调⽤)功能:判别在标准输⼊设备上是否有字符可读⼊⼝参数:⽆出⼝参数:AL= 0 表⽰⽆字符可读 AL = 0FFH表⽰有字符可读(9)清楚缓冲区后再输⼊(0CH功能调⽤)功能:清除输⼊缓冲区要执⾏的功能号出⼝参数:决定于清除输⼊缓冲区后执⾏的功能说明:清除缓冲区后执⾏的功能室01h,06h,07h或者0Ah,如果不是这样,则不输⼊打印输出:(5号功能调⽤)功能:向链接在第⼀个并⾏⼝上的打印机输出⼀字符⼊⼝参数DL = 要打印字符的ASCII码出⼝参数:⽆说明:打印机可能不⽴即打印指定的字符⽰例代码:1 ;程序功能,写⼀个程序,他接受⼀个字符串,然后显⽰其中数字符的个数,英⽂字母的个数和字符串的个数23 MLENGTH = 1284 DSEG SEGMENT5 BUFF DB MLENGTH6 DB ?7 DB MLENGTH DUP(0)8 MESS0 DB 'Please input :$'9 MESS1 DB 'Length = $'10 MESS2 DB 'X = $'11 MESS3 DB 'Y = $'12 DSEG ENDS13 ;14 CSEG SEGMENT15 ASSUME CS:CSEG,DS:DSEG16 START: MOV AX,DSEG17 MOV DS,AX18 MOV DX,OFFSET MESS019 CALL DISPMESS20 MOV DX,OFFSET BUFF21 MOV AH,1022 INT 21H23 CALL NEWLINE24 MOV BH,025 MOV BL,026 MOV CL,BUFF+127 MOV CH,028 JCXZ COK29 MOV SI,OFFSET BUFF+23031 AGAIN:MOV AL,[SI]32 INC SI33 CMP AL,'0'34 JB NEXT35 CMP AL,'9'36 JA NODEC37 INC BH38 JMP SHORT NEXT39 NODEC: OR AL,20H40 CMP AL,'a'41 JB NEXT42 CMP AL,'z'43 JA NEXT44 INC BL45 NEXT: LOOP AGAIN46 ;47 COK: MOV DX,OFFSET MESS148 CALL DISPMESS49 MOV AL,BUFF+150 XOR AH,AH51 CALL DISPAL52 CALL NEWLINE53 ;54 MOV DX,OFFSET MESS255 CALL DISPMESS56 MOV AL,BH57 XOR AH,AH58 CALL DISPAL59 CALL NEWLINE60 ;61 MOV DX,OFFSET MESS362 CALL DISPMESS63 MOV AL,BL64 XOR AH,AH65 CALL DISPAL66 CALL NEWLINE67 ;68 ;暂停,任意键关闭69 mov ah,170int 21h71 mov ah,4ch ;结束,可以修改al设置返回码 72int 21h73 ;74 ;⼦程序名称:DISPAL75 ;功能:⽤⼗进制数的形式显⽰8位⼆进制数76 ;⼊⼝参数:AL =8位⼆进制数77 ;出⼝参数:⽆78 DISPAL PROC79 MOV CX,380 MOV DL,1081 DISP1:DIV DL82 XCHG AH,AL83 ADD AL,'0'84 PUSH AX85 XCHG AH,AL86 MOV AH,087 LOOP DISP188 MOV CX,389 DISP2: POP DX90 CALL ECHOCH91 LOOP DISP292 RET93 DISPAL ENDP94 ;95 ;显⽰dx所指的提⽰内容,其他⼦程序说明略96 ;97 DISPMESS PROC98 MOV AH,999 INT 21H100 RET101 DISPMESS ENDP102 ;103 ;104 ;显⽰dx所指的字符,其他⼦程序说明略105 ECHOCH PROC106 MOV AH,2107 INT 21H108 RET109 ECHOCH ENDP110 ;111 ;略去⼦程序NEWLINW,该⼦程序列于源程序ASM中112 NEWLINE PROC113 PUSH AX114 PUSH DX115 MOV DL,0DH116 MOV AH,2117 INT 21H118 MOV DL,0AH119 MOV AH,2120 INT 21H121 POP DX122 POP AX123 RET124 NEWLINE ENDP125126 CSEG ENDS127 END STARTView Code代码解析:DSEG中定义了缓冲区以及要提⽰的信息的字符常量DISPMESS PROCMOV AH,9INT 21HRETDISPMESS ENDP在主函数中调⽤DOS功能9显⽰提⽰字符变量;显⽰变量信息之后调⽤DOS功能10,获取字符变量,字符的参数⼊⼝地址是DX,之后调⽤NEWLINE在显⽰功能中调⽤的是DOS功能2,其中回车符的ASCII是0DH,换⾏符的ASCII的是0AH 最后的DOS调⽤时是使⽤1这个使得DOS暂停⼀下,看输出结果之后⽤BH数字符计数器和BL字母符计数器之后⽤变址寄存器SI指向字符串的⾸地址。
DOS系统功能调用及BIOS调用实验2.6.1 实验目的1、熟悉PC机中断系统的有关概念,了解中断向量表的作用。
2、掌握常用DOS系统功能调用的方法。
3、掌握BIOS中常用设备(如显示器、打印机等)驱动程序的调用方法。
2.6.2 实验预习要求1、复习常用DOS系统功能调用方法。
2、复习BIOS调用方法。
3、读懂“2.6.4 实验内容”中给出的源程序,以便上机调试。
4、从“2.6.5 实验习题”中任选一道题目,编写源程序,以便上机调试。
2.6.3中断系统、DOS系统功能调用及BIOS调用简介微型计算机系统为汇编用户提供了两个程序接口,一个是DOS系统功能调用,另一个是ROM中的BIOS(basic input/output system)。
系统功能调用和BIOS由一系列的中断服务程序构成,它们使得程序设计人员不必详细了解硬件的内部结构和工作原理,直接调用这些中断服务程序就可以使用系统的硬件,尤其是I/O设备的使用与管理。
如下表所示,IBM PC中断系统为了识别和响应每一种中断,将它们赋以00~FFH中断类型号,故中断系统能处理256种中断。
每种类型的中断都对应一个中断服务程序,每个中断服务程序的入口地址包括该程序所在段的段地址和段内偏移地址,需4个存储单元来存放。
将256种中断对应的中断服务程序排成一张表,放在内存底端00000H~003FFH单元中,系统在响应中断时根据得到的中断类型号到该表对应的四个存储单元中即可找到要执行的中断服务程序的入口地址。
PC机中断向量表分类中断类型号中断向量所在存储单元地址功能分类中断类型号中断向量所在存储单元地址功能系统内部中断BIOS 00H 000~003H 除数为0设备驱动BIOS18H 060~063H ROM BASIC 01H 004~007H 单步执行19H 064~067H 系统自举02H 008~00BH 外部非屏蔽中断1AH 068~06BH 日时钟I/O 03H 00C~00FH 断点1BH 06C~06FH 键盘中断地址04H 010~013H 溢出1CH 070~073H 定时器报时05H 014~017H 打印屏幕1DH 074~077H 显示器参数06H 018~01BH 保留1EH 078~07BH 软盘参数07H 01C~01FH 保留1FH 07C~07FH 图形字符扩展8 级外部中断BIOS 08H 020~023H 日时钟磁盘操作系统DOS20H 080~083H DOS程序结束09H 024~027H 键盘21H 084~087H DOS功能调用0AH 028~02BH 保留22H 088~08BH 程序结束地址0BH 02C~02FH 串口通信2 23H 08C~08FH Ctrl+Break 0CH 030~033H 串口通信1 24H 090~093H 标准错误出口0DH 034~037H 硬盘25H 094~097H 绝对磁盘读0EH 038~03BH 软盘26H 098~09BH 绝对磁盘写0FH 03C~03FH 打印机27H 09C~09FH 程序结束驻留28~2FH 0A0~0FFH DOS保留设备驱动BIOS 10H 040~043H 显示特殊中断30~5FH 100~17FH 系统保护11H 044~047H 设备配置60~7FH 180~1FFH 用户使用12H 048~04BH 存储容量80~F0H 200~2C3H BASIC使用13H 04C~04FH 磁盘I/O F1~FFH 2C4~3FFH 用户使用14H 050~053H 通信I/O15H 054~057H 录音机I/O16H 058~05BH 键盘I/O17H 05C~05FH 打印机I/O从功能上分,中断向量表中中断类型可分为三类:1、磁盘操作系统DOS提供的中断服务程序,中断类型号从20H到2FH。
福建农林大学计算机与信息学院(程序设计类课程)实验报告课程名称:汇编语言姓名:系:计算机系专业:计算机专业年级:09级学号:指导教师:职称:2011年12 月30 日实验项目列表福建农林大学计算机与信息学院实验报告系:计算机专业:计算机科学与技术年级: 2009 姓名:学号:实验室号田507 计算机号 79实验时间:11.11.22 指导教师签字:成绩:实验四 DOS功能调用一、实验目的(1)学会DOS中关于显示功能调用指令的用法;(2)领会修改显存方法显示字符。
二、实验内容1)输入一个字符,显示出来。
2)输入一个字符串,显示出来。
3)BUF开始的3个16位二进制数用十六进制数的形式显示出来。
(1)理解程序(2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。
(3)如果要分行显示,程序要如何修改?DATA SEGMENTBUF DW 4F59H, 56A8H, 0FF90HDATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART: MOV AX, DA TAMOV DS, AXMOV SI, 0P: MOV BX, BUF[SI]MOV CH, 4L: MOV CL, 4ROL BX, CLMOV DL, BLAND DL, 0FHCMP DL, 10JB NEXTADD DL, 7NEXT: ADD DL, 30HMOV AH, 2INT 21HDEC CHJNZ LINC SIINC SICMP SI, 4JNA PMOV AH, 4CHINT 21HCODE ENDSEND START4)直接改变显存内容显示。
(1)显存空间分配:内存地址空间中,B8000H-BFFFFH共32KB的空间,为80×25彩色字符模式显示缓冲区。
向这个地址空间写入数据,写入的内容将立即出现在显示器上。
80×25=2000个字符,每个字符在缓冲区中占2个字节,一个字节存放ASCII码,一个字节存放字符属性(字符颜色、字符背景颜色、闪烁、高亮度)(2)偏移地址计算:如第2行,第40列:(2-1)×160+40×2 这个偏移地址中存放字符的ASCII码,(2-1)×160+40×2+1这个偏移地址中存放字符的属性。