微机实验子程序设计Word文档格式.docx
《微机实验子程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机实验子程序设计Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,SRC_MESS
LEADI,NEW_LOC
MOVCX,6
CLD;
DF置0
CMPSI,DI;
源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
JLNEXT1;
如果SI小于DI,则跳转到NEXT1(否则直接执行NEXT2)
NEXT2:
REPMOVSB
NEXT1:
ADDSI,CX;
SI=SI+CX-1从末地址开始传递数据
DECSI;
ADDDI,CX;
DI+=DI+CX-1
DECDI;
STD;
DF置1
JMPNEXT2;
CODEENDS
ENDSTART
结果显示:
将3500H开始的1,2,3,4,5,6复制到3510H开始的地址。
MOVAX,DATA
MOVDI,3502H
MOVAH,4CH
INT21H
将3500H开始的连续的1,2,3,4,5,6复制搬移到3502H开始的地址。
此时,搬移过程应当从数组的最后一个数字6开始搬移,一直到最前面的3500H对应的的数字01搬移到3502H地址为止。
ORG3502H
MOVDI,3500H
将3502H开始的1,2,3,4,5,6搬移到3500H开始的地址,应该从3502H地址开始传数据到3500H,依次往后搬移。
二、循环程序设计实验
(1)加深对循环结构的理解。
(2)掌握循环结构程序设计的方法。
(3)熟练掌握调试循环程序的方法。
TDS-MD微机一台
(1)编制程序使S=1+2*3+3*4+4*5+……N(N+1),直到N(N+1)项大于200为止。
流程图:
实现代码:
DATASEGMENT
ORG3500H
HELLODB32DUP(0)
DATAENDS
MOVDS,AX
MOVDX,1;
DX存储总和
MOVBL,2;
BL存储被乘项
NEXT:
MOVAL,BL;
AL存储被乘项
INCBL;
MULBL;
结果存储在AX
ADDDX,AX
CMPAX,200
JLNEXT
MOVBX,3500H
MOV[BX],DX
MOVBX,3510H
MOV[BX],AX
CODEENDS
ENDSTART
结果与分析:
运行结果为045FH,与实际相符,程序正确。
(2)求某个数据区内负数的个数
设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。
实现代码:
HELLODB6,3,-58,-34,7,-2,29;
6是数据的个数,共有6个数据
ORG3510H
NUM_TDB16DUP(0);
3510H单元存结果
CODESEGMENT
ASSUMECS:
MOVAX,DATA;
初始化数据段
MOVDI,3500H;
数据区的首地址给DI
MOVCL,[DI];
数据的个数给CL,作为NEXT1循环的个数
INCDI;
DI指向第一个需要比较的数据
MOVCH,0
MOVBL,0
MOVAL,[DI]
ANDAL,80H;
AL与1000(B)做按位与操作,如果是负数,AL存储的是1000(B),否则存储的是0
CMPAL,80H;
如果是负数,AL与80H相等
JENEXT2;
如果是负数,跳转到NEXT2
GOGO:
INCDI
LOOPNEXT1
MOVDI,3510H
MOV[DI],BL
MOVAX,4C00H;
返回DOS
INCBL
JMPGOGO
输入数据个数为6
输入3,-58,-34,7,-2,29得结果03,存放在3510H地址。
其中3500H地址对应的数字6是原始数据的个数。
结果与实际相符,程序正确。
输入3,-58,-34,7,-2,-29得结果04,存放在3510H地址。
实验四 子程序设计
一.实验目的
1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制和调试方法。
二.实验内容
程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:
按1键完成字符串小写字母变大写字母
用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)
1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
按3键完成排序(二选一)
1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
按4键显示时间
首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:
×
(时):
(分):
(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图
主程序的简略流程子程序一的简略流程图子程序二的简略流程图
子程序三的简略流程图子程序4,显示时间流程图
BUFDB100;
从3500H开始定义缓冲区
DB?
DB100DUP(0)
MYNAMEDB'
Programedbyali...'
0DH,0AH,'
$'
BUF1DB'
1.Inputastring,thenconvertthesmalllettertobigletter.'
BUF2DB'
2.FindthecharacterwhoseASCIIcodeisbiggest.'
BUF3DB'
3.SortthecharacterbyASCIIcodebydecreasingorder.'
BUF4DB'
4.Displaythetickingtime.'
BUF5DB'
5.Endtheprogram.'
STRING1DB'
Pleaseinputastring:
'
STRING2DB'
EnteranycharactertoplayagainorEsctoquit...'
STRING3DB0DH,0AH,'
DATA初始化
HELLO:
CALLCHILD0;
显示菜单
MOVAX,0100H;
从键盘输入一个数字的ASCII,AL存储输入的数字的ASCII
CMPAL,31H
JENEXT1
CMPAL,32H
JENEXT2
CMPAL,33H
JENEXT3
CMPAL,34H
JENEXT4
CMPAL,35H
JENEXT5
CALLCHILD1
JMPHELLO
CALLCHILD2
JMPHELLO
NEXT3:
CALLCHILD3
NEXT4:
CALLCHILD4
NEXT5:
CALLCHILD5
显示菜单子程序
CHILD0PROCNEAR
MOVDX,OFFSETMYNAME
MOVAH,9H;
显示
MOVDX,OFFSETBUF1
MOVDX,OFFSETBUF2
MOVDX,OFFSETBUF3
MOVDX,OFFSETBUF4
MOVDX,OFFSETBUF5
RET
CHILD0ENDP
CHILD1PROCNEAR
HELLO_1:
MOVDX,OFFSETSTRING1
MOVAH,9H
INT21H
LEADX,BUF
MOVAH,10
INT21H
MOVDX,OFFSETSTRING3;
换行
INT21H
MOVBX,3501H
MOVCL,[BX]
MOVBX,3502H
NEXT1_1:
MOVAL,[BX]
CMPAL,97
JLDADA
CMPAL,122
JGDADA
SUBAL,32;
是小写字符
DADA:
MOVDL,AL
MOVAH,02H
INCBX
LOOPNEXT1_1
MOVDX,OFFSETSTRING2
MOVAH,08H
CMPAL,27;
跟ESC的ASCII比较
JEBYBY
JMPHELLO_1
BYBY:
CHILD1ENDP
CHILD2PROCNEAR
MOVDX,OFFSETSTRING1
MOVDI,3501H
MOVCL,[DI]
DECCL;
循环次数
MOVCH,0
LOOP1:
MOVDX,CX
LOOP2:
MOVAL,[BX]
CMPAL,[BX+1]
JAENO_CHANGE
XCHGAL,[BX+1]
MOV[BX],AL
NO_CHANGE:
ADDBX,1
LOOPLOOP2
MOVCX,DX
LOOPLOOP1
MOVDX,OFFSETSTRING3
MOVDL,[DI]
CHILD2ENDP
CHILD3PROCNEAR
LOOP11:
LOOP22:
JAENO_CHANGE1
NO_CHANGE1:
LOOPLOOP22
LOOPLOOP11
MOVDX,OFFSETSTRING3
PETER:
MOVDL,[DI]
LOOPPETER
CHILD3ENDP
CHILD5PROCNEAR
MOVAX,4C00H
CHILD5ENDP
选择1号功能,输入字符串,将字符串转换成大写形式,并显示到屏幕上。
之后输入任意键,将重新提示输入字符串,实现1号功能,按Esc键,则回到功能菜单界面。
选择2号功能,提示输入字符串,输入之后,将ASCII值最大的字符输出到屏幕上,并回到功能菜单界面。
选择3号功能,输入字符串,利用冒泡排序,将字符串按ASCII值由大到小排序并输出到屏幕上。
之后回到功能菜单界面。
输入5,将推出程序,回到DOS。