实验二 分支及循环程序设计
循环程序设计实验报告
循环程序设计实验报告
实验名称:循环程序设计实验报告
实验目的:
本实验旨在通过编写循环程序,提高学生对循环结构的理解和应用
能力,并培养学生的编程思维和解决问题的能力。
实验要求:
1.熟悉循环结构的基本原理和应用场景。
2.掌握使用循环结构解决实际问题的方法。
3.能够分析和设计能够利用循环结构优化的程序。
4.完成实验报告,详细记录实验过程和结果。
实验内容:
1.实验环境和工具
介绍实验所使用的编程环境和工具,包括操作系统、编程语言和开
发工具等。
2.实验题目和要求
描述实验要求和题目,明确实验要求和要解决的问题。
3.实验设计
介绍实验的设计思想和方法,包括解决问题的整体思路和基本步骤。
4.实验步骤
按照设计思路和方法,详细描述实验的具体步骤,包括程序的编写、调试和运行等。
5.实验结果与分析
展示实验的运行结果,并对结果进行详细分析和解释。
6.实验总结
总结实验的过程和结果,提出实验中存在的问题和改进的方向。
附件:本实验涉及的附件包括但不限于实验源代码、实验数据和实
验报告等。
法律名词及注释:
1.版权:著作权法规定的个人或集体对作品享有的专有权利。
2.商标:商标法规定的商业标识,用以区分不同商家的商品或服务。
3.专利:专利法保护的发明创造,赋予发明人对其发明的独占权利。
汇编语言-实验二 循环与子程序程序设计
实验二循环与子程序程序设计一、实验目的1) 加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5) 掌握子程序设计、编制及调试。
6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1) 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
2)将从3000H内存单元开始的100个字节存储单元全部清0。
3)编制在屏幕上显示九九乘法表的程序。
4)编制在屏幕上显示用*组成的三角形的程序。
5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。
6)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。
三、源程序EXAM2-1DA TA SEGMENTBUF DB’S=1+2×3+3×4+4×5+…+N(N+1)+…=’,’$’RES DW 4 DUP(0),’$’DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXMOV DX, OFFSET BUFMOV AH,09HINT 21HMOV DX, 1MOV BL, 2NEXT:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,200JNA NEXTMOV CX,0004HMOV DI,OFFSET RESADD DI,03HNEXT1:MOV AX, DXAND AX, 000FHCMP AL,0AHJB NEXT2ADD AL,07NEXT2:ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL,04SHR DX,CLPOP CXLOOP NEXT1MOV DX,OFFSET RESMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START执行程序EXAM2-1·EXE,屏幕上显示结果:S=1+2×3+3×4+4×5+...+N(N+1)+ (045)EXAM2-2ORG 2000H2000 BF0030 MOV DI, 30002003 B164 MOV CL, 642005 C60500 MOV BYTE PTR[DI],02008 47 INC DI2009 FEC9 DEC CL200B 75F8 JNZ 2005200D F4 HLTEXAM2-3DATA SEGMENTA TAD DB ?, 2AH, ?, 3DH, ?, ?, 20H, '$'A TAD1 DB ?, 2AH, ?, 3DH, ?, ?, 0DH, 0AH, '$' DA TA ENDSSTACK SEGMENT STACKDB 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART:MOV AX, DA TAMOV DS, AXMOV CL, 09HMOV BL, 00HOKL:MOV AL, 00HINC BLOK1:INC ALPUSH AXCMP BL, ALJZ OKMOV BH, ALMUL BLMOV DI, OFFSET ATADCALL OKPPOP AXJMP OK1OK:MOV BH, ALMUL BLMOV DI, OFFSET ATAD1CALL OKPPOP AXLOOP OKLMOV AH, 4CHINT 21HOKP PROCPUSH AXPUSH BXPUSH CXADD BX, 3030HMOV [DI], BHMOV [DI + 02H], BLMOV CX, 0AHMOV DH, 00HOKL2:CMP AX, CXJS OK2ADD CX, 0AHINC DHJMP OKL2OK2:SUB CX, 0AHSUB AX, CXMOV AH, DHADD AX, 3030HMOV [DI + 04H], AHMOV [DI + 05H], ALMOV DX, DIMOV AH, 09HINT 21HPOP CXPOP BXPOP AXRETOKP ENDPCODE ENDSEND START执行程序EXAM2-2·EXE,屏幕上显示结果:1*1=011*2=02 2*2=041*3=03 2*3=06 3*3=091*4=04 2*4=08 3*4=12 4*4=161*5=05 2*5=10 3*5=15 4*5=20 5*5=251*6=06 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=07 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=08 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=09 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81EXAM2-4CODES SEGMENTASSUME CS:CODESSTART:XOR BX,BXMOV DL,2AHMOV CX,9LOP: PUSH CXINC BLMOV CL,BLMOV DL,2AHLOP2: MOV AH,02HINT 21HLOOP LOP2POP CXMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HCMP BL,9JZ ENDPROLOOP LOPENDPRO:MOV AH,4CHINT 21HCODES ENDSEND START执行程序EXAM2-4·EXE,屏幕上显示结果:*********************************************EXAM2-5STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDA TA SEGMENTBUF DW 0F101H,110DH,52H,100H,456H COUNT =($-BUF)/2RESULT DW 4 DUP(?),'$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK WDADD PROCPUSH DIMOV AX, 0MOV DX, 0MOV DI, OFFSET BUFNEXT2: ADD AX, [DI]JNC NEXT1INC DXNEXT1: ADD DI, 2LOOP NEXT2POP DIRETWDADD ENDPSHOW PROCPUSH CXPUSH DIMOV CX, 04HMOV DI, OFFSET RESULTMOV BX, AXADD DI, 07HBBB: MOV AX, BXAND AX, 000FHCMP AL, 0AHJB QQQADD AL, 07HQQQ: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04SHR BX, CLPOP CXLOOP BBBMOV CX, 0004HCCC: MOV AX, DXAND AX, 000FHCMP AL, 0AHJB DDDADD AL, 07HDDD: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04HSHR DX, CLPOP CXLOOP CCCPOP DIPOP CXRETSHOW ENDPBEGIN: MOV AX, DATAMOV DS, AXMOV CX, COUNTCALL WDADDCALL SHOWMOV DX, OFFSET RESULTMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN执行程序EXAM2-5·EXE,屏幕上显示结果:000107B6。
分支与循环程序设计实验
实验名称 分支与循环程序设计实验 指导教师 罗志祥 专业班级 姓名 学号 联系电话一、任务要求1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。
240/2204020X X Y X X XX ⎧≥⎪=<<⎨⎪≤⎩当当当2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s 延时子程序(延时误差小于10us ,晶振频率12MHz )。
提高部分(选做):a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。
利用P3.7状态选择加、减计数方式。
b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。
二、设计思路第一题:先判断正负,若是负数直接放到取反区,若是正数则分别与20,40比较大小,根据比较结果放到各自的区间进行相应的运算。
第二题:先设置好计数器数值,然后对输出口清零,开始判断p3.0是否为0,为0开始计时,为1原地踏步。
开始秒钟计时,R0减一循环,并调用延时程序,每次计数完用bcd 码子程序转换,由p2输出秒钟,判断R0是否为0,不为0继续秒钟循环,为0则把p2清零后开始分钟计时。
同理,每次计数完用bcd码子程序转换,由p1输出分钟,判断R1是否为0,不为0则跳回秒钟计时,为0则把p1清零开始时钟计时。
再同理,每次计数完用bcd 码子程序转换,由p0输出分钟,判断R2是否为0,不为0则跳回秒钟计时,为0则把p0清零跳出计时部分,再从头开始。
三、资源分配第一题:2000H 输入的自变量2005H 若X≤20 为取反结果若20<X<40 为X除以2的整数部分若X≥40 为X平方后的低八位2006H 若20<X<40 为X除以2的余数部分若X≥40 为X平方后的高八位DPTR 数据指针第二题:R0,R1,R2秒,分,时进位计数器B秒钟计数R3,R4分,时计数P0,P1,P2时,分,秒输出P3控制开关R5,R6,R7延时子程序四、流程图第一题:开始@DPTR=(2000H)=XACC.7=0?A=20?CY=0?NOYESNOA=40?CY=0?B=A,A=A*BINC DPTR @DPTR=AINC DPTR @DPTR=BYESNOYESENDYESNOYESA 取反B=2,A=A/BNO第二题:开始把#60存入R0,R1中,#24存入R2中P3.0为高电平?延时1sB=B+1P2=B R0=R0-1YESP2=AR0=0?B=#0P2=#0P1=R3+1R0=#60B=#0R3=#0P1=#0ENDNOYESR1=0?R1=R1-1YESP0=R4+1R1=#60R2=R2-1R2=0?NONOYES五、源代码(含文件头说明、语句行注释)第一题:ORG 0000HLJMP MAINORG 0100HMAIN:MOV DPTR,#2000HMOV A,#49MOV B,#00HMOVX @DPTR,AJNB ACC.7,LOOP1 ;判断符号位,为0转到LOOP1 L1: CPL A ;A取反SJMP STORELOOP1:CJNE A,#20,LOOP2 ;A不等于20跳转到LOOP2SJMP L1 ;A等于20跳到L1LOOP2:JC L1 ;c=1则A小于20CJNE A,#40,LOOP3;c=0则A大于20L2: MOV B,AMUL AB ;求平方SJMP STORELOOP3:JNC L2 ;A大于40跳到L2MOV B,#02H ;c=1,A小于40令B=2DIV AB ;求A/2STORE:MOV DPTR,#2005H ;结果存放MOVX @DPTR,AINC DPTRMOV A,BMOVX @DPTR,A ;平方低位在前高位在后SJMP $ ;踏步第二题:ORG 0000HLJMP MAINORG 0100HMAIN: MOV R0,#60MOV R1,#60MOV R2,#24 ;秒分时计数器赋初值MOV R3,#0HMOV R4,#0H ;分钟和时钟赋初值MOV P0,#0HMOV P1,#0HMOV P2,#0HMOV P3,#0H ;清零START: JB P3.0,DONE ;p3为低电平开始计时,为高电平结束 ACALL DELAYMOV A,BADD A,#01HDA AMOV B,AMOV P2,A ;秒钟输出DJNZ R0,START ;R0不为0跳到STARTMOV B,#0HMOV P2,#0HMOV A,R3ADD A,#01HMOV R3,A ;分钟计时MOV P1,A ;分钟输出MOV R0,#60 ;计数器归位DJNZ R1,START ;R1不为0跳到START MOV B,#0HMOV R3,#0HMOV P1,#0HMOV A,R4ADD A,#01HDA AMOV R4,A ;时钟计时MOV P0,A ;时钟输出MOV R1,#60 ;计数器归位DJNZ R2,START ;R2不为0跳到START SJMP MAINDONE: SJMP $DELAY:MOV R5,#10 ;延时子程序L3: MOV R6 ,#200L1: MOV R7 ,#249L2: DJNZ R7 ,L2DJNZ R6 ,L1DJNZ R5 ,L3RETEND六、程序测试方法与结果第一题:取X=13,结果如下取X=23,结果如下取X=49,结果如下第二题:思考题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("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时,程序段运行后屏幕上显示。
实验二 循环程序设计
实验二循环程序设计一、实验目的1) 加深对循环结构的理解。
2) 掌握循环程序的设计方法。
二、实验内容将从3000H内存单元开始的100个字节存储单元全部清0。
要求:先在在DEBUG调试状态下进行,然后在dos下进行masm和link进行。
过程包括汇编程序、运行程序、检查结果。
三、实验设备PC机一台四、实验步骤1) 输入源程序并检查无误。
2) 对内存单元3000H开始的100个存储单元用E命令输入任意数。
3) 程序用DEBUG的T命令单步跟踪执行。
4) 程序用DEBUG的G命令执行。
5) 用D命令检查执行结果。
6) 用宏汇编格式写源程序。
7) 对源程序进行编译、连接、运行。
五、实验报告的要求1) 列出源程序。
2) 对程序中用到的寄存器说明其功能。
1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL 、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器CX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器DX称为数据寄存器(Data Register)。
分支与循环程序设计
分支与循环程序设计3.计时条件,若不满足,则重复判断直至满足;若满足,则秒钟自加一,循环,判断秒钟循环满60次后出循环,对分钟自加一,然后继续循环,最后判断分钟循环满60次后出循环,对时钟自加一,然后判断时钟循环满24则回到初值,时分秒重新赋值并重新开始循环。
4.判断P3.7,若为1,则进行加一计数,若为0,则跳转至另一程序进行减一计数;加一计数中,先取低位P1送A,自加一,送P1,判断是否有溢出,若有,则取高位P2送A,自加一,送P2,然后回判断循环;减一计数同理,即先取低位P1送A,自减一,送P1,判断是否有进位,若有,则取高位P2送A,自减一,送P2,然后回判断继续循环。
三、资源分配1.2000H 片外RAM存数2001H 存结果低八位2002H 存结果高八位B寄存器暂存结果高八位2.P3.0 存计时判断位R0、R1、R2 存延时子程序中各重循环的循环次数R3、R4、R5 存时分秒的循环次数P0、P1、P2 存时分秒的输出值3.P1、P2 分别存十进制计数的低两位、高两位P3.7 存计数方式的控制位四、流程图1、8 bit符号数的判断与计算2、时钟设计3.十进制加减一计数器五、源代码(含文件头说明、语句行注释)1.8 bit符号数的判断与计算 ORG 0000HLJMP STARTORG 1000HSTART: MOV DPTR,#2000H;地址指针赋初值 MOV A,#22MOVX @DPTR,AMOVX A,@DPTR;取数JB ACC.7,DDCJNE A,#64,AA;若A≠64,则转AA AA: JC BB;若A<64,则转BBMOV B,AMUL AB;求A的平方INC DPTRMOVX @DPTR,A;存结果低八位INC DPTRMOV A,BMOVX @DPTR,A;存结果高八位SJMP $BB: CJNE A,#10,CC;若A≠10,则转CC CPL AEE: INC DPTRMOVX @DPTR,ASJMP $CC: JC DD;若A<10,则转DDRR A;若A>10,则右移一位SJMP EE DD: CPL A INC A SJMP EEEND2.时钟设计ORG 0000HLJMP STARTORG 1000HSTART: JB P3.0,START;若为0,则开始计时RESTA: MOV R3,#24MOV P0,#00H ;时钟赋初值LOOP3: MOV R4,#60MOV P1,#00H ;分钟赋初值LOOP2: MOV R5,#60MOV P2,#00H ;秒钟赋初值LOOP1: ACALL DELAY;调用延时1S子程序LOOP: JB P3.0,LOOP;若为1,则停止计时 MOV A,P2ADD A,#01HDA AMOV P2,ADJNZ R5,LOOP1;判断秒钟是否结束循环MOV A,P1ADD A,#01HDA AMOV P1,ADJNZ R4,LOOP2;判断分钟是否结束循环MOV A,P0ADD A,#01HDA AMOV P0,ADJNZ R3,LOOP3;判断时钟是否结束循环 LJMP RESTADELAY: MOV R0,#12NOPDELAY3:MOV R1,#130DELAY2:MOV R2,#212NOPNOPDELAY1:NOPDJNZ R2,DELAY1DJNZ R1,DELAY2DJNZ R0,DELAY3RETEND3.十进制加减计数器 ORG 0000H LJMP STARTORG 1000H START:MOV P1,#12H MOV P2,#92H LOOP: ACALL DELAY MOV A,P2JB P3.7,AA;若为1,则转AA实现记数加1ADD A,#99HDA A;实现十进制减1MOV P2,AJC BB;判断是否产生借位,若产生,则对高位减1MOV A,P1ADD A,#99HDA AMOV P1,AAJMP LOOPAA: ADD A,#01HDA A;实现十进制加1MOV P2,AJNC BB;判断是否产生进位,若产生,则对高位加1MOV A,P1ADD A,#01HDA AMOV P1,ABB: AJMP LOOPDELAY: MOV R0,#12 NOPDELAY3:MOV R1,#130 DELAY2:MOV R2,#212 NOPNOPDELAY1:NOPDJNZ R2,DELAY1DJNZ R1,DELAY2DJNZ R0,DELAY3RETEND六、程序测试方法与结果1.8 bit符号数的判断与计算1)令片外RAM中数据为642)令片外RAM中数据为223)令片外RAM数据为14)令片外RAM数据为-22.时钟设计1)令P3.0=0,程序按十进制正常运行2)令P3.0=0,暂停计数3)设置断点观察延时子程序的延时时间,刚好为1s3.十进制加减1计数器1)将P3.7置1,计数器实现加一计数2)将P3.7置0,计数器实现减一计数七、思考题1.实现多分支结构程序的主要方法有哪些?举例说明。
循环和分支程序设计(实验报告)
实验二 循环和分支程序设计学号 201216008 姓名 孙坤 专业 电子信息科学与技术 成绩【实验目的】(1) 熟悉上机实验流程、调试及查看实验结果。
(2) 熟悉汇编语言编程环境,DOS 调用应用;(3) 编写循环和分支程序,并调试;【实验内容及步骤】1、 实验要求:从键盘输入一系列字符,以回车符结束,编程统计其中数字字符的个数(不超过100个) 提示:程序首先调用DOS 功能的1号功能,从键盘输入字符。
为得到字符串,可以采用循环结构,连续输入。
在输入的过程中通过判断是否是回车来结束输入。
其中回车的ASII 码(0DH )。
数字的0的ASII 码(30H )9的(39H )流程图:Next1函数:Next 函数:Exit函数:2、实验内容:实验程序:dataseg segmentmess1 db'Please input',13,10,'$' mess2 db'Ouput',13,10,'$' dataseg endscodeseg segmentassume ds:dataseg, cs:codeseg main procstart:mov ax,datasegmov ds,axmov bx,0lea dx,mess1mov ah,09hint 21hloop3:mov ah,01 int 21hcmp al,0dh jz output cmp al,'0' jnl loop1 jmp loop3loop1:cmp al,'9' jng loop2 jmp loop3loop2:inc bx jmp loop3 output:mov dx,13 mov ah,02h int 21hmov dx,10int 21hlea dx,mess2 mov ah,09hint 21hmov dx,13mov ah,02h int 21hmov dx,10mov ah,02h int 21hmov ax,bxmov cl,10div clmov bh,ahadd al,30h mov dl,almov ah,02h int 21hmov al,bhmov dl,almov ah,02h int 21hmov ax,4c00h int 21hmain endpcodeseg endsend start3、实验结果:【实验心得与体会】通过本次实验,首先我加深了对DOS功能调用的使用,对循环结构及分支程序进行了编写,有了更清晰的认识。
分支与循环程序设计实验-报告
实验名称 分支与循环程序设计实验指导教师 罗志祥专业班级 光电1406 姓名 段昳晖 学号 U2014***** 联系电话 137********一、任务要求1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。
264/2106410X X Y X X X X ⎧≥⎪=<<⎨⎪≤⎩ 当 当 当 2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s 延时子程序(延时误差小于10us ,晶振频率12MHz )。
二、设计思路1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。
264/2106410X X Y X X X X ⎧≥⎪=<<⎨⎪≤⎩ 当 当 当 将外部单元1000H 中的X ,通过分支判断,分别执行不同的语句,三条语句分别为标记为L1、L2、L3,先比较X 与64的大小关系,再判断X 与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE 指令后的进位位CY,进一步比较大小,分别跳转至对应语句。
将结果存于外部单元的1001H 以及1002H 。
2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s 延时子程序(延时误差小于10us ,晶振频率12MHz )。
主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。
利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60秒,外循环循环1次,外循环循环24次,清零。
单片机-实验二-分支程序设计实验
实验二实验报告·将00-99的十进制数据转换成二进制进行开关量的输入,L0灯亮将100的十进制转换为01100010的二进制开关量进行输入,L1灯亮将101-127的十进制转换为二进制进行开关量的输入,L2灯亮完整的接线图实验操作1、正确连接实验板子和电脑,将点源接入,数据线连接到电脑的USB接口,在电脑端运行软件,取消勾选模拟器,按照实验装置的名称正确的选择响应的系统。
2、在软件内部按照输入分支程序结构。
3、打开点源开关。
4、调整输入的各个断口的开关量,着重关注在二进制数01100010附近的变化.5、整理实验器材。
思考题1 写出分支程序设计的要点分支结构也成为选择结构。
在程序中每个分支均为一个程序段。
为分支需要,程序设计时不要忘记给程序段的起始地址赋予一个地址标号,以供选择分支使用。
这次实验使用的是一个多分支程序结构,可以通过一系列的JC\JNC\JB\JNB的判断,进行逐级分支。
并且可以使用CJNE进行实现。
80C51中没有专门的多分支转移指令,可以使用的变址转移指令“JMP @A+DPTR”,但是这样的指令需要数据表格配合。
思考题2 8051单片机有几个并行口,写出各并行口的特点8051单片机有4个并行I/O口,分别为P0\P1\P2\P3,以实现数据的并行输入与输出。
这4个并行口均是8为双向口线,各占8个引脚,在P3口线上有着引脚复用,均有第二功能信号,这些第二功能信号都是重要的控制信号,在实际使用中总是先按需要优先选用第二功能,剩下的不用的再当作口线使用。
并行可以有效的提高单片机的工作效率。
思考题3 实验中遇到的苦难在这个实验中和实验一显着不同的是我们需要重新认识硬件与软件的配合,一些数据线的链接,点源的通断都是我们学习的要点,我们也第一次接触到了输入口和输出口相互之间的区别。
这个实验我们一定要将十进制的思维转换过来转换为二进制的思维,在机器语言中只有开关量的通断,而这个题目也是很好的应用了开关量的通断完成了这个实验。
分支与循环程序设计
分支与循环程序设计完成截止日期:11月17日;上传截止日期:11月24日1.实验目的:掌握分支循环程序设计的方法,掌握, if-else,while, for语句的使用,掌握分支与循环语句的嵌套使用。
2.实验内容:设计一个猜数字游戏,游戏规则如下:1、游戏开始,电脑随机生成三个不重复的十以内的数字。
2、玩家输入他所猜测的三个数字3、将玩家提交的数与电脑生成的数进行比较,结果显示成"*A*B"。
A代表位置正确数字也正确,B代表数字正确但位置不正确,比如:"2A0B"表示您有2个数字的位置正确且数值也正确,除此以外,您还猜对了0个数字,但位置不对。
4、玩家共有7次机会,在7次内,如果结果为“3A0B”,游戏成功,退出游戏。
如果7次里玩家都没有猜对游戏失败。
3.难点提示:可以用while语句产生3个不一样的随机数4.标准输入输出:加粗加大的是输入部分第一种情况:请输入你猜测的数字:9 8 70A0B请输入你猜测的数字:1 2 30A1B请输入你猜测的数字:4 5 60A2B请输入你猜测的数字:1 5 60A1B请输入你猜测的数字:1 4 61A0B请输入你猜测的数字:5 4 21A1B请输入你猜测的数字:5 4 31A2B很遗憾,你没有在规定次数内猜对。
答案是345第二种情况:请输入你猜测的数字:2 4 80A1B请输入你猜测的数字:2 5 61A2B请输入你猜测的数字:6 5 2恭喜,你猜对了5.评分标准:程序能够正常运行,并实现基本功能(70分)产生的三个随机数是否不一样,而且每一次游戏所产生的随机数不同于其它游戏所产生的随机数(10分)程序的风格(是否简洁,清晰,无多余变量、表达式、语句、关键地方是否有注释)。
(20分)。
实验二 分支及循环程序设计_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次,清零。
其中对端口显示的秒数、分钟数、时间数, 进行二进制修正。
利用循环来设计延时程序,合理计算语句长度,以及循环次数。
汇编(循环、分支、子程序)实验报告
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,
分支与循环程序设计实验
一. 实验目的及实验环境实验目的:实验目的: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位二进制数所能表示的范围)。
实验二 分支及循环程序设计
实验二分支结构与循环结构程序设计
一、实验目的:
1.掌握分支结构和循环结构程序调试方法。
2.进一步巩固8086/8088的指令。
3.进一步掌握源程序中语法错误的检查方法。
4.进一步巩固DEBUG的使用方法。
二、实验内容:
1. 分支结构:将AX与CX中较大的一个无符号数放到BX中。
2. 循环结构:判断数据段中BUF开始的若干个字节数据是小于8、等于8还是大于8?
分别转向DAYU、DENGYU和XIAOYU三个分支分别进行处理,把小于、等于和大于的个数分别存入数据段JIEGUO开始的三个字节中。
三、实验步骤
1. 分别编写程序,并在DEBUG环境下用连续运行、单步运行等方式调试程序。
2. 观察实验结果是否正确,做好记录。
四、实验报告
1. 第二个实验要求画出程序流程图
2. 写出程序清单,加注释;记录执行结果。
实验二 分支程序实验和循环程序实验
实验二分支程序实验和循环程序实验【上篇】分支程序实验一、知识点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命令用测试数据修改寄存器或变量的值,然后运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机计算机原理实验报告
题目:分支及循环程序设计
姓名:浦蓉
院系:电子与信息工程学院
专业:电子信息工程(现代通信)学号: 201207014258 指导教师:魏祖雪
综合成绩:
2015年4月27日
一、实验目的
1、熟悉汇编语言的编辑、汇编、连接、运行的全过程。
2、了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE
命令包含文件的方法。
3、分支及循环程序设计
二、实验步骤
1、编辑程序:用记事本编辑输入建立一个扩展名为.asm源程序。
2、进入DOS环境,改变当前目录。
点击开始→运行,输入CMD回车,进入
DOS状态。
改变盘符:e:回车;E:\\ cd E:\wei\tasms;查看:dir aa.asm。
3、编辑:tasm/ zi aa.asm;查看:dir aa.*。
4、链接: tlink/ v aa.obj;
5、运行:>> aa.exe;td aa.exe;观察执行结果,验证其正确性。
二、实验内容
1、从键盘上输入一个十进制数(-32767<x<32767),若为正返回为正1,若为负返回为-1,若为0返回为0,并显示符号函数的结果。
程序为:
.model tiny
.code
.Startup
call read
mov ax,bx
call dpcrlf
cmp ax,0
jge a1
mov bx,-1
jmp exit1
A1: jg a2
mov bx,0
jmp exit1
A2: mov bx,1
Exit1: call write
.exit 0
INCLUDE out_B_D.ASM
INCLUDE in_D_B.ASM
End
图1 程序调试窗口
图2 运行程序,验证程序功能,输入12,输出
1
图3 运行程序,验证程序功能,输入-34,输出-1
2、编写多字节非组合BCD 码相加的程序。
程序如下: .model small .stack 256 .data num1 db 4,7,8,2,3 count equ $-num1 num2 db 3,5,6,1,4 sum db count dup (0) .code mov ax,@data mov ds,ax mov es,ax lea si,num1 lea bx,num2 lea di,sum add si,count-1
add bx,count-1 add di,count-1 mov cx,count std clc l1:lodsb adc al,[bx] aaa stosb dec bx loop l1 mov ax,4c00h int 21h end start
图4 程序编译链接过程
图5 程序调试窗口
图6 设置断点并跳转到段地址1442
图7 程序运行结果:47823+35614=83437
3、将上面2题改成非组合BCD 码相减,则程序如何修改? 程序修改为: model small .stack 256 .data num1 db 4,7,8,2,3 count equ $-num1 num2 db 3,5,6,1,4 sum db count dup (0) .code start:mov ax,@data mov ds,ax mov es,ax lea si,num1 lea bx,num2 lea di,sum add si,count-1
add bx,count-1 add di,count-1 mov cx,count std clc l1:lodsb sbb al,[bx] aas stosb dec bx loop l1 mov ax,4c00h int 21h
end start
图8 进入调试程序调试窗口
图9 跳转到段地址1442并设置断点
图10 程序运行结果:47823-35614=12209
4、将上面2题改成组合BCD 码相加或相减,则程序如何修改? 相加的程序: model small .stack 256 .data num1 db 04h,78h,23h count equ $-num1 num2 db 03h,56h,14h sum db count dup (0) .code start:mov ax,@data mov ds,ax mov es,ax lea si,num1 lea bx,num2 lea di,sum add si,count-1
add bx,count-1 add di,count-1 mov cx,count std clc l1:lodsb adc al,[bx] daa stosb dec bx loop l1 mov ax,4c00h int 21h end start
图11 设置断点并跳转到段地址
1448
图12 程序运行结果
相减的程序: model small .stack 256 .data num1 db 04h,78h,23h count equ $-num1 num2 db 03h,56h,14h sum db count dup (0) .code start:mov ax,@data mov ds,ax mov es,ax lea si,num1 lea bx,num2 lea di,sum add si,count-1 add bx,count-1 add di,count-1 mov cx,count std clc l1:lodsb sbb al,[bx] das stosb dec bx loop l1 mov ax,4c00h int 21h end start 5、 将上面2题改成二进制相加或相减,则程序如何修改? 二进制相加的程序: .model small .stack 256 .data num1 db 4,7,8,2,3 count equ $-num1 num2 db 3,5,6,1,4 sum db count dup (0) .code mov ax,@data
mov ds,ax
mov es,ax
lea si,num1
lea bx,num2
lea di,sum
add si,count-1
add bx,count-1
add di,count-1
mov cx,count
std
clc
l1:lodsb
adc al,[bx]
stosb
dec bx
loop l1
mov ax,4c00h
int 21h
end start
二进制相减的程序:
.model small
.stack 256
.data
num1 db 4,7,8,2,3 count equ $-num1 num2 db 3,5,6,1,4 sum db count dup (0) .code
mov ax,@data
mov ds,ax
mov es,ax
lea si,num1
lea bx,num2
lea di,sum
add si,count-1
add bx,count-1
add di,count-1
mov cx,count
std
clc
l1:lodsb
sbb al,[bx]
stosb
dec bx loop l1
mov ax,4c00h int 21h
end start。