实 验 报 告 课程名称: 微机原理与接口技术 实验名称:实验四字符及字符串的输入和输出 专 业: 计算机科学与技术 学 号: 姓 名: 实验地点: 系统结构实验室 实验日期: 2019 任课教师: |
实 验 目 的 | 1.熟悉如何进行字符及字符串的输入输出。 2.掌握简单的DOS系统功能调用。 |
实 验 要 求 | 1.复习DOS系统功能调用的1、2、9、10号功能。 2.实验之前按照题目要求预先编写好实验内容中的程序段。 3.实验之前预习实验内容并写好实验预习部分。 |
实验环境 | 台式机一台 Windows XP 操作系统 Turbo Debugger调试工具 MASM汇编程序 |
实验预习 | 1.使用DOS功能调用一般需要哪几个步骤? 1.把调用参数装入指定的寄存器中; 2.如需功能号,把它装入AH; 3.如需子功能号,把它装入AL; 4.执行INT 21H调用DOS或BIOS中断; 5.检查返回参数是否正确。 2.常用的DOS输入输出功能调用有哪些? 01H: 键盘输入。AL=输入字符,输入的字符将在屏幕上回显。 MOV AH,01H INT 21H 02H: 显示输出。DL=待输出显示的字符。 MOV DL,’字符’ MOV AH,02H INT 21H 09H: 显示字符串。DS:DX=字符串(首)地址,字符串以'$'(24H)结尾。 MOV DX,字符串首地址 MOV AH,09H INT 21H 0AH: 输入字符串。DS:DX=缓冲区地址。 MOV DX,已定义缓冲区的偏移地址 MOV AH,0AH INT 21H 0BH: 判定标准输入设备是否又输入。若AL=0,没有输入;若AL=FFH,已有输入。 3.使用0AH号DOS功能调用时,程序员应事先定义好缓冲区,缓冲区第1、2、3字节分别存放的是什么? 执行前先定义一个输入缓冲区,缓冲区内第一个字节为允许最多输入的字符个数,包括回车符0DH在内,不能为“0”值。 第二个字节保留,在执行程序完毕后存入输入的实际字符个数,不包括回车符。 从第三个字节开始存入键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0;若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用。 4.DOS功能调用与ROM-BIOS功能调用的相同点和不同点分别是什么?什么情况下只能采用ROM-BIOS功能调用? 相同点:有些DOS功能调用和BIOS中断调用能完成同样的功能。 不同点:DOS本身是一种操作系统,DOS功能是操作系统做好的程序集,用于给操作系统的用户调用。BIOS是内存只读部分的内容,BIOS里面是硬件本身就做好的程序,可供CPU访问使用。 有些情况下,必须使用BIOS中断调用,例如,INT 17H中断的2号调用为读打印机状态,DOS功能调用无这种功能,只能使用BIOS中断调用。 |
实 验 内 容 与 实 验 结 果 | 1.输入以下程序段并用F8键单步运行,执行INT 21H指令时,在键盘上按“0”键。 MOV AH,01H INT 21H (1)运行结束后,(AL)=?它是哪一个键的ASCII码? (2)重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“0”键,观察运行结果有何变化? 在键盘上按“A”键: (AL)= 在键盘上按“B”键: (AL)= 在键盘上按“C”键: (AL)= 在键盘上按“D”键: (AL)= 2.输入以下程序段并运行之。 MOV DL,41H MOV AH,02H INT 21H (1)观察屏幕上的输出,是否显示了“A”字符? (2)分别用42H、61H、62H、30H、31H代替程序段中的41H,观察屏幕上的输出有何变化。 3.在DS:0000H开始的内存区域设置如下键盘缓冲区: DS:0000H 0A,0,0,0,0,0,0,0,0,0,0,0 然后输入以下程序段并用F8键单步运行 LEA DX,[0000H] MOV AH,0AH INT 21H 执行INT 21H指令时, (1) 在键盘上键入“1”、“2”、“3”、“4”、“5”、“6”、〈回车〉这7个键。 检查DS:0000H开始的内存区域,DS:0001H单元的内容是 06 它表示实际输入的字符个数是6 ,从DS:0002H开始的内存区域中的内容是 31,32,33,34,35,36,0D,0,0,0 (2) 在键盘上键入“1”、“2”、“3”、“4”、“5”、“6”、“8”、“9”、〈回车〉这10个键 检查DS:0000H开始的内存区域,DS:0001H单元的内容是 08 它表示了实际输入的字符个数是8 ,从DS:0002H开始的内存区域中的内容是 31,32,33,34,35,36,38,39,0D,0 (3) 在键盘上键入“1”、“2”、“3”、“4”、“5”、“6”、“8”、“9”、“0”、〈回车〉这11个键 能否输入这11个键?为什么?DS:0000H单元的内容有什么含义? 能,因为缓冲区的字节有12个,除去第一个字节表示最多允许输入的个数0AH和第二个字节表示实际输入的字节个数9,那么还剩10个字节,则可以输入10个字节,因此可以输入这11个键。 DS:0000H单元的内容低位表示最多最多允许输入的字符个数,高位表示实际输入的字符个数。 4.完善以下程序,能够在屏幕上输出用户输入的字符串。 DSEG SEGMENT BUFF DB 10 ;该字节单元存放的是允许最多输入的字符个数是10 DB ? ;该字节单元存放的是 输入的实际字符个数 DB 10 DUP (0) ;从该字节单元开始存放的是 接收的字符的ASKII码,其余单元自动清0 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX 字符串截取前四位MOV DX,OFFSET BUFF MOV AH,0AH ;调用0A功能输入字符串 INT 21H MOV AH,02H MOV DL,0DH ;回车 INT 21H MOV AH,02H 实 验 内容 与 实验 结 果 MOV DL,0AH ;换行 INT 21H MOV DI, OFFSET BUFF MOV CH,0 MOV CL, [DI+1] ADD DI, 2 AGAIN:MOV DL, [di] MOV AH, 02H INT 21H ADD DI,1 LOOP AGAIN MOV AH,4CH INT 21H CSEG ENDS END START 5.试编写一个汇编语言源程序:先提示输入数字“Input Number:0~9”,然后在下一行显示输入的数字,结束;如果不是键入了 0~9 数字,就提示错误“Error!”,继续等待输入数字。并上机验证(将运行过程截图)。 .model small .stack .data inmsg db ‘Input Number:0 ~ 9’,0dh,0ah,’$’ ermsg db ‘Error!’,’$’ .code .startup mov dx,offset inmsg mov ah,09h int 21h ;显示输入数字0~9 again: mov ah,01h int 21h ;接受一个字符 cmp al,’0’ ;判断是否输入的是数字0~9 jb erdisp cmp al,’9’ ja erdisp mov dl,al mov ah,2 int 21h ;显示输入的数字 jmp done ;结束 erdisp: mov dx,offset ermsg mov ah,9 int 21h ;显示输入错误 jmp again ;继续输入 done: .exit end 实 验 内容 与 实验 结 果 |
心 得 体 会、(100字以上) | |
评语及成绩 | |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论