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

上传人:b****6 文档编号:13679893 上传时间:2023-06-16 格式:DOCX 页数:20 大小:170.79KB
下载 相关 举报
微机实验分支和循环程序设计实验.docx_第1页
第1页 / 共20页
微机实验分支和循环程序设计实验.docx_第2页
第2页 / 共20页
微机实验分支和循环程序设计实验.docx_第3页
第3页 / 共20页
微机实验分支和循环程序设计实验.docx_第4页
第4页 / 共20页
微机实验分支和循环程序设计实验.docx_第5页
第5页 / 共20页
微机实验分支和循环程序设计实验.docx_第6页
第6页 / 共20页
微机实验分支和循环程序设计实验.docx_第7页
第7页 / 共20页
微机实验分支和循环程序设计实验.docx_第8页
第8页 / 共20页
微机实验分支和循环程序设计实验.docx_第9页
第9页 / 共20页
微机实验分支和循环程序设计实验.docx_第10页
第10页 / 共20页
微机实验分支和循环程序设计实验.docx_第11页
第11页 / 共20页
微机实验分支和循环程序设计实验.docx_第12页
第12页 / 共20页
微机实验分支和循环程序设计实验.docx_第13页
第13页 / 共20页
微机实验分支和循环程序设计实验.docx_第14页
第14页 / 共20页
微机实验分支和循环程序设计实验.docx_第15页
第15页 / 共20页
微机实验分支和循环程序设计实验.docx_第16页
第16页 / 共20页
微机实验分支和循环程序设计实验.docx_第17页
第17页 / 共20页
微机实验分支和循环程序设计实验.docx_第18页
第18页 / 共20页
微机实验分支和循环程序设计实验.docx_第19页
第19页 / 共20页
微机实验分支和循环程序设计实验.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《微机实验分支和循环程序设计实验.docx》由会员分享,可在线阅读,更多相关《微机实验分支和循环程序设计实验.docx(20页珍藏版)》请在冰点文库上搜索。

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

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

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

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

一、分支程序设计实验

1.实验目的

1.掌握分支程序的结构。

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

2.实验设备

微机一台

3.内容

设计一数据块间的搬移程序

代码:

DATASEGMENT;定义数据段

ORG2520H;输入原数据存放地址XDB1,2,3,4,5,6,7;1234567的赋值COUNTEQU$-X;计算数据串长度ORG2525H;输入目的数据存放地址YDB7DUP(0);定义目的数据长度DATAENDS;数据段结束

STACKSEGMENTPARASTACK'STACK';定义堆栈段STAPNDB100DUP(?

);定义100个字节空间TOPEQULENGTHSTAPNSTACKENDS

CODESEGMENT;定义代码段

MAINPROCFAR;过程定义语句

ASSUMECS:

CODE,DS:

DATA,SS:

STACK;段寄存器分别与哪些段有关

START:

MOVAX,STACK;设置堆栈寄存器

MOVSS,AX

MOVSP,TOP

PUSHDS;DS入栈保护

SUBAX,AX;AX=0

PUSHAX;段内偏移量0入栈

MOVAX,DATA;数据段基址赋给AX

MOVDS,AX

LEAAX,X;取X的地址偏移量

LEABX,Y;取Y的地址偏移量

CMPAX,BX;比较大小

JCFE;如果AX小于BX,则执行FE

JMPFS;否则执行FS

FS:

MOVSI,0;从前往后复制

MOVDI,0

MOVCX,COUNT;确定复制次数

CIRCLE1:

MOVAL,X[SI];MOV不能实现两存储空间赋值,所以先把原始数据存入AL

MOVY[DI],AL;将数据赋给Y

INCSI;SI指向下一个数据

INCDI;DI指向下一个数据

LOOPCIRCLE1;循环赋值

JMPEND1;循环结束退出FE:

MOVSI,COUNT;从末尾开始赋值

MOVDI,COUNT

DECSI;指向最后一个数据

DECDI

MOVCX,COUNT;确定循环次数

CIRCLE2:

MOVAL,X[SI];MOV不能实现两存储空间赋值,所以先把原始数据存入AL

MOVY[DI],AL;将数据赋给Y

DECSI;SI指向下一个数据

DECDI;DI指向下一个数据

LOOPCIRCLE2;循环赋值

JMPEND1;循环结束退出

END1:

RET;返回dosMAINENDP;MAIN过程结束

