微机原理实验之-分支程序、循环程序设计

合集下载

微机原理与应用综合实验—循环程序设计

微机原理与应用综合实验—循环程序设计

94 A2:PUSH AX 95 MOV DL,' ' 96 MOV AH,2 97 INT 21H 98 POP AX 99 ADD AX,BX 100 SHL AX,1 101 RET 102 A3:PUSH AX 103 MOV DL,' ' 104 MOV AH,2 105 INT 21H 106 POP AX 107 SUB AX,BX 108 SHL AX,1 109 RET 110 111 RET 112 CHRAC ENDP 113 MOV AH,4CH 114 INT 21H 115 CODE ENDS 116 END MAIN
45 ;********************************************** 46 INPUTPRO PROC NEAR 47 PUSH CX ;保护现场 48 PUSH AX 49 PUSH BX 50 SHL AX,1 ;得到每一行输入的字符(‘*’、‘ ’)总数 51 MOV CX,0001H 52 LOP:CALL CHRAC 53 INC CX ;CX自加 54 CMP CX,AX 55 JNA LOP;判断相等就换行 56 POP BX 57 POP AX ;恢复现场 58 POP CX 59 RET 60 INPUTPRO ENDP 61 ;********************************************** 62 ;子程序:输入每一个‘*’和‘ ’和0AH(换行字符) 63 ;********************************************** 64 CHRAC PROC NEAR 65 CMP CX,AX 66 JZ A1; 67 MOV DL,'*' 68 69 SHR AX,1 ;满足空格的条件 70 SUB AX,BX 71 CMP CX,AX 72 JNA A2 73 ADD AX,BX 74 ADD AX,BX 75 CMP CX,AX 76 JNB A3 77 78 SUB AX,BX 79 SHL AX,1 80 PUSH AX 81 MOV AH,2 82 INT 21H 83 POP AX 84 RET 85 A1:PUSH AX 86 MOV DL,0DH 87 MOV AH,2 88 INT 21H 89 MOV DL,0AH 90 MOV AH,2 91 INT 21H 92 POP AX 93 RET

微机原理分支程序设计实验

微机原理分支程序设计实验

微机原理分支程序设计实验微机原理是计算机科学与技术专业的核心课程之一、在这门课程中,学生需要学习计算机的基本原理和体系结构,并通过实验来巩固所学的知识。

本文将介绍一个关于分支程序设计的微机原理实验。

实验背景:分支程序是计算机中的一种非线性控制结构,它根据条件的不同选择不同的执行路径。

分支程序设计是计算机编程中非常重要的一部分,也是实际应用中经常会遇到的情况之一、通过这个实验,学生将学会如何使用分支结构来解决实际问题。

实验目的:1.了解分支程序设计的基本概念和原理。

2.掌握使用条件语句和循环语句来实现分支程序。

3.通过实际案例分析和编程实践,巩固所学的知识。

实验内容:本实验以学生成绩管理系统为例,通过判断学生的成绩等级来计算总评成绩,并输出等级信息。

分支程序设计的思路如下:1.输入学生的成绩。

2.根据成绩的范围判断学生的等级。

3.根据等级计算总评成绩。

4.根据总评成绩输出相应的等级信息。

实验步骤:1.在开发环境中创建一个新的项目,并新建一个名为“GradeManage”的源文件。

2.在源文件中定义一个成绩变量和一个等级变量,并使用输入函数从键盘读取学生的成绩。

3.使用条件语句根据成绩的范围判断学生的等级,并将等级赋值给等级变量。

4.使用条件语句根据等级计算总评成绩,并将结果赋值给一个总评成绩变量。

5.使用条件语句根据总评成绩输出相应的等级信息。

6.在屏幕上显示输出结果。

7.编译并运行程序,进行测试。

实验总结:通过本实验,我学会了如何设计并实现一个简单的分支程序。

在实验过程中,我深入了解了分支结构的原理和使用方法,并通过编程实践巩固了所学的知识。

分支程序设计在实际应用中非常广泛,掌握这一技能对于计算机科学与技术专业的学生来说非常重要。

