实  验  报  告
课程名称:  微机原理与接口技术 
实验名称:实验四字符及字符串的输入和输出   
专    业:  计算机科学与技术 
学    号:         
姓    名:               
实验地点:  系统结构实验室   
实验日期:      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 Number0 ~ 9’,0dh,0ah,’$’ 
ermsg  db ‘Error!’,’$’
.code 
.startup 
mov dx,offset inmsg 
mov ah,09h
int 21h                ;显示输入数字09 
again:  mov ah,01h 
int 21h                ;接受一个字符
cmp al,’0’            ;判断是否输入的是数字09 
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小时内删除。