微机原理第三次实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三DOS中断调用实验实验报告
健行理工1402班陈丽红 201424450202
一、实验目的
掌握字符和数据的显示方法。
二、实验内容
先显示信息“INPUTSTRING,THE END FLAG IS $”再接收字符。如为0-9,则计数器加1,并显示计数,如为非数字,则直接显示,但不计数。
三、程序框图
开始
段寄存器和堆栈段初始化
数字字符计数器清0
回车换行
显示提示信息
接收键入字符并显示
是$字符
调用QUI,返回
DOS
结束
是回车键
是0-9
计数器BX加1,保存计数器的
值后将其转化为ASCII码
回车换行
显示计数结果
回车换行
调用DISP,显示字符Y
N
Y
Y
N
N
四、程序说明
本次实验重点在于了解中断调用的步骤:(1)准备入口参数;(2)功能号送AH;(3)执行INT n命令,熟练掌握向量号21H的部分常用功能调用。
程序设计时通过对输入的字符进行判断,根据判断结果进入不同的子程序段运行,显示运行结果。
五、源程序清单与执行结果
5.1 源程序清单
DATA SEGMENT ;定义数据段,DATA为
D1 DB 'INPUTSTRING, THE LAST FLAG IS', 0DH, 0AH,'$' 段名,将信息存放在
D2 DB 0DH, 0AH, '$' D1,D2中
DATA ENDS
STACK SEGMENT STACK ;定义堆栈段
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT ;说明代码段、数据段、堆栈段 ASSUME CS:CODE,DS:DATA,SS:STACK
BG: MOV AX,DATA
MOV DS, AX ;给DS赋段值
MOV BX, 0 ;数字字符计数器BX清0
JMP L1 ;跳转至L1
QUI: MOV AH,4CH ;返回DOS
INT 21H
DISP: MOV DX,OFFSET D2 ;输出回车换行
MOV AH,9H
INT 21H
MOV AH,2H ;显示AL中的字符内容
MOV DL,AL
INT 21H
L1: MOV DX,OFFSET D2 ;输出回车换行
MOV AH,9H
INT 21H
MOV DX,OFFSET D1 ;输出“INPUTSTRING,THE END FLAG IS” MOV AH,9H
INT 21H
MOV AH,1H ;键盘输入并显示
INT 21H
CMP AL,'$' ;判断输入字符是否为'$'
JE QUI ;是则调用QUI,返回DOS
CMP AL,0DH ;判断输入字符是否为回车,是则输出 JNE L2 回车换行,进入下一次L1循环,不是
MOV DX,OFFSET D2 则跳转至L2
MOV AH,9H
INT 21H
JMP L1
L2: CMP AL,'9' ;判断输入字符是否为0-9,是则计数 JA DISP 器BX加1,不是则跳转至DISP
CMP AL,'0'
JB DISP
INC BX
PUSH BX ;将BX的内容压入堆栈,保存
ADD BX,30H ;将BX中的数值转化为ASCII码
MOV DX,OFFSET D2 ;输出换行
MOV AH,9H
INT 21H
MOV AH,2H ;显示计数
MOV DL,BL
INT 21H
POP BX ;弹出BX的内容
JMP L1
CODE ENDS
END BG
5.2 执行结果截图
(1)接收字符为0-9,计数器加1,并显示计数。
(2)接收字符为非数字,则直接显示,但不计数,接收字符为0-9时继续计数。
(3)接收字符为‘$’,返回DOS。