在今后的学习和工作中,我将继续探索和学习更多关于分支程序设计和其他相关知识,以提高自己的编程能力。

实验四分支和循环程序设计实验(精)

实验四分支和循环程序设计实验(精)

实验四分支和循环程序设计实验一、实验要求和目的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是否有实根。

微机原理实验3分支程序设计

微机原理实验3分支程序设计

物理与机电工程系(2015——2016 学年第一学期)《分支程序设计》上机实验报告专业:电子信息工程学号: 4625852555姓名:不同人任课教师:规范和实验地点:实验楼368项目编号:实验三开始结束小于否?大与否?取Y=0偏移地址送DX取Y=-1偏移地址送DX取Y=1偏移地址送DX定义段和输出字符串存入自变量X初始化X 送AL与0比较返回DOS 功能调用调用9号功能键输出N开始定义段和输出字符串Y初始化调用1号功能键输入字符X送AL与61H比较大于等于否?与7AH比较小于等于否?AL减20H取Y的偏移地址送DL调用9号功能键调用2号功能键输出Y输出DL中的值返回DOS功能调用结束开始结束定义段和输出字符串调用1号功能键初始化X 送AL输出shuzi返回DOS 功能调用输入字符与30H 比较取shuzi 偏移地址调用9号功能键大于等于否?与39H 比较小于等于否?取qita 的偏移地址调用9号功能键输出qita大于等于否?小于等于否?取zimu 的偏移地址调用9号功能键输出zimu小于等于否?小于等于否?与7AH 比较与41H 比较与5AH 比较与61H 比较NYY NNYY NYNNY—欢迎下载12。

分支与循环程序设计实验报告

分支与循环程序设计实验报告

实验名称分支与循环程序设计实验指导教师罗志祥专业班级光电1406姓名段昳晖学号U2014*****联系电话137********一、任务要求1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

264X当XYX/2当10X64X当X102.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。

P3.0为低电平时开始计时,为高电平时停止计时。

设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

二、设计思路1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

264X当XYX当X/21064X当X10将外部单元1000H中的X,通过分支判断,分别执行不同的语句,三条语句分别为标记为L1、L2、L3,先比较X与64的大小关系,再判断X与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE指令后的进位位CY,进一步比较大小,分别跳转至对应语句。

将结果存于外部单元的1001H以及1002H。

1专业资料整理2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。

P3.0为低电平时开始计时,为高电平时停止计时。

设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。

利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60 秒,外循环循环1次,外循环循环24次,清零。

其中对端口显示的秒数、分钟数、时间数,进行二进制修正。

利用循环来设计延时程序,合理计算语句长度,以及循环次数。

程序运行时修正P3.0的值,可以实现暂停计数和继续的功能。

微机原理(循环程序设计)

微机原理(循环程序设计)
MOV SI,OFFSET B
MOV [DI],DL
MOV DH,8
SUB DH,DL
MOV [SI],DH
MOV AH,4CH
INT 21H
CODEENDS
END START
已知有5个正数,3个负数,则DH、DL分别为03和05,运行程序结束后,查询这两个区域,运行结果如图:
2.汇编程序如下:
DATA SEGMENT
MOV BX,OFFSET BUF2
BEGIN:MOV AX,[DI]
CMP AX,0000H
JGE F1
MOV [BX],AX
INC BX
INC BX
JMP F2
F1:MOV [SI],AX
INC DL
INC SI
INC SI
F2:INC DI
INC DI
LOOP BEGIN
MOV DI,OFFSET A
END START
用AX来存放TOTOL,DX存COUNT,运行结果如图:
实验总结:
通过本次实验,对循环结构程序设计能熟练掌握并且应用,同时弥补了一些没有注意到的细节,比如取某段数据首地址,偏移量等语句的使用,通过练习操作,相信会使我对微机及汇编知识的学习大有帮助。
实验内容:
一、试验题目:
1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
2.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。

微机原理实验之 - 分支程序循环程序设计

微机原理实验之 - 分支程序循环程序设计

