实验六 DOS功能调用程序设计
DOS功能调用及汇编语言程序设计举例

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中的功能,可以分析出⽤户调⽤的哪⼀个功能从⽽在转到相应地⽅执⾏相应的程序段。
2021年微机原理设计性实验报告DOS系统功能调用系统日期

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功能调用演示

功能:与1号功能相似。但不屏显。 3、不带显示的键盘字符输入(7号功能) 功能:与1号功能相似。但不屏显,且不响应CTRL+ C和TAB。 4、字符串输入(0AH号功能) 功能:可接受一串字符,用CTRL+C中断。
使用前,须在内存中建立一缓冲区,第一个字节存 放它保存的最大字符数(1~255,不能为0),该值由用 户程序事先设置;第2个字节存放实际调用的字符数(回 车除外),此数由DOS自动填入。用户输入的字符串从 第3个字节开始存放,直至回车结束(自动将回车符的 ASC码0DH加在末尾),如输入的字符超过缓冲区容量, 则多余字符不能存入。调用时须将DS、DX寄存器指向 缓冲区的段基址和偏移量。
补充: DOS功能子程序调用 DOS有许多功能子程序(84个),分为磁盘读写控 制、文件管理、目录管理、内存管理、基本输入/输出管 理等几类。 调用方法:
(1)送入口参数给指定寄存器
(2)AH←功能号
(3)INT 21H
1、带显示的键盘输入(1号功能) 功能:等待键盘输入一个字符,将其ASC码送AL,并 屏显。按CTRL+BREAK(CTRL+C)终止。 2、不带显示的键盘输入(8号功能)
2、组合型加法校正指令DAA
功能:在执行DAA前,已用过ADD或ADC指令,且加法 运算结果已在AL中,执行DAA即对AL中的数据进行校 正,校正结果仍在AL中,向高位的进位仅在CF中。
(1)若AL中低4位的数>9或AF=1,则AL=(AL)+6,AF←1 (2)若AL中高4位的数>9或CF=1,则AL=(AL)+60H,CF←1 3、非组合型减法校正指令AAS 功能:在执行AAS前,已用过SUB或SBB指令,且减法运 算结果已在AL中,执行AAS即对AL中的数据进行校正, 校正结果仍在AL中,向高位的借位放在AH和CF中。 若AL中低4位>9或AF=1,则AL=(AL)-6,AH =(AH)-1,且把AL中高4位清0,CF、AF置1。 4、组合型减法校正指令DAS 功能:在执行DAS前,已用过SUB或SBB指令,且减法运 算结果已在AL中,执行DAS即对AL中的数据进行校正, 校正结果仍在AL中,向高位的借位仅在CF中。 (1)若AL中低4位的数>9或AF=1,则AL=(AL)-6,AF←1 (2)若AL中高4位的数>9或CF=1,则AL=(AL)-60H,CF←1
DOS功能的调用

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功能调用程序设计

