试验四字符及字符串的输入和输出微机原理与接口技术
实验报告 课程名称:微机原理与接口技术 实验名称: 实验四字符及字符串的输入和输出 专业:计算机科学与技术 学号: 姓名: 实验地点:系统结构实验室 实验日期:2019 任课教师: 实实 验验 目目 的的 实实 验验 要要 求求 1.熟悉如何进行字符及字符串的输入输出。 2.掌握简单的DOS系统功能调用。 1.复习 DOS 系统功能调用的 1、2、9、10 号功能。 2.实验之前按照题目要求预先编写好实验内容中的程序段。 3.实验之前预习实验内容并写好实验预习部分。 实验实验 环境环境 台式机一台 Windows XP 操作系统 Turbo Debugger调试工具 MASM 汇编程序 1.使用 DOS 功能调用一般需要哪几个步骤? 1.1.把调用参数装入指定的寄存器中;把调用参数装入指定的寄存器中; 2.2.如需功能号,把它装入如需功能号,把它装入 AHAH;; 3.3.如需子功能号,把它装入如需子功能号,把它装入 ALAL;; 4.4.执行执行 INT 21HINT 21H 调用调用 DOSDOS 或或 BIOSBIOS 中断;中断; 5.5.检查返回参数是否正确。检查返回参数是否正确。 2.常用的 DOS 输入输出功能调用有哪些? 01H01H:: 键盘输入。键盘输入。AL=AL=输入字符,输入的字符将在屏幕上回显。输入字符,输入的字符将在屏幕上回显。 MOV AH,01HMOV AH,01H INT 21HINT 21H 02H02H:: 显示输出。显示输出。DL=DL=待输出显示的字符。待输出显示的字符。 MMOV DL,’OV DL,’字符字符’ ’ MOV AH,02HMOV AH,02H INT 21HINT 21H 09H09H:: 显示字符串。显示字符串。DS:DX=DS:DX=字符串字符串( (首首) )地址,字符串以地址,字符串以 $ $ ((24H24H)结尾。)结尾。 MOV DX,MOV DX,字符串首地址字符串首地址 MOV AH,09HMOV AH,09H INT 21HINT 21H 0AH0AH:: 输入字符串。输入字符串。DS:DX=DS:DX=缓冲区地址。缓冲区地址。 MOV DX,MOV DX,已定义缓冲区的偏移地址已定义缓冲区的偏移地址 MOV AH,0AHMOV AH,0AH INT 21HINT 21H 0BH0BH:: 判定标准输入设备是否又输入。若判定标准输入设备是否又输入。若 AL=0,AL=0,没有输入;若没有输入;若 AL=FFHAL=FFH,已有输入。,已有输入。 实验实验 预习预习 3.使用 0AH 号 DOS 功能调用时,程序员应事先定义好缓冲区,缓冲区第1、2、3 字节分别存放的是什么? 执行前先定义一个输入缓冲区,执行前先定义一个输入缓冲区, 缓冲区内第一个字节为允许最多输入的字符个缓冲区内第一个字节为允许最多输入的字符个 数,包括回车符数,包括回车符 0DH0DH 在内,不能为“在内,不能为“0 0”值。”值。 第二个字节保留,在执行程序完毕后存入输入的实际字符个数第二个字节保留,在执行程序完毕后存入输入的实际字符个数, ,不包括回车符。不包括回车符。 从第三个字节开始存入键盘上接收字符的从第三个字节开始存入键盘上接收字符的 ASCIIASCII 码。若实际输入的字符个数少于码。若实际输入的字符个数少于 定义的最大字符个数,定义的最大字符个数,则缓冲区其他单元自动清则缓冲区其他单元自动清 0 0;若实际输入的字符个数大于定;若实际输入的字符个数大于定 义的字符个数,其后输入的字符丢弃不用。义的字符个数,其后输入的字符丢弃不用。 4.DOS 功能调用与 ROM-BIOS 功能调用的相同点和不同点分别是什么?什么情况 下只能采用 ROM-BIOS 功能调用? 相同点:有些相同点:有些 DOSDOS 功能调用和功能调用和 BIOSBIOS 中断调用能完成同样的功能。中断调用能完成同样的功能。 不同点:不同点:DOSDOS 本身是一种操作系统,本身是一种操作系统,DOSDOS 功能是操作系统做好的程序集,用于给操功能是操作系统做好的程序集,用于给操 作系统的用户调用。作系统的用户调用。BIOSBIOS 是内存只读部分的内容,是内存只读部分的内容,BIOSBIOS 里面是硬件本身就做好的里面是硬件本身就做好的 程序,可供程序,可供 CPUCPU 访问使用。访问使用。 有些情况下,必须使用有些情况下,必须使用 BIOSBIOS 中断调用,例如,中断调用,例如,INT 17HINT 17H 中断的中断的 2 2 号调用为读打印号调用为读打印 机状态,机状态,DOSDOS 功能调用无这种功能,只能使用功能调用无这种功能,只能使用 BIOSBIOS 中断调用。中断调用。 实实 验验 内内 容容 与与 实实 验验 结结 果果 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:0000H0A,0,0,0,0,0,0,0,0,0,0,0 然后输入以下程序段并用F8 键单步运行 LEADX,[0000H] MOV AH,0AH INT 21H 执行 INT 21H 指令时, (1) 在键盘上键入“1” 、 “2” 、 “3” 、 “4” 、 “5” 、 “6” 、 〈回车〉这 7 个键。 检查 DS:0000H 开始的内存区域,DS:0001H 单元的内容是06 它表示实际输入的字符个数是实际输入的字符个数是 6 6,从 DS:0002H 开始的内存区域中的内容是 31 1,, 3232,,3333,,3434,,3535,,3636,,0D0D,,0 0,,0 0,,0 0 (2) 在键盘上键入“1” 、 “2” 、 “3” 、 “4” 、 “5” 、 “6” 、 “8” 、 “9” 、 〈回车〉这 10 个 键 检查 DS:0000H 开始的内存区域,DS:0001H 单元的内容是08 它表示了实际输入的字符个数是实际输入的字符个数是 8 8,从 DS:0002H 开始的内存区域中的内 容是 3131,,3232,,3333,,3434,,3535,,3636,,3838,,3939,,0D0D,,0 0 (3) 在键盘上键入“1” 、 “2” 、 “3” 、 “4” 、 “5” 、 “6” 、 “8” 、 “9” 、 “0” 、