实验二 分支程序实验和循环程序实验
实验二 分支结构程序设计实验
实验二 分支结构程序设计实验1、实验目的和要求:掌握汇编语言分支程序的设计方法;2、实验内容:编程序求分段函数Y 的值。
已知变量X 为16位带符号数, 分段函数的值要求 保存到字单元Y 中。
函数定义如下:1 (当X>0)Y = 0 (当x=0)—1 (当X<0)3、实验仪器与器材:计算机及EMU8086汇编软件等。
4、实验原理:分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。
分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。
程序流程图是根据解题分析所绘制的程序执行流程图。
5、实验过程与测试数据(含电路图/程序流程框图):6、实验分析:自己分析7、实验体会:自己总结实验参考程序:DATA SEGMENTX DW -128Y DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,XCMP AX,0JG ISPNJZ ISZNMOV Y,-1JMP FINISHISPN: MOV Y,1JMP FINISHISZN: MOV Y,0FINISH: MOV AH,4CHINT 21HCODE ENDSEND START思考题:把程序修改成如下的分段函数的值—1 (当X>=0)Y=1 (当X<0)。
实验二C语言中的分支语句程序设计实验
实验二 C语言中的分支语句程序设计一、实验目的:1.掌握C语言的基本语法;2.掌握C语言的表达式运算及标准库函数的调用方法;3.掌握C语言的基本输入输出语句;4.掌握字符类型、整型和浮点型数据的输入输出及表达式计算方法;5.掌握if语句和switch语句的用法;6.掌握分支程序结构的设计思想;二、实验内容(一)分析程序,用程序验证下面各个表达式的值1、当整型变量a,b,c的值分别为3,4,5时,以下各语句执行后a,b,c的值为多少? (1) if(a>c) {a=b; b=c; c=a;}else {a=c; c=b; b=a;}执行后a,b,c的值为,,(2) if(a<c) a=c;else a=b; c=b; b=a;执行后a,b,c的值为,,(3) if(a!=c) ;else a=c; c=b; b=a;执行后a,b,c的值为,,2、若整数x分别等于95、87、100、43、66、79,57,则以下程序段运行后屏幕显示是什么?switch(x/10){ case 6:case 7: printf("Pass\n"); break;case 8: printf("Good\n"); break;case 9:case 10: printf("V eryGood\n"); break;case 5 : printf("Between Pass and Fail\n");default: printf("Fail\n");}x等于95时,程序段运行后屏幕上显示。
x等于87时,程序段运行后屏幕上显示。
x等于100时,程序段运行后屏幕上显示。
x等于43时,程序段运行后屏幕上显示。
x等于66时,程序段运行后屏幕上显示。
x等于79时,程序段运行后屏幕上显示。
x等于57时,程序段运行后屏幕上显示。
C++实验2 分支结构和循环结构程序设计实验报告
return 0;
}
实践教程P16编程5,设计一个程序,输入某天是几月几日,要求算出这一天是本年的第几天。[分析]要算出某天是当年的第几天,应该将当年中本月之前所有月的天数相加,再加上本月的天数。但这里有一个闰年问题,二月是一个特殊月,如该年是闰年,则二月有29天,否则,便是28天,所以,还必须给出年份。[提示]判断某年是闰年的条件是:该年号能被4整除但不能被100整除,或者能被400整除的是闰年。如,1996,2000是闰年,但1800不是闰年。
cout<<"B Grade"<<endl;
else if(a>=70&&a<80)
cout<<"C Grade"<<endl;
else if(a>=60&&a<70)
cout<<"D Grade"<<endl;
else
cout<<"Not Passed"<<endl;
return 0;
}
Stwich语句
深圳大学实验报告
课程名称:面向对象程序设计
实验项目名称:实验2分支结构和循环结构程序设计
学院:信息工程学院
专业:电子信息工程
指导教师:张力(J)
报告人:学号:班级:
实验时间:2014.10.15
实验报告提交时间:2014.11.12
教务处制
一、实验目的与要求:
1.掌握C++程序的基本结构。
2.掌握C++基本数据类型与运算符。
3.熟悉输入/输出方法。
C语言实验-15电本通信(1)分析
实验一顺序程序设计【实验目的】1、熟悉C语言数据类型的概念,熟悉如何定义整型、字符型和实型变量2、掌握C语言中的算术运算符3、熟悉C语言表达式语句、空语句和复合语句4、能编写简单的顺序结构的程序【预习内容】1、C语言中类型定义的标志符int 、short、unsigned 、char、float 、double……2、C语言中的运算符所能实现的操作3、输入输出函数的调用语句getchar()、putchar()、scanf()、printf()【实验内容及步骤】1.上机改错题#include <stdio.h>int main(){ int a, b;scanf("%d%d", &a, &b);printf("%d\n", a/b); return 0;}程序纠错后,若从键盘输入15,4,则程序的运行结果为( 3)。
#include <stdio.h>int main(){ float r, s;scanf("%f",&r);s=3.14159*r*r;printf("%f\n", s); //s是float型,%d打印的是整形。
数据不一致会出错 return 0;}程序纠错后,若从键盘输入3.5,则程序的运行结果为( 38.484477)。
2.上机验证题int main(){ char c1='b',c2='e';printf("%d,%c\n",c2-c1,c2-'a'+'A');return 0;}程序运行结果:( )int main(){ int x=10, y=3, z;printf("%d %d\n", x/y, x%y); return 0;}程序运行结果:( )int main(){ int sum=5, pad=5;pad = sum ++, pad ++, ++ pad; printf("%d\n", pad);return 0;}程序运行结果:( )int main(){short int n=65536;n++;printf("%d\n",n);return 0;}程序运行结果:( )3.上机编程题1、从键盘上任意输入三个整型数据a、b和c,要求将其交换输出a、b和c的值。
实验二 分支程序实验和循环程序实验
实验二分支程序实验和循环程序实验【上篇】分支程序实验一、知识点1、控制转移类指令无条件转移指令JMP 、条件转移指令Jcc2、单分支结构注意分支条件的选择:当条件满足时,直接转到分支的下一条指令;否则,执行单分支语句段。
例如,求AX中数据的绝对值:CMP AX, 0JGE NONEGNEG AXNONEG: MOV RESULT, AX思考:如果条件改为JL,以上分支程序段如何改写?是比较程序段的复杂度?3、双分支结构双分支结构中条件的选择任意,但特别注意:当分支语句段1结束后,一定要用JMP指令跳过分支语句段2,即跳到分支结束的位置。
例如,判断AX中的数据的符号,若为非负数,则0✍sign;否则,-1✍sign。
CMP AX, 0JGE NONEGMOV SIGN, -1JMP END0NONEG: MOV SIGN, 0END0: ……4、分支结构程序测试用例的设计基本准则:测试用例要满足能够使每个分支都能执行一次,特别注意边界数据的测试。
换句话说,就是首先分析每个分支条件,找出使条件成立、不成立时的数据取值范围,然后从每个范围中选一个数据,形成一个测试用例;另外,边界数据作为单独一个测试用例。
【举例说明】(1)单分支/双分支结构的测试:比如“判断AX中的数据的符号”程序段,需要设计三个测试用例,即分AX>0、AX<0、AX=0三种情况,分别确定一个数据(假设AX分别取5、-2、0三个数据)。
其中,0就是一个介于条件成立与不成立之间的边界数据。
具体操作:在DEBUG环境下,用R命令改变AX的值,调试,分析程序流程和结果。
(2)多分支结构的测试:对每一种情况设计一个测试用例,即1~9中的一个数、a~z中的一个字符、A~Z中的一个字符、回车符、其他字符,然后设计边界测试用1、9、A、Z、a、z,共11个测试数据。
具体操作:当测试数据需要从键盘输入时,可在在MS-DOS环境下逐个使用测试数据运行;当测试数据是程序中某个变量或寄存器的值时,可在DEBUG环境下,利用R或E命令用测试数据修改寄存器或变量的值,然后运行。
实验二 分支与循环程序设计实验
实验二 分支与循环程序设计实验
实验目的:熟练掌握Keil 环境下汇编语言程序的调试方法,加深对汇编语言指
令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO 口的使用。
实验内容:
1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。
240/2204020X X Y X X X
X ⎧≥⎪=<<⎨⎪≤⎩当当当
2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。
P
3.0为低电平时开始计时,为高电平时停止计时。
设计1s 延时子程序(延时误差小于10us ,晶振频率12MHz )。
提高部分(选做):
a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。
利用P3.7状态选择加、减计数方式。
b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。
思考题:
1.实现多分支结构程序的主要方法有哪些?举例说明。
2.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?。
微机原理及接口技术实验指导书
微机原理及接口技术实验指导书书写实验名称时请按下表内容填写:实验一、熟悉实验运行环境实验一、实验目的1、熟悉汇编语言程序的调试环境2、掌握部分DEBUG命令二、实验内容编写一个汇编语言程序,计算1+2+3+…+99+100,并将结果存入SUM字单元。
通过调试程序熟悉汇编语言的上机操作过程及部分命令。
三、上机操作过程1、建立ASM文件(编辑源程序)使用编辑程序EDIT在磁盘上建立源程序EX.ASM例如:D:\MASM>EDIT EX.ASM用MASM程序产生OBJ文件源文件建立后,就要用汇编程序对源文件汇编,汇编后产生二进制的目标文件(OBJ文件)例如:D:\MASM>MASM EX3 、用LINK程序产生EXE文件汇编程序已产生出二进制的目标文件(OBJ),但OBJ文件并不是可执行文件,还必须使用连接程序(LINK)把目标文件转换为可执行的EXE文件例如:D:\MASM>LINK EX4、调试运行在建立了EXE文件后,就可以直接从DOS执行程序。
如果用户程序有错误或者没有直接将结果在终端上显示出来,程序执行完之后无法看见正确的结果。
那么怎么知道程序执行的结果是正确的呢?此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,得到正确的结果。
这里就要使用调试程序。
例如:D:\MASM>DEBUG EX.EXE①R命令显示或修改寄存器中的内容例如:_R BXBX 0369:059E不作修改,直接回车;否则键入修改内容,并回车②U命令反汇编a、_U[地址] 从指定地址开始,反汇编32个字节。
如果地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节b、_U[范围] 对指定范围的内存单元进行反汇编例如:_U 04BA:0100 0108③T命令单步执行命令(一次执行一条指令)例如:从代码段的0000H处开始单步执行_R IPIP XXXX: 0000_T④G命令执行命令(执行多条指令)_G 地址1 地址2表示从地址1开始执行指令到地址2结束例如:从代码段的0000H处开始连续执行指令,知道0013H处_R IPIP XXXX: 0000_G 0013⑤D命令显示内存单元的内容a、_D 地址b、_D 范围例如:显示数据段中0000H开始的若干个字节单元的内容_D DS:0000例如:显示数据段中0000H到0010H各字节单元的内容_D DS:0000 0010⑥E命令修改存储单元的内容例如:修改数据段0002H字节单元的内容为0FFH_E DS:0002XXXX:0002 XX FF⑦Q命令退出DEBUG程序实验二、分支程序设计一、实验目的1、掌握分支程序的结构形式2、掌握分支程序的设计方法 二、实验内容1、计算分段函数,X 为8位带符号数2、算法分析先将X 的范围确定在-10≤x ≤20之内,除此之外结果全为0,然后计算X+5,再根据结果的符号求绝对值。
分支和循环程序实验(精)
课程名称:实验项目:实验地点:专业班级:学生姓名:指导教师:本科实验报告计算机硬件技术基础分支和循环程序实验学号:12年 4 月 22 日一、实验目的和要求1.通过分支程序设计、循环程序设计实验,掌握无条件转移指令、条件转移指令的格式、功能及使用方法。
2.掌握分支程序的结构、单分支和多分支程序的设计方法。
3.了解循环程序的基本结构和控制循环的方法。
二、实验内容与要求要求学生按教师指定题目进行汇编语言程序设计,并上机调试,以实现较复杂的程序设计。
1. 已知X、Y、Z、MAX为16位的带符号数,求三个数中最大值,结果存入MAX单元。
2. 求10个学生成绩中的最高成绩,结果存入MAX字节单元中,已知成绩为字节型。
第一题程序:STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATA SEGMENTX DW 10Y DW -20Z DW 30MAX DW 2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK,DS:DATABEGIN:MOV AX, DATAMOV DS, AXMOV AX,XMOV BX,YMOV CX,ZCMP AX,BXJG S1CMP BX,CXJG S3MOV MAX ,BXS3: MOV MAX ,AXS1: CMP AX,CXJG S2MOV MAX,CXS2: MOV MAX , AXCODE ENDSEND BEGIN第二题程序:SSEG SEGMENTDB 200 DUP(0)SSEG ENDSDATA SEGMENTVAR DB 1,2,3,4,5,6H,13,23,45,32,12H N EQU $-VARDATA ENDSCODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DATA BG: MOV AX,DATA MOV DS,AXMOV CX,N-1MOV SI, 0MOV BH ,VAR[SI] JCXZ LASTAGIN: INC SICMP BH,VAR[SI]JAE NEXTMOV BH , VAR[SI]NEXT: LOOP AGINLAST: MOV AH ,4CHINT 21HCODE ENDSEND BG五、实验结果与分析(必填)第二题结果。
微机实验分支和循环程序设计实验
微机实验分支和循环程序设计实验微机实验三分支和循环程序设计实验一、分支程序设计实验1.实验目的1.掌握分支程序的结构。
2掌握分支程序的设计、调试方法。
2.实验设备微机一台3.内容设计一数据块间的搬移程序代码:DATA SEGMENT ;定义数据段ORG 2520H ;输入原数据存放地址 X DB 1,2,3,4,5,6,7 ;1234567的赋值COUNT EQU $-X ;计算数据串长度 ORG 2525H ;输入目的数据存放地址 Y DB 7 DUP(0) ;定义目的数据长度 DATA ENDS ;数据段结束STACK SEGMENT PARA STACK 'STACK' ;定义堆栈段 STAPN DB 100 DUP(?) ;定义100个字节空间 TOP EQU LENGTH STAPN STACK ENDSCODE SEGMENT ;定义代码段MAIN PROC FAR ;过程定义语句ASSUME CS:CODE,DS:DATA,SS:STACK ;段寄存器分别与哪些段有关START:MOV AX,STACK;设置堆栈寄存器MOV SS,AXMOV SP,TOPPUSH DS ;DS入栈保护SUB AX,AX ;AX=0PUSH AX ;段内偏移量0入栈MOV AX,DATA ;数据段基址赋给AXMOV DS,AXLEA AX,X ;取X的地址偏移量LEA BX,Y ;取Y的地址偏移量CMP AX,BX ;比较大小JC FE ;如果AX小于BX,则执行FEJMP FS ;否则执行FSFS: MOV SI,0 ;从前往后复制MOV DI,0MOV CX,COUNT ;确定复制次数CIRCLE1:MOV AL,X[SI] ;MOV不能实现两存储空间赋值,所以先把原始数据存入ALMOV Y[DI],AL ;将数据赋给YINC SI ;SI指向下一个数据INC DI ;DI指向下一个数据LOOP CIRCLE1 ;循环赋值JMP END1 ;循环结束退出 FE: MOV SI,COUNT ;从末尾开始赋值MOV DI,COUNTDEC SI ;指向最后一个数据DEC DIMOV CX,COUNT ;确定循环次数CIRCLE2: MOV AL,X[SI] ;MOV不能实现两存储空间赋值,所以先把原始数据存入ALMOV Y[DI],AL ;将数据赋给YDEC SI ;SI指向下一个数据DEC DI ;DI指向下一个数据LOOP CIRCLE2 ;循环赋值JMP END1 ;循环结束退出END1: RET ;返回dos MAIN ENDP ;MAIN过程结束CODE ENDS ;代码段结束END MAIN ;源代码结束运行结果:若从后往前传:若从前往后传:二、循环程序设计实验1.实验目的(1)加深对循环结构的理解。
实验二 C语言中的分支语句程序设计实验
实验二 C语言中的分支语句程序设计一、实验目的:1.掌握C语言的基本语法;2.掌握C语言的表达式运算及标准库函数的调用方法;3.掌握C语言的基本输入输出语句;4.掌握字符类型、整型和浮点型数据的输入输出及表达式计算方法;5.掌握if语句和switch语句的用法;6.掌握分支程序结构的设计思想;二、实验内容(一)分析程序,用程序验证下面各个表达式的值1、当整型变量a,b,c的值分别为3,4,5时,以下各语句执行后a,b,c的值为多少? (1) if(a>c) {a=b; b=c; c=a;}else {a=c; c=b; b=a;}执行后a,b,c的值为,,(2) if(a<c) a=c;else a=b; c=b; b=a;执行后a,b,c的值为,,(3) if(a!=c) ;else a=c; c=b; b=a;执行后a,b,c的值为,,2、若整数x分别等于95、87、100、43、66、79,57,则以下程序段运行后屏幕显示是什么?switch(x/10){ case 6:case 7: printf("Pass\n"); break;case 8: printf("Good\n"); break;case 9:case 10: printf("VeryGood\n"); break;case 5 : printf("Between Pass and Fail\n");default: printf("Fail\n");}x等于95时,程序段运行后屏幕上显示。
x等于87时,程序段运行后屏幕上显示。
x等于100时,程序段运行后屏幕上显示。
x等于43时,程序段运行后屏幕上显示。
x等于66时,程序段运行后屏幕上显示。
x等于79时,程序段运行后屏幕上显示。
x等于57时,程序段运行后屏幕上显示。
实验二 分支及循环程序设计_new
实验二分支及循环程序设计1.实验目的:(1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。
(2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。
(3)分支及循环程序设计2.实验步骤:(1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)(3)用连接程序TLINK连接目标代码文件,形成可执行文件。
(扩展名为EXE)(4)运行可执行文件。
观察执行结果,以验证其正确性。
3.实验内容:1)从键盘上输入一个十进制数(-32767<x<32767),若为正返回为正1,若为负返回为-1,若为0返回为0,并显示符号函数的结果。
参考程序:.model tiny.code.Startupcall readmov ax,bxcall dpcrlfcmp ax,0jge a1mov bx,-1jmp exit1A1: jg a2mov bx,0jmp exit1A2: mov bx,1Exit1: call write.exit 0INCLUDE out_B_D.ASMINCLUDE in_D_B.ASMEnd2).编写多字节非组合BCD码相加的程序。
其参考程序如下:.model small.stack 256.datanum1 db 4,7,8,2,3count equ $-num1num2 db 3,5,6,1,4sum db count dup (0).code.startmov ax,@datamov ds,axmov es,axlea si,num1lea bx,num2lea di,sumadd si,count-1add bx,count-1add di,count-1mov cx,countstdclcl1:lodsbadc al,[bx]aaastosbdec bxloop l1mov ax,4c00hint 21hend start3).将上面2)题改成非组合BCD码相减,则程序如何修改?4).将上面2)题改成组合BCD码相加或相减,则程序如何修改?5). 将上面2)题改成二进制相加或相减,则程序如何修改?。
分支与循环程序设计实验报告
实验名称分支与循环程序设计实验指导教师罗志祥 ___________专业班级光电1406 姓名段昳晖学号U2014*****联系电话137********、任务要求1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单兀,请按要求编写完整程序。
X2当X64Y X /2当10X 64X当X102.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s延时子程序(延时误差小于10us,晶振频率12MHZ。
二、设计思路1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。
X2当X64Y X /2当10X 64X当X10将外部单元1000H中的X,通过分支判断,分别执行不同的语句,三条语句分别为标记为L1、L2、L3,先比较X与64的大小关系,再判断X与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE指令后的进位位CY,进一步比较大小,分别跳转至对应语句。
将结果存于外部单元的1001H以及1002H=2. 利用51系列单片机设计一个 24小时制电子时钟,电子时钟的时、分、秒数值分别 通过PO 、P1、P2端口输出(以压缩 BCD 码的形式)。
P3.0为低电平时开始计时,为高电平 时停止计时。
设计 1s 延时子程序(延时误差小于 10us ,晶振频率12MHZ 。
主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。
利用RO R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环 60次,中循环循环1次,中循环60 秒,外循环循环1次,外循环循环24次,清零。
其中对端口显示的秒数、分钟数、时间数, 进行二进制修正。
利用循环来设计延时程序,合理计算语句长度,以及循环次数。
分支与循环程序设计实验
一. 实验目的及实验环境实验目的:实验目的:1、掌握分支程序的设计方法。
、掌握分支程序的设计方法。
2、掌握宏定义及宏调用的基本方法。
、掌握宏定义及宏调用的基本方法。
3、了解小写和大写字母的ASCII 码表示及其转换方法。
了解数字及其它字符在的ASCII 码表示方法。
码表示方法。
4、掌握循环程序的设计方法。
、掌握循环程序的设计方法。
5、掌握比较指令、转移指令和循环指令的使用方法。
6、进一步掌握调试工具的使用方法、进一步掌握调试工具的使用方法 实验环境:实验环境:80x86系列微型计算机一台以及进行汇编语言程序设计所必需的编程工具(文本编辑器、(文本编辑器、ASM.EXE ASM.EXE ASM.EXE、、LINK.EXE LINK.EXE、、DEBUG.EXE DEBUG.EXE)) 二. 实验内容 1、 从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。
若输入为小写字母,显示“若输入为小写字母,显示“You Input a Lowercase Letter You Input a Lowercase Letter You Input a Lowercase Letter!!”;若输入为大写字母,写字母,显示显示显示““You Input a Uppercase Letter Letter!!”; 若输入为数字,若输入为数字,显示显示“You Input a Digit Input a Digit!!”; 若输入为其它字符,显示“若输入为其它字符,显示“You Input Other Letter You Input Other Letter You Input Other Letter!!”。
2、计算1+2+……n=?n=?,其中,其中n 通过键盘输入。
要求在屏幕上提供如下信息:上提供如下信息:Please input a number(1~627): ;出现此信息后通过键盘输入一个小于628的无符号整数1+2+1+2+……..n=sum ;其中n 为用户输入的数,为用户输入的数,sum sum 为所求的累加和为所求的累加和 程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。
实验二 结构化汇编程序设计(分支和循环程序)实验报告
沈阳工程学院学生实验报告实验室名称:微机原理实验室实验课程名称:实验项目名称:结构化程序设计实验实验日期:20 年月日班级:姓名:学号:指导教师:批阅教师:成绩:一.实验目的1.学习条件转移类指令以及分支程序设计方法。
2.学习循环控制类指令以及循环程序设计方法。
3.熟练掌握Wmd86调试软件的使用及程序运行、调试方法。
二.实验设备PC机一台,TD-PITE微机原理实验教学系统一台。
三.实验内容程序1:根据X的范围求Y的值,当X<5时,Y= —X;当X>=5且X<10时,Y=X+5;当X>=10时,Y=X+20。
假设X、Y均为带符号数。
请将程序代码补充完整。
DA TA SEGMENTX DB 17Y DB ?( )CODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DATA( )MOV AL,X( )JGE GE5NEG AL( )GE5: CMP AL,10JGE GE10( )JMP EXITGE10:ADD AL,20EXIT:MOV Y,ALHLT ; (接右侧)CODE ENDSEND START程序2:有一组字节类型数据DATA,数据个数在COUNT中。
编程求出DATA中正数、负数及零的个数,将结果分别保存在D1、D2、D3中。
请将程序代码补充完整。
MYDATA SEGMENTDATA DB -1,15,-58,4,-7,0,0,9,-12,45,5COUNT EQU $-DA TAD1 DB 0 ;存放正数个数D2 DB 0 ;存放负数个数D3 DB 0 ;存放0的个数MYDATA ENDSMYCODE SEGMENTASSUME CS:MYCODE,DS:MYDA TASTART:MOV AX, MYDATAMOV DS, AX( )MOV CX, COUNTXOR BL, BL ;存放正数个数XOR BH, BH ;存放负数个数( );存放0的个数NEXT: MOV AL, [SI]CMP AL, 0 ; (接下页)结构化程序设计实验JG ZHENGJL FUINC DLJMP GOON ZHENG: ( )JMP GOONFU: INC BHGOON: INC SI ; (接右侧)LOOP NEXT( )MOV D2,BHMOV D3,DLHLTMYCODE ENDS( )四.实验步骤1.运行Wmd86调试软件,先建立( ),然后编写实验程序1,经( )、链接无误后,进入调试状态。
实验二 分支与循环程序设计实验
开始 (A)X Y (A)=0 ? N (A)>0 ?N (A)=-1 存结果 结果 Y
开始 (A)X (A)=0 ? N (R0)=-1
(A)=1
(A)<0 ?N (R0)=-1 存结果 结果
(a)
(b)
七、实验报告要求 1、实验内容1为必做内容;内容2、3任选为必做。内容1有单步调试 与全速执行记录,内容2或者内容3有单步调试、断点调试以及全速 执行记录。 2、每个内容要求有程序框图与程序清单(每条指令注释)。
实验二
一、 实验目的
分支与循环程序设计实验
1.进一步了解仿真软件使用、汇编程序编写和汇编程序调试方法。
2.掌握分支与循环程序设计的方法。
二、实验仪器和设备 PC机、WAVE仿真软件。
三、实验内容
内容1:设变量X存放于R2,函数值y存放在R3。试按照下式的要求给y赋值: 1 X>0 y = 0 X=0 -1 X<0 内容2:统计一数组(自拟数据)中零、负数、正数的个数。 内容3:求一数组(自拟数据)中最大数(或最小数)。
3、对T21.ASM源程序进行编译。点击项目菜单,选择全部编译。编译无 误后,打开数据窗口,选择外部数据存储器窗口DATA,拖动DATA窗口的 滚动条,使地址**出现在窗口上,观察**单元的内容。执行程序:点击 全速执行快捷按钮,点击暂停按钮,点击复位按钮,可再次运行程序。 4、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄 存器的变化,可以看到程序执行的过程,加深对实验的了解。
5、内容2或者内容3进行2、3、4操作,增加断点调试,观察相应单元或 寄存器数据变化。
六、参考程序 (内容1)
先分支后赋值。自变量X是个带符号数,故可采用累加器判零条 件转移和位控制条件转移指令来分析判断,程序流程如图 (a)所示 。 ORG 0500H MOV A,R2 ;自变量-->(A) CJNE A,#0,L1 ;(A)与0比较,不等则转移 MOV R3,#0 ;若相等,0(R1) SJMP L3 L1: JB ACC.7,L2 ;自变量<0则转移 MOV R3,L3 ;自变量>0,1+(R1) SJMP L3 L2: MOV R3,#0FFH ;自变量<0,1(R1) L3: SJMP $ END
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二分支程序实验和循环程序实验【上篇】分支程序实验
一、知识点
1、控制转移类指令
无条件转移指令JMP 、条件转移指令Jcc
2、单分支结构
注意分支条件的选择:当条件满足时,直接转到分支的下一条指令;否则,执行单分支语句段。
例如,求AX中数据的绝对值:
CMP AX, 0
JGE NONEG
NEG AX
NONEG: MOV RESULT, AX
思考:如果条件改为JL,以上分支程序段如何改写?是比较程序段的复杂度?
3、双分支结构
双分支结构中条件的选择任意,但特别注意:
当分支语句段1结束后,一定要用JMP指令跳过分支语句段2,即跳到分支结束的位置。
例如,判断AX中的数据的符号,若为非负数,则0→sign;否则,-1→sign。
CMP AX, 0
JGE NONEG
MOV SIGN, -1
JMP END0
NONEG: MOV SIGN, 0
END0: ……
4、分支结构程序测试用例的设计
基本准则:测试用例要满足能够使每个分支都能执行一次,特别注意边界数据的测试。
换句话说,就是首先分析每个分支条件,找出使条件成立、不成立时的数据取值范围,然后从每个范围中选一个数据,形成一个测试用例;另外,边界数据作为单独一个测试用例。
【举例说明】
(1)单分支/双分支结构的测试:比如“判断AX中的数据的符号”程序段,需要设计三个测试用例,即分AX>0、AX<0、AX=0三种情况,分别确定一个数据(假设AX分别取5、-2、0三个数据)。
其中,0就是一个介于条件成立与不成立之间的边界数据。
具体操作:在DEBUG环境下,用R命令改变AX的值,调试,分析程序流程和结果。
(2)多分支结构的测试:对每一种情况设计一个测试用例,即1~9中的一个数、a~z 中的一个字符、A~Z中的一个字符、回车符、其他字符,然后设计边界测试用1、9、A、Z、a、z,共11个测试数据。
具体操作:当测试数据需要从键盘输入时,可在在MS-DOS环境下逐个使用测试数据运行;当测试数据是程序中某个变量或寄存器的值时,可在DEBUG环境下,利用R或E 命令用测试数据修改寄存器或变量的值,然后运行。
二、实验内容
1、编写一个程序,显示AL寄存器中的两位十六进制数
三、实验步骤
1、用记事本编写.ASM源程序。
2、对源程序进行汇编及连接,产生.EXE文件
四、实验报告要求
参考下面的程序,完成实验内容,截图显示,重点画出程序的流程图。
参考程序清单
⑴ 显示AL中两位十六进制数程序: TWO.ASM
CODE SEGMENT
ASSUME CS:CODE
START:MOV AL,3EH
MOV BL,AL
MOV DL,AL
MOV CL,4
SHR DL,CL
CMP DL,9
JBE NEXT1
ADD DL,7
NEXT1:ADD DL,30H
MOV AH,2
INT 21H ;显示高位ASCII码 MOV DL,BL
AND DL,0FH
CMP DL,9
JBE NEXT2
ADD DL,7
NEXT2:ADD DL,30H
MOV AH,2
INT 21H ;显示低位ASCII码
MOV AH,4CH
INT 21H
CODE ENDS ;返回DOS
END START
【下篇】循环程序实验
一、知识点
1、常用循环结构的汇编语言实现
(1)对于确定循环次数的循环结构,一般使用LOOP指令构成循环,LOOP指令中的标号位循环体的起始位置。
但在循环之前要将循环次数送CX。
(2)对于循环次数不定的循环结构,一般用Jcc指令与标号一起构成循环。
(3)循环结构的汇编语言程序一般包含三部分,即
循环初始部分——循环之前准备相应的条件,如循环次数、相关变量/寄存器赋初
值等;
循环体——重复执行的程序代码,其中包含改变与循环条件有关的值;
循环控制部分——判断循环条件,决定是否继续循环。
2、循环程序的测试技巧
单步调试与分段调试结合:即对循环体内部的程序段的测试用单步执行的方法,执行1~2遍循环体,观察并分析每一步的结果及程序流程;对于整个循环体程序段的测试,一般用G命令分段调试,通过结果判断循环体的正确程度。
二、实验内容
1、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z
字符,均显示'c';若是回车字符<CR>(其ASCII码为0DH),则自动结束程序,若为其它字符则不显示,循环等待新的字符输入。
三、实验步骤
1、用记事本编写.ASM源程序。
2、对源程序进行汇编及连接,产生.EXE文件
四、实验报告要求
完成实验内容,截图显示,重点画出程序的流程图。
实验代码
DATA SEGMENT
DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS
SUB AX,AX ;AX清零
PUSH AX
MOV AX,DATA
MOV DS,AX ;DATA段地址给DS
NEXT:
MOV AH,07 ;INPUT CHARACTER INT 21H
CMP AL,0DH
JE OVER ;enter
CMP AL,'0'
JGE DA0 ;>=0
JMP NEXT
DA0:
CMP AL,'9'
JLE DA09 ;<=9
CMP AL,'A'
JGE DA_GA ;>=a
JMP NEXT
DA_LA:
CMP AL,'Z'
JLE CHR ;A~Z
JMP NEXT
CMP AL,'a'
JGE DA_LA
JMP NEXT
DA_GA:
CMP AL,'z'
JLE CHR ;a~z
JMP NEXT
;////////////////////////////
DA09:
MOV AH,02
MOV DL,AL ;DISPLAY NUMBER
INT 21H
JMP NEXT
CHR:
MOV AH,2
MOV DL,'c' ;DISPLAY CHARACTER:c INT 21H
JMP NEXT
OVER:
RET ;BACK
MAIN ENDP
CODE ENDS
END MAIN
实验截图:
(1)
(2)。