CODEENDS;代码段结束

ENDMAIN;源代码结束

运行结果:

若从后往前传:

若从前往后传:

二、循环程序设计实验

1.实验目的

(1)加深对循环结构的理解。

(2)掌握循环结构程序设计的方法。

(3)熟练掌握调试循环程序的方法。

2.实验设备

TDS-MD微机一台

3.内容

(1)编制程序使S=1+2*3+3*4+4*5+……N(N+1),直到N(N+1)项大于200为止。

代码:

DATASEGMENT;定义数据段ORG3500H;输入原数据存放地址SDW1;总和初值为1

XDB2;需要加的数字

DATAENDS;数据段结束

STACKSEGMENTPARASTACK'STACK';定义堆栈段STAPNDB100DUP(?

);定义100个字节空间TOPEQULENGTHSTAPNSTACKENDS

CODESEGMENT;定义代码段

MAINPROCFAR;过程定义语句

ASSUMECS:

CODE,DS:

DATA,SS:

STACK;段寄存器分别与哪些段有关

START:

MOVAX,STACK;设置堆栈寄存器

MOVSS,AX

MOVSP,TOP

PUSHDS;DS入栈保护

SUBAX,AX;AX=0

PUSHAX;段内偏移量0入栈

MOVAX,DATA;数据段基址赋给AX

MOVDS,AX

MOVAX,0;AX清0

CIRCLE:

MOVAL,X;X的值赋给AL

INCX;每循环一次X加一

MULX;X的值与AL的值相乘,结果保存在AX中

ADDS,AX;把新的乘积加到总和里

CMPAX,200;加数是否大于200

JAEND1;若大于则退出

JMPCIRCLE;否则继续循环

END1:

RET;返回dos

MAINENDP;MAIN过程结束CODEENDS;代码段结束

ENDMAIN;源代码结束

运行结果:

(2)求某个数据区内负数的个数

设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个

单元存放结果。

代码:

DATASEGMENT;定义数据段

ORG3500H;已判断的数据量存放地址NUMDB0;已判断的数据量初值为0

XDB12H,88H,82H,90H,22H,33H;需要判断的数字COUNTEQU$-X;需要判断的数据个数

NGDB0;负数的个数

DATAENDS;数据段结束

STACKSEGMENTPARASTACK'STACK';定义堆栈段STAPNDB100DUP(?

);定义100个字节空间TOPEQULENGTHSTAPNSTACKENDS

CODESEGMENT;定义代码段

MAINPROCFAR;过程定义语句

ASSUMECS:

CODE,DS:

DATA,SS:

STACK;段寄存器分别与哪些段有关

START:

MOVAX,STACK;设置堆栈寄存器

MOVSS,AX

MOVSP,TOP

PUSHDS;DS入栈保护

SUBAX,AX;AX=0

PUSHAX;段内偏移量0入栈

MOVAX,DATA;数据段基址赋给AX

MOVDS,AX

MOVSI,0;用于指向下一个数据的指针

MOVCX,COUNT;判断循环次数

CIRCLE:

TESTX[SI],80H;相与,只留该数据的最高位

JZPOS;若为正数,则跳过负数加一的指令

INCNG;若为负数,NG加1POS:

INCSI;指向下一个数

INCNUM;已判断数个数加1

LOOPCIRCLE;循环判断

END1:

RET;返回dos

MAINENDP;MAIN过程结束

CODEENDS;代码段结束

ENDMAIN;源代码结束

运行结果:

实验四子程序设计

一.实验目的

、学习子程序的定义和调用方法。

、掌握子程序、子程序嵌套的结构。

、掌握子程序的程序设计、编制及调试方法。

二.实验内容

程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:

按1键完成字符串小写字母变大写字母

用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。

用户按任一键,重做,按ESC键,返回主菜单。

按2键完成找最大值(二选一)

、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。

、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

按3键完成排序(二选一)

、接收用户输入的可显示字符串,以回车结束。

程序按ASCII码值大小由大到小排序并输出显示。

、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。

程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

按4键显示时间

首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:

××(时):

××(分):

××(秒),最好定点显示。

用户按任一键,重新对时,按ESC键,返回主菜单。

按5键,结束程序运行,返回系统提示符。

代码:

DATASEGMENT;定义数据段

ORG3500H

BUFFDB30;存放待用户输入的字符串

DB?

