欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    微机实验分支和循环程序设计实验.docx

    • 资源ID:13679893       资源大小:170.79KB        全文页数:20页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    微机实验分支和循环程序设计实验.docx

    1、微机实验分支和循环程序设计实验微机实验分支和循环程序设计实验微机实验三 分支和循环程序设计实验 一、分支程序设计实验 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 SEGMEN

    2、T PARA STACK STACK ;定义堆栈段 STAPN DB 100 DUP(?) ;定义100个字节空间 TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENT ;定义代码段 MAIN PROC FAR ;过程定义语句 ASSUME CS:CODE,DS:DATA,SS:STACK ;段寄存器分别与哪些段有关 START:MOV AX,STACK;设置堆栈寄存器 MOV SS,AX MOV SP,TOP PUSH DS ;DS入栈保护 SUB AX,AX ;AX=0 PUSH AX ;段内偏移量0入栈 MOV AX,DATA ;数据段基址赋给AX M

    3、OV DS,AX LEA AX,X ;取X的地址偏移量 LEA BX,Y ;取Y的地址偏移量 CMP AX,BX ;比较大小 JC FE ;如果AX小于BX,则执行FE JMP FS ;否则执行FS FS: MOV SI,0 ;从前往后复制 MOV DI,0 MOV CX,COUNT ;确定复制次数 CIRCLE1:MOV AL,XSI ;MOV不能实现两存储空间赋值,所以先把原始数据存入AL MOV YDI,AL ;将数据赋给Y INC SI ;SI指向下一个数据 INC DI ;DI指向下一个数据 LOOP CIRCLE1 ;循环赋值 JMP END1 ;循环结束退出 FE: MOV SI

    4、,COUNT ;从末尾开始赋值 MOV DI,COUNT DEC SI ;指向最后一个数据 DEC DI MOV CX,COUNT ;确定循环次数 CIRCLE2: MOV AL,XSI ;MOV不能实现两存储空间赋值,所以先把原始数据存入AL MOV YDI,AL ;将数据赋给Y DEC SI ;SI指向下一个数据 DEC DI ;DI指向下一个数据 LOOP CIRCLE2 ;循环赋值 JMP END1 ;循环结束退出 END1: RET ;返回dos MAIN ENDP ;MAIN过程结束 CODE ENDS ;代码段结束 END MAIN ;源代码结束 运行结果: 若从后往前传: 若从

    5、前往后传: 二、循环程序设计实验 1.实验目的 (1)加深对循环结构的理解。 (2)掌握循环结构程序设计的方法。 (3)熟练掌握调试循环程序的方法。 2.实验设备 TDS-MD微机一台 3.内容 (1)编制程序使S=1+2*3+3*4+4*5+N(N+1),直到N(N+1)项大于200为止。 代码: DATA SEGMENT ;定义数据段 ORG 3500H ;输入原数据存放地址 S DW 1 ;总和初值为1 X DB 2 ;需要加的数字 DATA ENDS ;数据段结束 STACK SEGMENT PARA STACK STACK ;定义堆栈段 STAPN DB 100 DUP(?) ;定义

    6、100个字节空间 TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENT ;定义代码段 MAIN PROC FAR ;过程定义语句 ASSUME CS:CODE,DS:DATA,SS:STACK ;段寄存器分别与哪些段有关 START:MOV AX,STACK;设置堆栈寄存器 MOV SS,AX MOV SP,TOP PUSH DS ;DS入栈保护 SUB AX,AX ;AX=0 PUSH AX ;段内偏移量0入栈 MOV AX,DATA ;数据段基址赋给AX MOV DS,AX MOV AX,0 ;AX清0 CIRCLE: MOV AL,X ;X的值赋给AL

    7、 INC X ;每循环一次X加一 MUL X ;X的值与AL的值相乘,结果保存在AX中 ADD S,AX ;把新的乘积加到总和里 CMP AX,200 ;加数是否大于200 JA END1 ;若大于则退出 JMP CIRCLE ;否则继续循环 END1: RET ;返回dos MAIN ENDP ;MAIN过程结束 CODE ENDS ;代码段结束 END MAIN ;源代码结束 运行结果: (2)求某个数据区内负数的个数 设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。 代码: DATA SEGMENT ;定义数据段 ORG 3500H ;已判断的数

    8、据量存放地址 NUM DB 0 ;已判断的数据量初值为0 X DB 12H,88H,82H,90H,22H,33H ;需要判断的数字 COUNT EQU $-X ;需要判断的数据个数 NG DB 0 ;负数的个数 DATA ENDS ;数据段结束 STACK SEGMENT PARA STACK STACK ;定义堆栈段 STAPN DB 100 DUP(?) ;定义100个字节空间 TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENT ;定义代码段 MAIN PROC FAR ;过程定义语句 ASSUME CS:CODE,DS:DATA,SS:STACK

    9、;段寄存器分别与哪些段有关 START:MOV AX,STACK;设置堆栈寄存器 MOV SS,AX MOV SP,TOP PUSH DS ;DS入栈保护 SUB AX,AX ;AX=0 PUSH AX ;段内偏移量0入栈 MOV AX,DATA ;数据段基址赋给AX MOV DS,AX MOV SI,0 ;用于指向下一个数据的指针 MOV CX,COUNT ;判断循环次数 CIRCLE: TEST XSI,80H ;相与,只留该数据的最高位 JZ POS ;若为正数,则跳过负数加一的指令 INC NG ;若为负数,NG加1 POS: INC SI ;指向下一个数 INC NUM ;已判断数个

    10、数加1 LOOP CIRCLE ;循环判断 END1: RET ;返回dos MAIN ENDP ;MAIN过程结束 CODE ENDS ;代码段结束 END MAIN ;源代码结束 运行结果:实验四 子程序设计 一. 实验目的 ,、学习子程序的定义和调用方法。 ,、掌握子程序、子程序嵌套的结构。 ,、掌握子程序的程序设计、编制及调试方法。 二. 实验内容 程序采用菜单式选择,可接收用户输入的命令(15),各命令如下: 按1键完成字符串小写字母变大写字母 用户输入一由英文大小写字母或数字09组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在

    11、屏幕上显示。用户按任一键,重做,按ESC键,返回主菜单。 按2键完成找最大值(二选一) ,、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。 ,、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。 按3键完成排序(二选一) ,、接收用户输入的可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示。 ,、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。 按4键显示时

    12、间 首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:(时):(分):(秒),最好定点显示。用户按任一键,重新对时,按ESC键,返回主菜单。 按5键,结束程序运行,返回系统提示符。 代码: DATA SEGMENT ;定义数据段 ORG 3500H BUFF DB 30 ;存放待用户输入的字符串 DB ? DB 30 DUP(?) MESS DB 31 DUP(?) ;存放输出的转换的字符串 MAX DB ? ;存放最大值 PRI DB LL EXP4,0DH,0AH DB PLEASE INPUT A NUMBER ;菜单界面屏幕显示

    13、的字幕 DB 0DH,0AH DB NUMBER ONE IS FOR TRANSFORMING LETTERS DB 0DH,0AH DB NUMBER TWO IS FOR FINDING THE MAXIMUM NUMBER DB 0DH,0AH DB NUMBER THREE IS FOR ORDERING DB 0DH,0AH DB NUMBER FOUR IS FOR QUIT,0DH,0AH,$ ERR DB INPUT ERROR,0DH,0AH,$ ;若用户输入不正确需要显示的字符 CHOOSE DB PRESS ANY BUTTON TO CONTINUE,PRESS ES

    14、C TO EXIT,$ ;每个子程序完成后按任意键继续 SHURU DB PLEASE INPUT A STRING,$;提示用户输入字符 FLAGG DB ? ;记录是按了esc还是其他 DATA ENDS ;数据段结束 STACK SEGMENT PARA STACK STACK ;定义堆栈段 STAPN DB 100 DUP(?) ;定义100个字节空间 TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENT ;定义代码段 MAIN PROC FAR ;过程定义语句 ASSUME CS:CODE,DS:DATA,SS:STACK;段寄存器分别与哪些段有关

    15、 START:MOV AX,STACK;设置堆栈寄存器 MOV SS,AX MOV SP,TOP PUSH DS ;DS入栈保护 SUB AX,AX ;AX=0 PUSH AX ;段内偏移量0入栈 MOV AX,DATA ;数据段基址赋给AX MOV DS,AX MENU: MOV AX,SEG PRI ;菜单界面,显示字符串,并等待用户输入一个字符 MOV DS,AX MOV DX,OFFSET PRI MOV AH,9 INT 21H INPUT: MOV AH,01H ;输入一个字符 INT 21H CMP AL,1 ;相应功能的跳转 JE F1 CMP AL,2 JE F2 CMP A

    16、L,3 JE F3 CMP AL,4 JE F4 JMP F5 F1: CALL PROC1 ;功能的跳转 F2: CALL PROC2 F3: CALL PROC3 F4: JMP PROC44 F5: CALL CRLF MOV AX,SEG ERR ;若输入不正确,显示字符串 MOV DS,AX MOV DX,OFFSET ERR MOV AH,9 INT 21H JMP INPUT PROC44: ;子程序4,退出 RET MAIN ENDP ;MAIN过程结束 PROC11: PROC1 PROC NEAR PUSH AX PUSH DX ;子程序1,保护现场 CALL CRLF ;

    17、显示后换行 MOV AX,SEG SHURU ;功能1界面,显示字符串,并等待用户输入一个字符 MOV DS,AX MOV DX,OFFSET SHURU MOV AH,9 INT 21H CALL CRLF ;显示后换行 MOV AX,SEG BUFF ;用户输入一个字符串,数据段基址赋给AX MOV DS,AX MOV DX,OFFSET BUFF ;指向buff MOV AH,0AH INT 21H PUSH AX PUSH DX CALL CRLF ;换行 POP DX POP AX MOV SI,2 ;指向用户输入的空间 MOV DI,0 ;存放数据的指针 MOV CH,0 MOV

    18、CL,BUFF1 ;计算比较次数 CIRCLE1: MOV AL,BUFFSI ; CMP AL,61H ;判断是否是大写 JB NOTT CMP AL,7AH ;判断是否是大写 JA NOTT SUB AL,20H ;若是,转为小写,否则不作为 NOTT:MOV MESSDI,AL ; INC SI ;指向下一个字符 INC DI LOOP CIRCLE1 MOV MESSDI,$ ;把需要输出的字符末尾加上$ MOV AX,SEG MESS ;设置需要输出字符首地址 MOV DS,AX MOV DX,OFFSET MESS MOV AH,09H ;输出 INT 21H CALL CRLF

    19、;换行 POP DX ;保护现场 POP AX PUSH AX PUSH DX CALL EXIT ;根据输入决定重做或退出 POP DX ;保护现场 POP AX CMP FLAGG,1 ;若输入不为esc,则重做 JE PROC11 JMP MENU ;否则退回菜单 RET PROC1 ENDP PROC22: PROC2 PROC NEAR PUSH AX PUSH DX ;子程序2,保护现场 CALL CRLF ;显示后换行 MOV AX,SEG SHURU ;功能1界面,显示字符串,并等待用户输入一个字符 MOV DS,AX MOV DX,OFFSET SHURU MOV AH,9

    20、INT 21H CALL CRLF ;显示后换行 MOV AX,SEG BUFF ;用户输入一个字符串,数据段基址赋给AX MOV DS,AX MOV DX,OFFSET BUFF MOV AH,0AH INT 21H PUSH AX PUSH DX CALL CRLF ;换行 POP DX POP AX MOV AH,0 MOV AL,BUFF1 ;把需要比较的次数赋给cx MOV CX,AX LEA BX,BUFF2 ;第一个数地址赋给bx MOV AX,BX AGAIN:CMP AL,BX ;Al的值与bx偏移量的值进行比较 JAE NEXT ;若ax的值大,则不作为 MOV AL,BX

    21、 ;否则把大的值赋给ax NEXT: INC BX ;指向下一个数据 LOOP AGAIN MOV MAX,AL ;max中存放最大值 MOV DL,MAX MOV AH,02H INT 21H ;输出最大值 POP DX ;保护现场 POP AX CALL CRLF PUSH AX PUSH DX ;保护现场 CALL EXIT POP DX POP AX CMP FLAGG,1 ;若输入不为esc,则重做 JE PROC22 JMP MENU ;否则退回菜单 RET PROC2 ENDP PROC33: PROC3 PROC NEAR PUSH AX ;子程序3,保护现场 PUSH DX

    22、CALL CRLF ;显示后换行 MOV AX,SEG SHURU ;功能1界面,显示字符串,并等待用户输入一个字符 MOV DS,AX MOV DX,OFFSET SHURU MOV AH,9 INT 21H CALL CRLF ;显示后换行 MOV AX,SEG BUFF ;用户输入一个字符串,数据段基址赋给AX MOV DS,AX MOV DX,OFFSET BUFF MOV AH,0AH INT 21H PUSH AX PUSH DX CALL CRLF ;换行 POP DX POP AX MOV AH,0 MOV AL,BUFF1 ;把需要循环次数赋给cx DEC AX MOV CX

    23、,AX MOV SI,3 ;用于计算循环次数 LOOP1:MOV DX,CX ;用于计算循环次数 MOV BX,2 INC SI LOOP2:MOV AL,BUFFBX ;将相邻数据进行比较 CMP AL,BUFFBX+1 JAE NOCHANGE ;若排序正确,无作为 XCHG AL,BUFFBX+1 ;否则交换 MOV BUFFBX,AL NOCHANGE:ADD BX,1 LOOP LOOP2 MOV CX,DX LOOP LOOP1 ;大循环 MOV BUFFSI,$ ;用于输出 MOV AX,SEG BUFF ;输出排序后结果 MOV DS,AX MOV DX,OFFSET BUFF

    24、2 MOV AH,9 INT 21H POP DX POP AX CALL CRLF PUSH AX PUSH DX ;保护现场 CALL EXIT POP DX POP AX CMP FLAGG,1 ;若输入不为esc,则重做 JE PROC33 JMP MENU ;否则退回菜单 RET PROC3 ENDP CRLF PROC NEAR ;换行子程序 MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H RET CRLF ENDP EXIT PROC NEAR ;任意键继续,esc退出子程序 MOV AX,SEG CHOOS

    25、E ;显示任意键继续 MOV DS,AX MOV DX,OFFSET CHOOSE MOV AH,09H INT 21H CALL CRLF ;显示后换行 MOV AH,01H ;待用户输入任意键 INT 21H CMP AL,1BH JE EXIT1 MOV FLAGG,1 ;继续,FLAGG为1 JMP EXIT2 EXIT1: MOV FLAGG,0 ;退出,FLAGG为0 EXIT2: RET EXIT ENDP CODE ENDS ;代码段结束 END MAIN 运行结果: 菜单界面: 若输入8,则报输入错误 功能一:输入小写字母,转换为大写字母,其他不变 功能结束,按任意键重做,按esc退出 若输入t,则重做: 若输入esc,则返回菜单: 功能二:找出ascii码最大的字符输出 功能三:按ascii码的大小排序后输出 功能四:若输入4,则退出


    注意事项

    本文(微机实验分支和循环程序设计实验.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开