微机原理实验之 - 分支程序、循环程序设计实验三分支程序、循环程序设计实验一、实验目的1.掌握分支程序的结构。

2.掌握分支程序的设计、调试方法。

3.加深对循环结构的理解。

4.掌握循环结构程序设计的方法以及调试方法。

二、实验设备PC机一台,TD-PITE实验装置一套。

三、实验内容:设计一数据块间的搬移程序。

设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。

源数据块和目的数据块在存储中可能有三种情况,如图1所示。

图3-1 源数据块与目的数据块在存储中的位置情况对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。

但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。

当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。

参考流程:如图3-2所示。

图3-2 程序流程图实验程序STACK SEGMENT STACK DW 64 DUP(?) STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010H MOV SI, 3100HMOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI MOV AL, [SI] MOV [DI], AL DEC SIA1:DEC DI DEC CX JNE A1 JMP A3MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 JMP A3 ENDS END STARTA2:A3: CODE实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统;2. 用E命令在以SI为起始地址的单元中填入16个数;3. 运行程序,然后再停止运行;4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。

实验四分支程序与循环程序

实验四分支程序与循环程序

实验四 分支程序与循环程序一、实验目的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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三分支程序、循环程序设计实验
一、实验目的
1.掌握分支程序的结构。

2.掌握分支程序的设计、调试方法。

3.加深对循环结构的理解。

4.掌握循环结构程序设计的方法以及调试方法。

二、实验设备
PC机一台,TD-PITE实验装置一套。

三、实验内容:
设计一数据块间的搬移程序。

设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。

源数据块和目的数据块在存储中可能有三种情况,如图1所示。

图3-1 源数据块与目的数据块在存储中的位置情况
对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。

但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:
当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。

当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。

参考流程:如图3-2所示。

图3-2 程序流程图实验程序
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV CX, 0010H
MOV SI, 3100H
MOV DI, 3200H
CMP SI, DI
JA A2
ADD SI, CX
ADD DI, CX
DEC SI
DEC DI
A1: MOV AL, [SI]
MOV [DI], AL
DEC SI
DEC DI
DEC CX
JNE A1
JMP A3
A2: MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
JNE A2
A3: JMP A3
CODE ENDS
END START
实验步骤
1. 按流程图编写实验程序,经编译、链接无误后装入系统;
2. 用E命令在以SI为起始地址的单元中填入16个数;
3. 运行程序,然后再停止运行;
4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;
5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。

2. 计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。

编写实验程序,计算上式的结果,参考流程图如图3-3所示。

图3-3 程序流程图
实验程序
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,0001H
MOV BL,02H
A1: MOV AL,BL
MUL BL
ADD DX,AX ;结果存于DX中
CMP AX,00C8H ;判断N(N+1)与200的大小
JNA A1
A2: JMP A2
CODE ENDS
END START
实验步骤
(1)编写实验程序,编译、链接无误后装入系统;
(2)运行程序,然后再停止程序运行;
(3)运算结果存储在寄存器DX中,查看结果是否正确;
(4)可以改变N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于FFFFH 将产生数据溢出。

2. 求某数据区内负数的个数
设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。

为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。

实验程序流程图如图3-4所示。

图3-4 程序流程图
实验程序
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DI, 3000H ;数据区首地址
MOV CL, [DI] ;取数据个数
XOR CH, CH
MOV BL, CH
INC DI ;指向第一个数据
A1: MOV AL, [DI]
TEST AL, 80H ;检查数据首位是否为1
JE A2
INC BL ;负数个数加1
A2: INC DI
LOOP A1
MOV [DI], BL ;保存结果
A3: JMP A3
CODE ENDS
END START
实验步骤
(1)按实验流程编写实验程序;
(2)编译、链接无误后装入系统;
(3)键入E3000,输入数据如下:
3000=06 (数据个数)
3001=12
3002=88
3003=82
3004=90
3005=22
3006=33
(4)先运行程序,然后停止程序运行;
(5)查看3007内存单元或寄存器BL中的内容,结果应为03;(6)可以进行反复测试来验证程序的正确性。

相关文档
最新文档