DB30DUP(?

MESSDB31DUP(?

);存放输出的转换的字符串

MAXDB?

;存放最大值

PRIDB'LLEXP4',0DH,0AH

DB'PLEASEINPUTANUMBER';菜单界面屏幕显示的字幕

DB0DH,0AH

DB'NUMBERONEISFORTRANSFORMINGLETTERS'

DB0DH,0AH

DB'NUMBERTWOISFORFINDINGTHEMAXIMUMNUMBER'

DB0DH,0AH

DB'NUMBERTHREEISFORORDERING'

DB0DH,0AH

DB'NUMBERFOURISFORQUIT',0DH,0AH,'$'ERRDB'INPUTERROR',0DH,0AH,'$';若用户输入不正确需要显示的字符

CHOOSEDB'PRESSANYBUTTONTOCONTINUE,PRESSESCTOEXIT','$';每个子程序完成后按任意键继续

SHURUDB'PLEASEINPUTASTRING','$';提示用户输入字符

FLAGGDB?

;记录是按了esc还是其他DATAENDS;数据段结束

STACKSEGMENTPARASTACK'STACK';定义堆栈段

STAPNDB100DUP(?

);定义100个字节空间

TOPEQULENGTHSTAPN

STACKENDS

CODESEGMENT;定义代码段

MAINPROCFAR;过程定义语句

ASSUMECS:

CODE,DS:

DATA,SS:

STACK;段寄存器分别与哪些段有关START:

MOVAX,STACK;设置堆栈寄存器

MOVSS,AX

MOVSP,TOP

PUSHDS;DS入栈保护

SUBAX,AX;AX=0

PUSHAX;段内偏移量0入栈

MOVAX,DATA;数据段基址赋给AX

MOVDS,AXMENU:

MOVAX,SEGPRI;菜单界面,显示字符串,并等待用户输入一个字符

MOVDS,AX

MOVDX,OFFSETPRI

MOVAH,9

INT21HINPUT:

MOVAH,01H;输入一个字符INT21H

CMPAL,'1';相应功能的跳转JEF1

CMPAL,'2'

JEF2

CMPAL,'3'

JEF3

CMPAL,'4'

JEF4

JMPF5

F1:

CALLPROC1;功能的跳转F2:

CALLPROC2

F3:

CALLPROC3

F4:

JMPPROC44

F5:

CALLCRLF

MOVAX,SEGERR;若输入不正确,显示字符串MOVDS,AX

MOVDX,OFFSETERRMOVAH,9

INT21H

JMPINPUT

PROC44:

;子程序4,退出

RET

MAINENDP;MAIN过程结束PROC11:

PROC1PROCNEAR

PUSHAX

PUSHDX;子程序1,保护现场

CALLCRLF;显示后换行

MOVAX,SEGSHURU;功能1界面,显示字符串,并等待用户输入一个字符

MOVDS,AX

MOVDX,OFFSETSHURU

MOVAH,9

INT21H

CALLCRLF;显示后换行

MOVAX,SEGBUFF;用户输入一个字符串,数据段基址赋给AX

MOVDS,AX

MOVDX,OFFSETBUFF;指向buff

MOVAH,0AH

INT21H

PUSHAX

PUSHDX

CALLCRLF;换行

POPDX

POPAX

MOVSI,2;指向用户输入的空间MOVDI,0;存放数据的指针MOVCH,0

MOVCL,BUFF[1];计算比较次数

CIRCLE1:

MOVAL,BUFF[SI];

CMPAL,61H;判断是否是大写

JBNOTT

CMPAL,7AH;判断是否是大写

JANOTT

SUBAL,20H;若是,转为小写,否则不作为

NOTT:

MOVMESS[DI],AL;

INCSI;指向下一个字符INCDI

LOOPCIRCLE1

MOVMESS[DI],'$';把需要输出的字符末尾加上$MOVAX,SEGMESS;设置需要输出字符首地址MOVDS,AX

MOVDX,OFFSETMESS

MOVAH,09H;输出

INT21H

CALLCRLF;换行

POPDX;保护现场

POPAX

PUSHAX

PUSHDX

CALLEXIT;根据输入决定重做或退出

POPDX;保护现场

POPAX

CMPFLAGG,1;若输入不为esc,则重做

JEPROC11

JMPMENU;否则退回菜单

RET

PROC1ENDP

PROC22:

PROC2PROCNEAR

PUSHAX

PUSHDX;子程序2,保护现场

CALLCRLF;显示后换行

MOVAX,SEGSHURU;功能1界面,显示字符串,并等待用户输入一个字符

MOVDS,AX

MOVDX,OFFSETSHURU

MOVAH,9

INT21H

CALLCRLF;显示后换行

MOVAX,SEGBUFF;用户输入一个字符串,数据段基址赋给AX

MOVDS,AX

MOVDX,OFFSETBUFF

MOVAH,0AH

INT21H

PUSHAX

PUSHDX

CALLCRLF;换行

POPDX

POPAX

MOVAH,0

MOVAL,BUFF[1];把需要比较的次数赋给cx

MOVCX,AX

LEABX,BUFF[2];第一个数地址赋给bx

MOVAX,[BX]

AGAIN:

CMPAL,[BX];Al的值与bx偏移量的值进行比较

JAENEXT;若ax的值大,则不作为

MOVAL,[BX];否则把大的值赋给axNEXT:

INCBX;指向下一个数据

LOOPAGAIN

MOVMAX,AL;max中存放最大值

MOVDL,MAX

MOVAH,02H

INT21H;输出最大值

POPDX;保护现场

POPAX

CALLCRLF

PUSHAX

PUSHDX;保护现场

CALLEXIT

POPDX

POPAX

CMPFLAGG,1;若输入不为esc,则重做

JEPROC22

JMPMENU;否则退回菜单

RET

PROC2ENDP

PROC33:

PROC3PROCNEAR

PUSHAX;子程序3,保护现场

PUSHDX

CALLCRLF;显示后换行

MOVAX,SEGSHURU;功能1界面,显示字符串,并等待用户输入一个字

MOVDS,AX

MOVDX,OFFSETSHURU

MOVAH,9

INT21H

CALLCRLF;显示后换行

MOVAX,SEGBUFF;用户输入一个字符串,数据段基址赋给AX

MOVDS,AX

MOVDX,OFFSETBUFF

MOVAH,0AH

INT21H

PUSHAX

PUSHDX

CALLCRLF;换行

POPDX

POPAX

MOVAH,0

MOVAL,BUFF[1];把需要循环次数赋给cx

DECAX

MOVCX,AX

MOVSI,3;用于计算循环次数LOOP1:

MOVDX,CX;用于计算循环次数

MOVBX,2

INCSI

LOOP2:

MOVAL,BUFF[BX];将相邻数据进行比较

CMPAL,BUFF[BX+1]

JAENOCHANGE;若排序正确,无作为

XCHGAL,BUFF[BX+1];否则交换

MOVBUFF[BX],AL

NOCHANGE:

ADDBX,1

LOOPLOOP2

MOVCX,DX

LOOPLOOP1;大循环

MOVBUFF[SI],'$';用于输出

MOVAX,SEGBUFF;输出排序后结果

MOVDS,AX

MOVDX,OFFSETBUFF[2]

MOVAH,9

INT21H

POPDX

POPAX

CALLCRLF

PUSHAX

PUSHDX;保护现场

CALLEXIT

POPDX

POPAX

CMPFLAGG,1;若输入不为esc,则重做

JEPROC33

JMPMENU;否则退回菜单RET

PROC3ENDP

CRLFPROCNEAR;换行子程序

MOVDL,0DH

MOVAH,02H

INT21H

MOVDL,0AH

MOVAH,02H

INT21H

RET

CRLFENDP

EXITPROCNEAR;任意键继续,esc退出子程序

MOVAX,SEGCHOOSE;显示任意键继续

MOVDS,AX

MOVDX,OFFSETCHOOSE

MOVAH,09H

INT21H

CALLCRLF;显示后换行

MOVAH,01H;待用户输入任意键

INT21H

CMPAL,1BH

JEEXIT1

MOVFLAGG,1;继续,FLAGG为1

JMPEXIT2EXIT1:

MOVFLAGG,0;退出,FLAGG为0EXIT2:

RET

EXITENDP

CODEENDS;代码段结束ENDMAIN

运行结果:

菜单界面:

若输入’8’,则报输入错误

功能一:

输入小写字母,转换为大写字母,其他不变

功能结束,按任意键重做,按esc退出

若输入‘t’,则重做:

若输入esc,则返回菜单:

功能二:

找出ascii码最大的字符输出

功能三:

按ascii码的大小排序后输出

功能四:

若输入4,则退出

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

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

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