附录
编写实验报告
DOS功能调用程序设计 DOS功能调用程序设计 实验内容 1、实验内容 1)键盘输入字符(或字符串)并显示程序设计 键盘输入字符(或字符串) 2)显示器上显示26个英文字符程序设计(一个个显示)。 显示器上显示26个英文字符程序设计(一个个显示)。 26个英文字符程序设计
2、实验目的 了解DOS功能调用程序结构,掌握其编程与调试方法。 了解DOS功能调用程序结构,掌握其编程与调试方法。 DOS用程序设计 DOS功能调用程序设计
见附录) 6、实验报告要求(见附录)
1)实验报告要求有实验目的、要求、 1)实验报告要求有实验目的、要求、设备或仪 实验报告要求有实验目的 程序设计、步骤、数据分析。 器、程序设计、步骤、数据分析。数据分析填 报告本的原始数据栏 原始数据栏。 在报告本的原始数据栏。 2)画出实验内容1)2)程序设计流程图 画出实验内容1)2)程序设计流程图、 2)画出实验内容1)2)程序设计流程图、写出程 序清单并有简要注释。 序清单并有简要注释。 3)写出实验过程中所遇到的问题与解决的办法 写出实验过程中所遇到的问题与解决的办法。 3)写出实验过程中所遇到的问题与解决的办法。
数据分析并记录
DOS功能调用程序设计 DOS功能调用程序设计 1)工作原理 5、程序设计 1)工作原理 DOS系统中设置了两层内部子程序可供用户使用 系统中设置了两层内部子程序可供用户使用: DOS系统中设置了两层内部子程序可供用户使用: 基本输入输出模块BIOS DOS层功能模块 BIOS, 基本输入输出模块BIOS,DOS层功能模块 DOS系统功能调用 类型码:21H) 系统功能调用( DOS系统功能调用(类型码:21H) 为了使用方便, DOS层功能模块所提供的100个子程序 层功能模块所提供的100 为了使用方便,将DOS层功能模块所提供的100个子程序 00H~63H统一顺序编号 为了掌握DOS系统I/O 统一顺序编号, DOS系统I/O功能调用和 从00H~63H统一顺序编号,为了掌握DOS系统I/O功能调用和 参数使用的方法。DOS系统I/O功能调用可以通过 系统I/O功能调用可以通过INT 21H软中 参数使用的方法。DOS系统I/O功能调用可以通过INT 21H软中 断指令调用DOS系统功能,调用方法如下: DOS系统功能 断指令调用DOS系统功能,调用方法如下:
DOS功能调用

缓冲区第一个字节是可输入的最大字符数+1;第二个 字节是系统在调用该功能时,自动填入的本次调用时实际输 入的字符个数;从第三个字节开始存放输入字符的ASCII码。
当用户输入回车键时,结束输入,并将回车键的ASCII 码(0DH)作为最后一个字符送入缓冲区。但它不计入实际 输入字符个数。 调用入口参量: DS:DX寄存器指向输入缓冲区的段基值:偏移量 CHAR_BUF DB 31H ;缓冲区的最大长度 DB 0 ;存实际输入字符数 DB 31H DUP(0);输入缓冲区 ...... MOV DX,SEG CHAR_BUF;如果DS已经指向CHAR_BUF所在 MOV DS,DX ;数据段,则可以省去这两条指令 MOV DX,OFFSET CHAR_BUF MOV AH,0AH INT 21H
10、设置系统日期(2BH号功能) 该功能用来改变计算机CMOS中的系统日期。入口参数: CX<=年号(1980—2099) DH<= 月号(1—12) DL<= 日(1—31) 返回参数在AL中,成功设置,则返回(AL)=0,否则(AL)=0FFH 例如: MOV CX,2008 MOV DH,4 MOV DL,15 MOV AH,2BH INT 21H CMP AL,0 JNE ERROR ;转出错处)
执行该功能将获得系统的当前时间。返回的时 间参数存放在指定的寄存器中:
CH:小时(0—23) CL:分(0—59) DH:秒(0—59) DL:百分秒(0—99) 例如: HOUR DB ? MINUTES DB ? SECOND DB ? ...... MOV AH,2CH INT 21H MOV HOUR,CH MOV MINUTES,CL MOV SECOND,DH
1、带显示的键盘输入(1号功能) 调用该功能子程序将等待键盘输入,直到按下一个键。将 字符的ASCII码送入AL寄存器,并在屏幕上显示该字符。如果 是Ctrl-C组合键,则停止程序运行。如果是TAB键,屏幕上光 标自动扩展到紧接着的8个字符位置后面,该功能调用无入口 参量。 MOV AH,01H INT 21H
微机原理与接口技术实验指导 6_DOS系统功能调用及BIOS调用实验
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。
DOS系统功能调用 (21H类型中断调用)
stri DB‘Tsinghua University’,‘$’
data ENDS
code SEGMENT
ASSUME CS:code, DS:data
start: MOV AX, data ;置缓冲区地址于DS:DX
MOV DS, AX
LEA DX, stri
129E:0003 8ED8 MOV DS , AX
129E:0005 8D160000 LEA DX , [0000]
129E:0009 B40A MOV AH , 0A
129E:000B CD21 INT 21
129E:000D B500 MOV CH , 00
129E:000F 8A0E0100 MOV CL , [0001]
129F:000B CD21 INT 21
129F:000D 8D160F00 LEA DX ,[000F]
129F:0011 B40A MOV AH , 0A
129F:0013 CD21 INT 21
129F:0015 B44C MOV AH , 4C
129F:0017 CD21 INT 21
-D 129D:0 L20 ;执行程序前查看data段内容
-G 000D ;执行程序
Hello ;从键盘输入字符串
Program terminated normally
-D 129D:0 L10 ;查看程序执行后缓冲区内容
129D:0000 0B 05 48 65 6C 6C 6F 0D-00 00 00 00 00 00 00 00 ..Hello.........
129D:0000 50 6C 65 61 73 65 20 49-6E 70 75 74 20 3A 24 0B Please Input :$.
DOS功能调用
AGAINF:MOVAX, 0601H; 向上滚动一行 MOVBH, 3CH; MOVCX, 1400H; 20 行 0 列 MOVDX, 174FH; 23 行 79 列 INT10H; MOVAH, 01; 读键盘 INT16H; JNEDOWN; 有键被按动则结束 MOVAL, C1; 否则继续
AGAIND:MOVCX, 28000#; DLOOP:LOOPDLOOP#; DECBX#; CMPBX, 0#; JNEAGAIND#; CMPAL, ′Z′; 修改C1 中的内容( ′A′→ ′Z′)#; JED1#; INCC1#;
JMPAGAINF#; D1:MOVC1, ′A′#; JMPAGAINF#; DOWN:MOVAX, 03H#; INT10H#; MOVAH, 4CH#; INT21H#; CODEENDS#; ENDSTART
INT21H; LEADX, BUFIN; MOVAH, 0AH; 读一字符串送入BUFIN INT21H; MOVAL, BUFIN+1; 取实际输入的字符个数 CBW; LEASI, BUFIN+2; ADD SI, AX; MOVBYTE PTR [ SI ] , ′$′; ′$′ 送 到 输 入 字 符 串 的 末 尾 LEADX, CRLF;
CRLFDB 0DH, 0AH, ′$′; STRING2DB ′PLEASE INPUT STRING.′, 0DH, 0AH, ′$′; BUFINDB 20H; DB ?; BUFIN1DB 20H DUP(?); DATAENDS; CODESEGMENT; ASSUMECS:CODE, DS:DATA, SS:STACK; START:MOVAX, DATA;
例 4.3.19 从键盘上输入一字符串, 将其送入输入缓冲 区, 并显示这组字符串. 程序如下: STACK SEGMENT DW 40 DUP(?); TOPLABEL[KG*2] WORD; STACKENDS; DATASEGMENT; STRING1DB ′DO YOU WANT TO INPUT STRING? (Y/N):$′; STACK;
汇编语言-DOS功能调用
福建农林大学计算机与信息学院(程序设计类课程)实验报告课程名称:汇编语言姓名:系:计算机系专业:计算机专业年级: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这个偏移地址中存放字符的属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验设备 仿真软件使用
DOS功能调用程序设计 DOS功能调用程序设计 d. 对原程序进行汇编与链接,通过观察输出 对原程序进行汇编与链接, 窗口的信息,确定对汇编程序的修改。有错误, 窗口的信息,确定对汇编程序的修改。有错误, 进行修改,随即汇编与链接,直到无错误为止, 进行修改,随即汇编与链接,直到无错误为止, .exe可执行的文件 可执行的文件。 形成 *.exe可执行的文件。 在调试界面中采用不同方式调试程序( e. 在调试界面中采用不同方式调试程序(采用 单步、连续等运行方式,调试程序),执行程 单步、连续等运行方式,调试程序) 序观察结果。 序观察结果。
DOS功能调用程序设计 DOS功能调用程序设计 实验内容 1、实验内容 1)键盘输入字符(或字符串)并显示程序设计 键盘输入字符(或字符串) 2)显示器上显示26个英文字符程序设计(一个个显示)。 显示器上显示26个英文字符程序设计(一个个显示)。 26个英文字符程序设计
2、实验目的 了解DOS功能调用程序结构,掌握其编程与调试方法。 了解DOS功能调用程序结构,掌握其编程与调试方法。 DOS功能调用程序结构
数据分析并记录
DOS功能调用程序设计 DOS功能调用程序设计 1)工作原理 5、程序设计 1)工作原理 DOS系统中设置了两层内部子程序可供用户使用 系统中设置了两层内部子程序可供用户使用: DOS系统中设置了两层内部子程序可供用户使用: 基本输入输出模块BIOS DOS层功能模块 BIOS, 基本输入输出模块BIOS,DOS层功能模块 DOS系统功能调用 类型码:21H) 系统功能调用( DOS系统功能调用(类型码:21H) 为了使用方便, DOS层功能模块所提供的100个子程序 层功能模块所提供的100 为了使用方便,将DOS层功能模块所提供的100个子程序 00H~63H统一顺序编号 为了掌握DOS系统I/O 统一顺序编号, DOS系统I/O功能调用和 从00H~63H统一顺序编号,为了掌握DOS系统I/O功能调用和 参数使用的方法。DOS系统I/O功能调用可以通过 系统I/O功能调用可以通过INT 21H软中 参数使用的方法。DOS系统I/O功能调用可以通过INT 21H软中 断指令调用DOS系统功能,调用方法如下: DOS系统功能 断指令调用DOS系统功能,调用方法如下:
附录
编写实验报告
微机原理与应用
实验五 DOS功能调用 功能调用程序设计 实验五、DOS功能调用程序设计
实验重点:理解DOS中断程序的结构、调试方法, 实验重点:理解DOS中断程序的结构、调试方法,数据与现象分析 DOS中断程序的结构 实验难点:DOS中断程序的设计方法 实验难点:DOS中断程序的设计方法
DOS功能调用程序设计 DOS功能调用程序设计 具体做的事情: 具体做的事情: * 实验内容理解(包括实验目的) 实验内容理解(包括实验目的) * 了解DOS功能调用程序结构、编写方法 了解DOS功能调用程序结构、 DOS功能调用程序结构 * 上机实践熟悉汇编语言程序开发过程及调试方法 * 数据分析并记录 * 编写实验报告
将所调用的过程的功能号00H~63H送到寄存器AH中 功能号00H 送到寄存器AH (1)将所调用的过程的功能号00H~63H送到寄存器AH中; 按要求把入口参数传送到所要求的寄存器(AL,DL) 入口参数传送到所要求的寄存器 (2)按要求把入口参数传送到所要求的寄存器(AL,DL); 通过INT 21H指令即可调用相应的过程 指令即可调用相应的过程; (3)通过INT 21H指令即可调用相应的过程; 出口参数也可在规定的寄存器中得到 也可在规定的寄存器中得到。 (4)出口参数也可在规定的寄存器中得到。
实验设备 仿真软件使用
DOS功能调用程序设计 DOS功能调用程序设计
3、实验设备与仪器
PC机 emu8086仿真软件。 PC机、emu8086仿真软件。 仿真软件
4、实验步骤
a. 检查实验设置外接电源,开启PC机。 检查实验设置外接电源,开启PC机 PC 进入软件集成操作环境主界面, NEW建立新 b. 进入软件集成操作环境主界面,按NEW建立新 文件,即可开始输入源程序。 文件,即可开始输入源程序。 输入程序后, Ctrl+S保存程序 保存程序( c. 输入程序后,按Ctrl+S保存程序(规定扩展 .asm源程序文件 源程序文件)。 名为 *.asm源程序文件)。
上机操作开发汇编程序
Hale Waihona Puke 2)参考程序显示器上显示A 26个英文字母 显示器上显示A-Z 26个英文字母 CODE SEGMENT ASSUME CS:CODE START: MOV CX,001AH MOV BL,41H MOV AH,01H A1: MOV AL,BL MOV AH,02 MOV DL,AL INT 21H INC BL A2: DEC CX ;loop a1 JNZ A1 A3: JMP A3 CODE ENDS END START
编写实验报告
DOS功能调用程序设计 DOS功能调用程序设计
见附录) 6、实验报告要求(见附录)
1)实验报告要求有实验目的、要求、 1)实验报告要求有实验目的、要求、设备或仪 实验报告要求有实验目的 程序设计、步骤、数据分析。 器、程序设计、步骤、数据分析。数据分析填 报告本的原始数据栏 原始数据栏。 在报告本的原始数据栏。 2)画出实验内容1)2)程序设计流程图 画出实验内容1)2)程序设计流程图、 2)画出实验内容1)2)程序设计流程图、写出程 序清单并有简要注释。 序清单并有简要注释。 3)写出实验过程中所遇到的问题与解决的办法 写出实验过程中所遇到的问题与解决的办法。 3)写出实验过程中所遇到的问题与解决的办法。