北邮微原软件实验报告Word文档格式.docx
- 文档编号:19002086
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:21
- 大小:202.82KB
北邮微原软件实验报告Word文档格式.docx
《北邮微原软件实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《北邮微原软件实验报告Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVCX,COUNT
SHRCX,1;
相当于除2,为BUFF中数据的个数
MOVDX,0;
设定初值;
DH,DL分别为等于零,大于零的个数
MOVAH,0;
AH为小于零的个数
LEABX,BUFF
AGAIN:
CMPWORDPTR[BX],0
JGEPLU;
大于等于零时转到PLU
INCAH;
统计小于零的个数
JMPNEXT
PLU:
JZZER;
等于零时转ZER
INCDL;
统计大于零的个数
ZER:
INCDH;
NEXT:
INCBX;
修改地址指针
INCBX
LOOPAGAIN
MOVMINUS,AH;
保存结果
ADDMINUS,30H
MOVPLUS,DL
ADDPLUS,30H
MOVZERO,DH
ADDZERO,30H
MOVAH,09H
MOVDX,SEGSTRING1
MOVDS,DX
MOVDX,OFFSETSTRING1
INT21H
MOVDX,SEGSTRING3
MOVDX,OFFSETSTRING3
MOVDX,SEGSTRING5
MOVDX,OFFSETSTRING5
MOVAX,4C00H
INT21H
CODEENDS
ENDBEGIN
四.程序运行结果
五.选作题:
统计出正奇数,正偶数,负奇数,负偶数以及零的个数.
六.选做题的源代码
DISPLAYMACROY;
显示字符串
MOVAH,09H
MOVDX,SEGSTRING&
Y
MOVDX,OFFSETSTRING&
ENDM
BUFFDW-624,0,34,89,-45,0,-45,324,0,12,-99,-65,33,1,37,0,-
88,35,-7,0,11
COUNTEQU$-BUFF;
STRINGADB'
Thenumberofpositiveoddnumberis'
PODDDB?
;
正奇数的个数
STRING1DB0DH,0AH,'
STRINGBDB'
Thenumberofnegativeoddnumberis'
NODDDB?
负奇数的个数
STRINGCDB'
零的个数
STRING3DB0DH,0AH,'
STRINGDDB'
Thenumberofpositiveevennumberis'
PEVENDB?
正偶数的个数
STRINGEDB'
Thenumberofnegativeevennumberis'
NEVENDB?
负偶数的个数
STRING5DB0DH,0AH,'
SHRCX,1;
相当于除2,为BUFF中的数据个数
LEAAX,BUFF
MOVSI,AX
MOVDX,0;
设定初值:
DL,DH,AL,AH,BH中分别为正偶数,正奇数,负偶数,负奇数,零的个数
MOVAX,0
MOVBX,0
CMPWORDPTR[SI],0
JGEPLU;
大于等于零转到PLU
JMPMINUS;
否则转到MINUS
JZZER;
等于零转到JZ
TESTWORDPTR[SI],01H
JNZPO;
最低位为1转到PO
INCDL;
统计正偶数的个数
MINUS:
JNZNO;
最低位为1转到NO
INCAL;
统计负偶数的个数
PO:
INCDH;
统计正奇数的个数
NO:
INCAH;
统计负奇数的个数
INCBH;
统计零的个数
INCSI;
INCSI
MOVZERO,BH;
结果的储存与显示
MOVPEVEN,DL
ADDPEVEN,30H
MOVPODD,DH
ADDPODD,30H
MOVNEVEN,AL
ADDNEVEN,30H
MOVNODD,AH
ADDNODD,30H
DISPLAYA
DISPLAYB
DISPLAYC
DISPLAYD
DISPLAYE
INT21
七.选做题的运行结果
实验三代码转换程序设计
1.掌握几种最基本的代码转换方法;
2.运用子程序进行程序设计.
1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.
2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.
3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.
4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.
三.流程图
四.源代码
MINDB'
9'
'
STRING0DB0DH,0AH,'
PLEASEINPUTSOMEINTEGER(2NUMBERS)WITHSPACEANDSTOPWITHENTER:
'
0DH,0AH,'
ERROR!
PLEASEINPUTAGAIN:
0DH,0AH,'
MINIS:
0DH,0AH,'
DB100DUP(?
)
;
***********输入子函数***********
INPUTPROCNEAR;
键盘输入的子程序,AL=输入码
MOVAH,01H;
键盘输入的功能码
RET;
回到DOS
INPUTENDP
***********检查子函数***********
TESTEPROCNEAR;
检查输入字符是否符合要求
CMPAL,'
0'
JBERROR
JAERROR;
若输入字符的ASCII码不在0-9范围内判为输入错误
JMPEXIT;
否则转EXIT
ERROR:
MOVAL,0H
ERROR1:
MOVDX,OFFSETSTRING1;
输出错误提示
JMPCYCLE;
回到主循环
EXIT:
RET
TESTEENDP;
退出检测
**********比较子函数**********
COMPPROCNEAR
CMPBX,WORDPTRMIN;
比较BX的内容和MIN指向的数据段内存的数据
JBCHANGE;
如果BX小于现有的最小值,转CHANGE
否则回到主循环
CHANGE:
MOVWORDPTRMIN,BX
JMPCYCLE
RET
COMPENDP
**********显示子函数**********
SHOWPPROCNEAR
CMPBX,WORDPTRMIN
JBUPDATE
DISPLAY:
MOVDX,OFFSETSTRING2
MOVDL,MIN+1
MOVAH,02H
MOVDL,MIN
MOVDL,0DH
MOVDL,0AH
MOVAH,4CH;
返回DOS
UPDATE:
MOVWORDPTRMIN,BX
JMPDISPLAY
SHOWPENDP
************主程序开始**********
MAIN:
MOVAX,DATA
MOVDS,AX;
给当前的数据段基地址赋值
MOVDX,OFFSETSTRING0;
将STRING0的偏移地址赋值给DX
MOVAH,09H;
字符串打印输出
INT21H
CYCLE:
循环
CALLINPUT;
调用键盘输入的子程序输入十位
CALLTESTE;
调用检测的子程序
CMPAL,00H
JZERROR1
MOVBH,AL;
将十位存入BH,待后面比较大小
调用键盘输入的子程序输入个位
MOVBL,AL;
将个位存入BL,待后面比较大小
CALLINPUT
CMPAL,0DH;
判断此时是否输入了ENTER键结束
JZSHOW;
是则转SHOW
CMPAL,'
'
判断是否输入空格键分割两个数
JZCOMPARE;
是则转COMPARE比较更新最小数
JMPERROR1;
都不是则是输入错误
COMPARE:
CALLCOMP
SHOW:
CALLSHOWP
ENDMAIN
五.运行结果
实验四子程序设计
1.进一步掌握子程序设计方法;
2.进一步掌握基本的DOS功能调用.
二.实验内容:
1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入.
2.统计检查每个学生的名次.
4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽可能考虑美观
5.输入要有检错手段.
BUFF0DW10DUP(0000H);
存放成绩(一个字节存放一位十进制数的ASCII码值)
BUFF1DB10DUP(31H,32H,33H,34H,35H,36H,37H,38H,39H,40H);
存放序号
BUFF2DB10DUP(31H,32H,33H,34H,35H,36H,37H,38H,39H,40H);
存放排名
COUNT1DB0;
BUFF中存放的字节数/内层冒泡需比较的次数
COUNT2DB0;
BUFF中存放的成绩个数
PLEASEINPUTTHESCORES:
输入成绩提示
输入错误提示
RANK:
排名输出
NUMBER:
序号输出
SCORES:
成绩输出
CODESEGMENT
**********输入子函数*********
INPUTPROC
MOVAH,01H
INT21H;
AL=输入字符
**********输入检错子函数*********
TEST1PROC
输入字符不是0到9之间的数转ERROR
JMPEXIT
MOVAL,00H
TEST1ENDP
**********存储子函数**********
SAVE1PROC;
十位存在高地址
MOVSI,OFFSETBUFF0;
将成绩变量的偏移量首地址赋给SI
MOVCX,0000H
MOVCL,COUNT1;
做SI的偏移量
ADDSI,CX
INCSI;
先存储十位,十位存在高地址
MOV[SI],AL;
将AL中的输入数据存在地址为SI的内存中
INCCOUNT1;
成绩变量的字节数加一
SAVE1ENDP
SAVE2PROC;
再存储个位,个位存入低地址
MOVSI,OFFSETBUFF0
MOVCL,COUNT1
DECSI;
个位存在低地址
MOV[SI],AL
SAVE2ENDP
***********两两比较并排序子函数**********
COMPAREPROC;
两两比较,并将大数存在低地址
CMPAX,BX;
AX是低地址的,BX是高地址的
JBEXCHANGE
JMPEXIT0
EXCHANGE:
交换成绩
MOVCX,0
ADDSI,DX;
DX是当前偏移的字节个数
MOV[SI],BX
ADDSI,2
MOV[SI],AX
交换序号
MOVSI,OFFSETBUFF1
SHRDX,1;
BUFF1是BYTE
ADDSI,DX
MOVAH,[SI];
序号交换
MOVBH,[SI]
MOV[SI],AH
DECSI
MOV[SI],BH
EXIT0:
COMPAREENDP
***********主程序入口**********
START:
MOVDX,OFFSETSTRING0
MOVAX,0000H
CALLINPUT
CALLTEST1
CMPAL,00H
JZWRONG0
CALLSAVE1;
保存十位数
CALLINPUT
CALLSAVE2;
保存个位数
CMPAL,0DH
JZLIST;
输入回车,转LIST,排序
JZCYCLE;
输入空格,继续处理下一个数
JMPWRONG0;
其他情况转WRONG0
WRONG0:
MOVDX,OFFSETSTRING1
MOVCL,0;
出现错误,计数复位
MOVCOUNT1,CL
LIST:
SHRCL,1
MOVCOUNT2,CL;
COUNT2中是待排序的数的个数
DECCL
MOVCOUNT1,CL;
COUNT1中是每次外循环内循环需比较的次数及外循环的总次数
JZSHOW0
**************冒泡排序**************
ORDER0:
MOVCL,0;
内层循环计数器清零
ORDER1:
MOVSI,OFFSETBUFF0;
内循环
MOVDH,0
MOVDL,CL;
CL是内层循环计数器
SHLDL,1
MOVAX,[SI];
将此时BUFF中地址次低的数取出来放入AX中待比较
MOVBX,[SI];
将此时BUFF中地址最低的数取出来放入BX中待比较
CALLCOMPARE;
比较AX和BX,结果是将较大的数放入低地址存储
INCCL;
内循环计数器CL加一
CMPCL,COUNT1
JEORDER2;
当循环次数够了时需要进入外循环
JMPORDER1
ORDER2:
MOVCL,COUNT1;
外循环
每执行完一次内循环内循环的循环次数COUNT1减一
JNZORDER0;
只要计算得到的内循环次数不为零则开始下次内循环
JMPSHOW0
**************打印名次************
SHOW0:
MOVDX,OFFSETSTRING2
MOVSI,OFFSETBUFF2
MOVCL,COUNT2
SHOW00:
MOVDL,[SI]
MOVDL,'
JNZSHOW00
**************打印序号************
SHOW1:
MOVDX,OFFSETSTRING3
SHOW10:
JNZSHOW10
**************打印成绩***************
SHOW2:
MOVDX,OFFSETSTRING4
SHOW20:
INCSI;
先打印十位数中的(用ASCII码表示的)高位
再打印十位数中的(用ASCII码表示的)低位
JNZSHOW20
*************************************
MOVAH,4CH
ENDSTART
五.程序执行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮微原 软件 实验 报告