实验4__分支程序实验
- 格式:doc
- 大小:145.00 KB
- 文档页数:11
实验四分支结构程序设计实验实验四分支结构程序设计实验一、实验目的1.掌握分支结构程序设计的基本设计方法;2.掌握条件转移指令和无条件转移指令的使用方法;3.掌握指令对标志寄存器中各标志位的影响情况;4.掌握多分支结构程序设计的三种方法:树型结构法、地址常数表法和指令常数表法。
二、实验要求1.学会使用DEBUG的T命令,跟踪检查指令对标志位的影响情况;2.学会使用DEBUG中的P命令,对INT指令的跟踪方法;3.学会利用设置断点调试程序的方法;4.了解大写、小写字母及数字在计算机内的表示方法及转换方法。
三、实验举例【例3.4】编写程序,从键盘上输入三个一位十进制数据,找出其中大于平均值的数据,并在屏幕上显示出来。
【解题思路】首先将三个数累加求和,再除3求出平均值,然后将三个数据分别与平均值进行比较。
三个已知数据的输入利用INT 21H的1号功能,大于平均值的数据利用INT 21H 的2号功能输出。
【步骤一】启动EDIT编辑器,编辑源程序。
程序清单如下:CSEG SEGMENTASSUME CS:CSEGSTART: XOR BX,BXMOV AH,01INT 21HMOV CH,AL ;第一个数据暂存CH中SUB AL,30HADD BL,AL ;累加求和MOV AH,01INT 21HMOV CL,AL ;第二个数据暂存CL中SUB AL,30HADD BL,AL ;累加求和MOV AH,01INT 21HMOV DH,AL ;第三个数据暂存DH中SUB AL,30HADD AL,BL ;累加求和XOR AH,AHMOV BH,3DIV BH ;求平均值ADD AL,30HMOV BL,AL ;平均值暂存BL中CMP BL,CH ;与第一个数比较JAE NEXT1MOV DL,CHMOV AH,02INT 21HNEXT1: CMP BL,CL ;与第二个数比较JAE NEXT2MOV DL,CLMOV AH,02INT 21HNEXT2: CMP BL,DH ;与第三个数比较JAE DONEMOV DL,DHMOV AH,02INT 21HDONE: MOV AH,4CHINT 21HCSEG ENDSEND源程序输入完成后,以EXAM4.ASM为文件名存入磁盘,进行下一步操作。
微机原理分支程序设计实验微机原理是计算机科学与技术专业的核心课程之一、在这门课程中,学生需要学习计算机的基本原理和体系结构,并通过实验来巩固所学的知识。
本文将介绍一个关于分支程序设计的微机原理实验。
实验背景:分支程序是计算机中的一种非线性控制结构,它根据条件的不同选择不同的执行路径。
分支程序设计是计算机编程中非常重要的一部分,也是实际应用中经常会遇到的情况之一、通过这个实验,学生将学会如何使用分支结构来解决实际问题。
实验目的:1.了解分支程序设计的基本概念和原理。
2.掌握使用条件语句和循环语句来实现分支程序。
3.通过实际案例分析和编程实践,巩固所学的知识。
实验内容:本实验以学生成绩管理系统为例,通过判断学生的成绩等级来计算总评成绩,并输出等级信息。
分支程序设计的思路如下:1.输入学生的成绩。
2.根据成绩的范围判断学生的等级。
3.根据等级计算总评成绩。
4.根据总评成绩输出相应的等级信息。
实验步骤:1.在开发环境中创建一个新的项目,并新建一个名为“GradeManage”的源文件。
2.在源文件中定义一个成绩变量和一个等级变量,并使用输入函数从键盘读取学生的成绩。
3.使用条件语句根据成绩的范围判断学生的等级,并将等级赋值给等级变量。
4.使用条件语句根据等级计算总评成绩,并将结果赋值给一个总评成绩变量。
5.使用条件语句根据总评成绩输出相应的等级信息。
6.在屏幕上显示输出结果。
7.编译并运行程序,进行测试。
实验总结:通过本实验,我学会了如何设计并实现一个简单的分支程序。
在实验过程中,我深入了解了分支结构的原理和使用方法,并通过编程实践巩固了所学的知识。
分支程序设计在实际应用中非常广泛,掌握这一技能对于计算机科学与技术专业的学生来说非常重要。
在今后的学习和工作中,我将继续探索和学习更多关于分支程序设计和其他相关知识,以提高自己的编程能力。
分支程序设计实验在计算机科学领域中,分支程序设计是一种重要的概念。
它是指在程序执行过程中,根据不同的条件选择不同的执行路径。
这种设计方法可以使程序更加灵活和智能,提高程序的执行效率和准确性。
在本文中,我们将探讨分支程序设计的原理和实验。
一、分支程序设计的原理分支程序设计的核心原理是根据条件的真假来选择不同的执行路径。
在程序中,我们可以使用条件语句来实现分支程序设计。
常见的条件语句有if语句和switch语句。
if语句是一种基本的条件语句,它根据条件的真假来选择不同的执行路径。
if语句的基本结构是:if (条件) {执行语句} else {执行语句}。
当条件为真时,执行if语句中的代码块;当条件为假时,执行else语句中的代码块。
switch语句是另一种常见的条件语句,它根据条件的不同值来选择不同的执行路径。
switch语句的基本结构是:switch (条件) {case 值1: 执行语句1; break; case值2: 执行语句2; break; default: 执行语句3;}。
当条件的值与某个case的值相等时,执行对应的执行语句;当条件的值与所有case的值都不相等时,执行default语句。
二、分支程序设计的实验为了更好地理解和应用分支程序设计的原理,我们可以进行一些实验。
下面是一个简单的实验示例:实验目的:根据用户输入的成绩,判断其等级。
实验步骤:1. 定义一个变量grade,用于存储用户输入的成绩。
2. 使用scanf函数获取用户输入的成绩,并将其赋值给变量grade。
3. 使用if语句判断成绩的等级,并输出相应的结果。
实验代码:```#include <stdio.h>int main() {int grade;printf("请输入您的成绩:");scanf("%d", &grade);if (grade >= 90) {printf("您的等级为A\n");} else if (grade >= 80) {printf("您的等级为B\n");} else if (grade >= 70) {printf("您的等级为C\n");} else if (grade >= 60) {printf("您的等级为D\n");} else {printf("您的等级为E\n");}return 0;}```在这个实验中,我们根据用户输入的成绩判断其等级,并输出相应的结果。
分支程序的设计实验报告实验目的本实验旨在通过设计一个分支程序来展示控制流程中的分支结构,加深对这一概念的理解,并通过实际编程提高对分支结构的应用能力。
实验原理分支程序是一种常见的控制流程结构,它根据条件的真假选择不同的执行路径。
在编程中,分支程序通常用于判断特定条件是否满足,并根据不同结果执行不同的操作。
常见的条件语句包括if 语句、switch 语句等。
在设计一个分支程序时,需要明确条件和执行路径,并根据不同情况进行相应处理。
分支程序的设计需要考虑条件的正确性和完备性,避免出现判断错误或遗漏情况。
实验过程本实验选择使用Python 语言来设计和实现一个简单的分支程序。
具体步骤如下:1. 首先,根据实际需求确定分支程序的目标和条件。
在本实验中,我们设计了一个分支程序来判断一个数字是否是奇数。
2. 接下来,根据选定条件,实现相应的判断逻辑。
我们使用if 语句来对给定数字进行判断。
如果数字对2 求余等于0,那么这个数字是偶数;否则,这个数字是奇数。
3. 在程序中加入输出语句,以便用户能够看到最终的判断结果。
4. 编译和运行程序,观察输出结果是否符合预期。
在实验过程中,我们还可以进行额外的调试和优化,并添加更多的分支条件来扩展程序功能。
例如,我们可以增加一个分支条件来判断数字是否为负数,或者根据数字的大小进行不同的处理等。
实验结果经过编写、编译和运行,我们得到了一个简单的分支程序。
该程序可以根据给定的数字判断其是否是奇数,并将结果输出给用户。
下面是程序的源代码:pythonn = int(input("请输入一个整数: "))if n % 2 == 0:print("这是一个偶数。
")else:print("这是一个奇数。
")以下是程序运行的示例结果:请输入一个整数: 5这是一个奇数。
请输入一个整数: 8这是一个偶数。
实验总结通过本次实验,我们深入学习了分支程序的设计原理和实现方法,并通过编写一个简单的示例程序加深了对分支结构的理解。
微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
一、实验目的1. 理解分支程序的概念和作用。
2. 掌握C语言中if语句、switch语句的使用方法。
3. 能够根据实际需求,合理运用分支程序解决问题。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 语言:C语言三、实验内容1. 使用if语句实现一个简单的分支程序。
2. 使用switch语句实现一个多分支程序。
3. 结合if语句和switch语句,编写一个综合性的分支程序。
四、实验步骤1. 使用if语句实现一个简单的分支程序(1)创建一个新的C语言项目,命名为“分支程序实验”。
(2)在主函数中,定义一个变量score用于存储用户输入的分数。
(3)使用scanf函数获取用户输入的分数。
(4)使用if语句判断分数所在的范围,并输出相应的评价。
(5)编译并运行程序,验证分支程序是否正确实现。
2. 使用switch语句实现一个多分支程序(1)在主函数中,定义一个变量num用于存储用户输入的数字。
(2)使用scanf函数获取用户输入的数字。
(3)使用switch语句根据用户输入的数字输出相应的结果。
(4)编译并运行程序,验证多分支程序是否正确实现。
3. 结合if语句和switch语句,编写一个综合性的分支程序(1)在主函数中,定义两个变量num和score。
(2)使用scanf函数分别获取用户输入的数字和分数。
(3)使用if语句判断数字是否在1到7之间,并使用switch语句根据分数输出相应的评价。
(4)编译并运行程序,验证综合性分支程序是否正确实现。
五、实验结果与分析1. 使用if语句实现简单的分支程序当用户输入分数为85时,程序输出“优秀”;输入分数为70时,程序输出“良好”;输入分数为60时,程序输出“及格”;输入分数低于60时,程序输出“不及格”。
2. 使用switch语句实现多分支程序当用户输入数字1时,程序输出“一”;输入数字2时,程序输出“二”;以此类推,直到输入数字7时,程序输出“七”。
四《C语言程序设计》实验四选择结构程序设计一、实验目的1、掌握分支语句的格式和功能。
2、掌握选择结构的程序设计。
3、掌握分支结构的嵌套。
二、实验内容与要求1、编程,计算下列分段函数值:x2+3x-4,x<0且x≠-4f(x)= x2-6x+5,0=x<10且x≠1及x≠5x2-4x-1,其他要求如下:(1)用if语句实现分支。
自变量x与函数值均采用双精度类型。
(2)自变量x值从键盘输入,且输入前要有提示信息。
(3)数据的输出格式采用以下形式:x=输入值,f(x)=计算值(4)分别以-3.0,-1.0,0.5,1.5,2.5,3.5,4.5,5.5为自变量,运行该程序。
记录结果。
(5)源程序以sy4_1.c存盘。
2、编程,将一个百分制成绩转换成等级制成绩。
具体要求如下:(1)百分制与等级制的对应关系如下:(3)用键盘输入百分制成绩,输入前要有提示信息。
(4)要能判断输入数据的合理性,对于不合理的数据应输出错误信息。
(5)输出结果中应包含百分制成绩和成绩等级。
(6)分别输入成绩-10,99,60,85,70,101,45,运行该程序。
记录结果。
(7)源程序以sy4_2.c存盘。
三、思考题1、实现选择结构程序设计的方法有哪几种?各有什么特点?适用条件是什么?2、如何设置选择结构中的判断条件?它在程序设计中的意义何在?实验五循环结构程序设计(1)一、实验目的1、掌握循环的概念。
2、掌握三种常用的循环语句的格式和功能。
3、初步掌握循环结构的编程方法。
二、实验内容与要求1、编程,分别利用三种循环语句,求1+2+3+…50之和。
要求如下:(1)输出计算结果;数据的输出格式采用以下形式:1+2+3+…50=计算值(2)源程序分别以sy5_1.c、sy5_2.c、sy5_3.c存盘。
2、编程,穷举算法解百马百担问题(有100匹马驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少?)要求如下:(1)输出计算结果;在数据输出之前应有提示信息。
实验四 分支程序与循环程序一、实验目的1、熟悉转移指令的功能与使用;2、掌握偏移量的计算方法;3、熟悉分支程序设计和调试方法;4、进一步掌握堆栈指令的使用;5、熟悉循环程序设计和调试方法。
二、实验仪器1、DVCC-598JH 单片开发机一台;2、WD-5型直流稳压源一台。
三、实验预习1、认真阅读实验指导书有关内容,明确实验目的、内容和操作步骤;2、对实验中的程序和指令进行手工汇编;3、复习实验中相关指令的功能;4、复习偏移量的计算及OFST 键的操作方法。
四、实验内容 1、分支程序设计分支程序是根据不同的条件,执行不同的程序段,也称条件分支程序。
程序一:比较片内RAM 40H 和41H 单元中的两个无符号数,将较大数存入40H 单元,较小数存入41H 单元。
)0()0(∠≥⎩⎨⎧+-=a a ba b a y参考程序:ORG1000HSTART : MOV A ,40H CLRCSUBB A ,41HJNCW AITMOV A,40HXCH A,41HMOV 40H,AW AIT:SJMP $END程序二:设a数存放在累加器A中,b数存放在寄存器B中,求下列算式的y值,并将结果存入累加器A中。
参考程序:ORG 1000HJB ACC.7,NUSCLR CSUBB A,BSJMP DONENUS:ADD A,BDONE:SJMP DONEEND2、循环程序设计在实际应用中,往往需要多次反复执行某种相同的操作,而只是参与操作的操作数不同,这时就可以采用循环程序结构。
它可以缩短指令数,减少程序所占的内存空间。
程序三:数据块传送将片外RAM中地址为4500H~450FH中的数据块传送到4700H~470FH单元中。
参考程序:地址目的程序源程序ORG 1000H1000 7A00 MOV R2,#00H1002 7B45 MOV R3,#45H1004 904700 MOV DPTR,#4700H1007 C083 LOOP:PUSH DPH1009 C082 PUSH DPL100B 8A82 MOV DPL,R2100D 8B83 MOV DPH,R3100F E0 MOVX A,@DPTR1010 D082 POP DPL1012 D083 POP DPH1014 F0 MOVX @DPTR,A1015 A3 INCDPTR1016 0A INCR21017 BA10ED CJNE R2,#10H,LOOP101A 80FE SJMP $END五、实验步骤1、认真阅读实验参考程序并分析程序运行后的理论结果;2、输入程序并检查输入是否正确;3、根据已知条件输入程序执行前的原始数据;4、执行程序,检查并记录结果;六、练习1、将ASCII码转化为十六进制数。
实验四分支和循环程序设计实验一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令 JMP无条件转移指令 JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令 JXX条件转移指令可分为三大类:1).简单条件转移指令指令。
根据单个标志位的状态判断转移条件。
标志位指令转移条件意义CFJC CF=1 有进位/借位JNC CF=0 无进位/借位ZFJE/JZ ZF=1 相等/等于 0JNE/JNZ ZF=0 不相等/不等于 0SFJS SF=1 是负数JNS SF=0 是正数OFJO OF=1 有溢出JNO OF=0 无溢出PFJP/JPE PF=1 有偶数个 1JNP/JPO PF=0 有奇数个 12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是 A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<BJBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
指令转移条件意义JG/JNLE SF=OF AND ZF=0 A>BJGE/JNL SF=OF OR ZF=1 A>=BJL/JNGE SF OF AND ZF=0 A<BJLE/JNG SF OF OR ZF=1 A<=B四、实验内容与步骤1、判断方程 AX2+BX+C=0是否有实根。
实验4分支结构程序设计分支结构是程序设计中常用的一种控制结构,通过判断条件的真假来选择不同的执行路径。
在实验4中,我们将学习如何使用分支结构来设计程序。
一、分支结构的基本语法在分支结构中,根据条件的真假执行不同的代码,主要有以下几种语法结构:1. if语句: if语句是最基本的分支结构,用于根据条件执行不同的代码块。
语法如下:if (条件)//条件为真时执行的代码} else//条件为假时执行的代码其中,条件是一个表达式,如果表达式的值为真,则执行if语句块中的代码;否则执行else语句块中的代码。
2. if-else if-else语句:用于根据多个条件选择执行不同的代码。
语法如下:if (条件1)//条件1为真时执行的代码} else if (条件2)//条件1为假,条件2为真时执行的代码} else//条件1和条件2都为假时执行的代码在这种结构中,多个条件会按照顺序依次被检查,一旦一些条件为真,相应的代码块即被执行,后续的条件判断将被略过。
3. switch语句:用于根据不同的表达式值选择执行不同的代码块。
语法如下:switch (表达式)case 值1://表达式的值与值1相等时执行的代码break;case 值2://表达式的值与值2相等时执行的代码break;...default://表达式的值与之前的值都不相等时执行的代码break;在switch语句中,表达式的值将与每个case后的值进行比较,如果相等,相应的代码块将被执行,使用break语句可以使程序跳出switch 语句。
二、分支结构的应用在实验4中,我们可以结合具体问题来设计分支结构程序。
以下是一个示例:问题:根据学生的成绩判断其等级并输出。
解决方法:1.输入学生的成绩。
2. 使用if-else if-else语句判断成绩所属的等级,并输出。
具体实现如下:#include <iostream>int mai//输入学生的成绩int score;std::cout << "请输入学生的成绩:";std::cin >> score;//判断成绩所属等级并输出if (score >= 90)std::cout << "成绩等级为A" << std::endl;} else if (score >= 80)std::cout << "成绩等级为B" << std::endl;} else if (score >= 70)std::cout << "成绩等级为C" << std::endl;} else if (score >= 60)std::cout << "成绩等级为D" << std::endl;} elsestd::cout << "成绩等级为E" << std::endl;}return 0;在上述代码中,我们通过if-else if-else语句根据学生的成绩判断其等级,并输出相应的结果。
南昌大学实验报告学生姓名:赖思敏学号:6100410171 专业班级:105实验类型:□验证■综合□设计□创新实验日期:2011.11 实验成绩:实验3 分支程序实验一.实验目的1.掌握单分支、双分支、多分支程序的设计方法;2.掌握利用DEBUG或CODEVIEW修改参数、检查结果的方法;1.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
二.实验内容1.猜数程序,预设一数字字符M,从键盘输入一个数字字符N,判断:若N <M,显示“TOO BIG”;若N >M 则显示“TOO SMALL”;否则显示“YOUR ARE RIGHT”源程序如下:data segmentmessage db 0dh,0ah,'please input a number from 0 to 9',0dh,0ah,'(If you want to break out,press the space key.):$'str1 db 0dh,0ah,'TOO BIG$'str2 db 0dh,0ah,'TOO SMALL$'str3 db 0dh,0ah,'YOUR ARE RIGHT$'M db 36h;定义m为6N db ?data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hmov ah,1int 21hmov N,al;将输入数字存放在N里面cmp al,20h;是空格,就退出je exitcmp al,M;跟M比较,大于显示太大,小于显示太小,等于就显示正确JA S1JB S2MOV DX,OFFSET str3;显示说明所输入的数字为6mov ah,9int 21hjmp startS1: MOV DX,OFFSET str1;显示太大字符串mov ah,9int 21hjmp startS2: MOV DX,OFFSET str2;显示太小字符串mov ah,9int 21hjmp startexit: mov ah,4chint 21hcode endsend start2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示“IT IS A DIGITAL”;若为A-Z或a-z字符,均显示“IT IS A LOWCASE LETTER”;若是回车字符<CR>(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
源程序如下:DATAS SEGMENTstr1 db 0dh,0ah,'IT IS A DIGITAL$'str2 db 0dh,0ah,'IT IS A LOWCASE LETTER$'str3 db 0DH,0AH,'please input a character:$'DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXBEGIN:LEA DX,str3MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,0DH;按回车退出JE EXITCMP AL,'1';跟1比较,小于就重新输入JB BEGINCMP AL,'9';跟9比较,小于显示是数字JB S1CMP AL,'A';再跟A比较,小于为其他字符,重新输入JB BEGINCMP AL,'Z';跟Z比较,小于显示为字符JB S2CMP AL,'a';大于Z,小于a是其他字符JB BEGINCMP AL,'z';大于a,小于z是字母JB S2JMP BEGIN;大于z,为其他字符S1: LEA DX,str1;显示为数字MOV AH,9INT 21HJMP BEGINS2: LEA DX,str2;显示为字母MOV AH,9INT 21HJMP BEGINEXIT: MOV AH,4CH;退出INT 21HCODES ENDSEND START3.预留字符串口令,输入口令串与预留密码串比较。
若匹配则显示“MATCH”,否则显示“NOMATCH!,PROGRAM TERMINATED!”源程序如下:DATAS SEGMENTPASSWORD DB '123456' ;预留密码设定为123456str1 db 0ah,0dh,'MATCH$'str2 db 0ah,0dh,'NOMATCH!PROGRAM TERMINATED!$'str3 db 0AH,0DH,'PLEASE INPUT YOUR PASSWORD:$' DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV BX,OFFSET PASSWORD;把预留密码的偏移地址给BXMOV BX,0LEA DX,str3MOV AH,09HINT 21HMOV CL,0MOV CH,0;将CL和CH清零INPUT:MOV AH,01H;输入字符INT 21HINC CL;用CL存放输入字符个数CMP AL,0DH;输入回车跳到判断语句JE JUDGECMP CL,1;CL为1时,BX为0;如果CL不为1,则BX加1JE COMPAREINC BXCOMPARE:CMP AL,PASSWORD[BX]JE INPUT;字符相同,继续比较INC CH;用CH存放字符不同个数JMP INPUTJUDGE:CMP CL,01H;零输入,并退出程序JE EXITCMP CL,7;包括回车7个字符,不等于则与预留密码不符合JNE NOMATCHCMP CH,0;字符不同个数为0,则与预留密码相符合JNE NOMATCHMATCH:LEA DX,str1MOV AH,09HINT 21HJMP STARTNOMATCH:LEA DX,str2MOV AH,09HINT 21HJMP STARTEXIT:MOV AH,4CHINT 21HCODES ENDSEND START4.上述程序1、2、3分别完成后请编写一个程序来实现简单的程序菜单显示。
(采用地址跳跃表法实现)显示一个菜单要求用户从下表中选择:(1)GUESS NUMBER GAME (对应-->程序1)(2)CHAR SELECTION PROGRAM(对应-->程序2)(3)PASSWORD PROGRAM(对应-->程序3)(4)PRESS “ESC”TO QUIT用户作出选择1~3时,显示输出要执行操作的名字,如“Your selection is 1,the program will execute GUESS NUMBER GAME!”然后转向相应的程序去执行,执行结束前进行退出的判断,显示一个提示信息“will you continue program really?(Y:N)”要求用户从键盘键入字符,若是“Y”键,则继续程序的执行,若是“N”键,则返回到菜单。
若用户选择4,要求程序显示提示信息“Please press ESC key to exit!”,并能按要求正确退出。
源程序如下:DATAS SEGMENTopt DW OPT_1;子程序地址表DW OPT_2DW OPT_3DW OPT_4menu DB 0DH,0AH,'THE MENU:';显示菜单DB 0DH,0AH,'(1)GUESS NUMBER GAME' ;对应-->程序1DB 0DH,0AH,'(2)CHAR SELECTION PROGRAM';对应-->程序2DB 0DH,0AH,'(3)PASSWORD PROGRAM' ;对应-->程序3DB 0DH,0AH,'(4)PRESS "ESC" TO QUIT$'str1 DB 0DH,0AH,'Your selection is 1,the program will execute GUESS NUMBER GAME!$'str2 DB 0dh,0ah,'Your selection is 2,the program will execute CHAR SELECTION PROGRAM!$'str3 DB 0DH,0AH,'will you continue program really?(Y:N)$'str4 DB 0DH,0AH,'Please press ESC key to exit!$'str5 DB 0dh,0ah,'Your selection is 3,the program will execute PASSWORD PROGRAM!$'message db 0dh,0ah,'please input a number from 0 to 9(press "Enter" to go back to the main menu):$'guess1 db 0dh,0ah,'TOO BIG$'guess2 db 0dh,0ah,'TOO SMALL$'guess3 db 0dh,0ah,'YOUR ARE RIGHT$'M db 36hN db ?char1 db 0dh,0ah,'IT IS A DIGITAL$'char2 db 0dh,0ah,'IT IS A LOWCASE LETTER$'char3 db 0DH,0AH,'please input a character',0DH,0AHDB '(press "Enter" to go back to the main menu):$'PASSWORD DB '123456' ;预留密码设定为123456thir1 db 0ah,0dh,'MATCH$'thir2 db 0ah,0dh,'NOMATCH!PROGRAM TERMINATED!$'thir3 db 0AH,0DH,'PLEASE INPUT YOUR PASSWORD:$'DATAS ENDSCODES SEGMENTMAIN PROC FARASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXsub bx,bxxor si,siLEA SI,opt;把地址表的首地址给siLEA DX,menu;显示主菜单MOV AH,9INT 21Hmov dl,0dh;显示回车mov ah,2int 21hMOV DL,0AH;显示换行MOV AH,2INT 21HMOV AH,1;输入选项INT 21HXOR AH,AHsub al,31hshl ax,1add si,axJMP opt[SI];跳到相应程序;OPT_1:lea dx,str1mov ah,9int 21hmov dx,offset messagemov ah,9int 21hmov ah,1int 21hmov N,al;将输入数字存放在N里面cmp al,20h;是空格,就退出je STARTcmp al,M;跟M比较,大于显示太大,小于显示太小,等于就显示正确JA G1JB G2MOV DX,OFFSET guess3;显示说明所输入的数字为6mov ah,9int 21hjmp CONTINUEG1: MOV DX,OFFSET guess1;显示太大字符串mov ah,9int 21hjmp CONTINUEG2: MOV DX,OFFSET guess2;显示太小字符串mov ah,9int 21hjmp CONTINUE;接下来是字符区分子程序OPT_2:lea dx,str2mov ah,9int 21hLEA DX,char3MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,0DH;按回车返回菜单JE STARTCMP AL,'1';跟1比较,小于就重新输入JB OPT_2CMP AL,'9';跟9比较,小于显示是数字JB C1CMP AL,'A';再跟A比较,小于为其他字符,重新输入JB OPT_2CMP AL,'Z';跟Z比较,小于显示为字符JB C2CMP AL,'a';大于Z,小于a是其他字符JB OPT_2CMP AL,'z';大于a,小于z是字母JB C2JMP OPT_2;大于z,为其他字符C1: LEA DX,char1;显示为数字MOV AH,9INT 21HJMP CONTINUE;提示用户要不要继续C2: LEA DX,char2;显示为字母MOV AH,9INT 21HJMP CONTINUE;;接下来是校对密码子程序OPT_3: lea dx,str3mov ah,9int 21hMOV BX,OFFSET PASSWORD;MOV BX,0LEA DX,thir3MOV AH,09HINT 21HMOV CL,0MOV CH,0;将CL和CH清零INPUT:MOV AH,01H;输入字符INT 21HINC CL;用CL存放输入字符个数CMP AL,0DH;输入回车跳到判断语句JE JUDGECMP CL,1;CL为1时,BX为0;如果CL不为1,则BX加1JE COMPAREINC BXCOMPARE:CMP AL,PASSWORD[BX]JE INPUT;字符相同,继续比较INC CH;用CH存放字符不同个数JMP INPUTJUDGE:CMP CL,01H;零输入,并退出程序JE STARTCMP CL,7;包括回车7个字符,不等于则与预留密码不符合JNE NOMATCHCMP CH,0;字符不同个数为0,则与预留密码相符合JNE NOMATCHMATCH:LEA DX,thir1MOV AH,09HINT 21HJMP CONTINUENOMATCH:LEA DX,thir2MOV AH,09HINT 21HJMP OPT_3OPT_4: LEA DX,str4;退出的子程序MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,1BH;按ESC退出JE EXITCONTINUE:LEA DX,str3;用户是否继续执行当前程序MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,'Y';按y继续,按n退出,不需区分大小写JE YESCMP AL,'y'JE YESCMP AL,'N'JE STARTCMP AL,'n'JE STARTYES: JMP opt[SI];继续运行当前子程序EXIT: MOV AH,4CHINT 21HRET ;退出MAIN ENDPCODES ENDSEND START三.实验要求1.编写实验内容要求的四个程序;2.熟悉源程序汇编、连接命令的使用方法。