如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
北京邮电大学微机原理软件实验报告2010级信通08班07号朱志强2012年11月24日实验B分支,循环程序设计一、实验目的开始独立进行汇编语言程序设计;掌握基本分支,循环程序设计;掌握最简单的DOS功能调用。二、实验内容安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。编写一个程序统计数据区中正数,负数和零的个数。将统计结果在屏幕上显示。(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。三、预习思考十进制数0~9所对应的ASCII码是什么?如何将十进制数0~9在屏幕上显示出来?答:0~9分别对应ASCII码的30H~39H。欲将十进制数0~9显示在屏幕上,只需要用二进制数0~9分别加上30H即可。如何检验一个数为正,为负或为零?你能举出多少种不同的方法?答:方法有多种,现举出两种。一是直接用CMP命令和0比较,然后用JZ等命令进行判断;二是和0相比是否相等,然后用该数(假设为8位)和10000000相与,取出符号位判断,可区分正负。其余方法大同小异,核心的思想是要么直接和0相比,要么使用逻辑或移位运算,取出符号为进行判断。四、实验过程(一)、流程图(二)、源代码DATASEGMENTARRAYDB1,2,3,4,5,6,-1,-2,-3,0,0,0LENGEQU$-ARRAY;数组长度POSIDB?;正数个数NEGTDB?;负数个数ZERODB?;零的个数POSIEVENDB?;正偶数POSIODDDB?;正奇数NEGTEVENDB?;负偶数NEGTODDDB?;负奇数;用于打印提示的字符串定义POSICHARDB'Positive:$'NEGTCHARDB'Negtive:$'ZEROCHARDB'Zero:$'EVENCHARDB'Even:$'ODDCHARDB'Odd:$'CRDB0DH,0AH,'$';回车换行的ASCII码DATAENDS;--------------------------------------------------------CODESEGMENTASSUMECS:CODE,DS:DATA;--------------------------------------------------------START:MOVAX,DATAMOVDS,AXMOVSI,OFFSETARRAY-1MOVCL,LENG;数组长度赋予CLMOVAL,0LOP:CMPCL,0;循环控制条件:数组长度减为零JECALC;为零则跳出INCSIDECCLMOVBL,[SI];采用基址加变址寻址CMPBL,AL;和零比较JGISPOSI;是正数跳转JEISZERO;是零跳转JLISNEGT;是负数跳转;--------------------------------------------------------ISPOSI:INCPOSI;正数个数加一ANDBX,1ADDPOSIEVEN,BL;和1与之后的结果加到正偶数中JMPLOPISZERO:INCZEROJMPLOPISNEGT:INCNEGT;负数个数加一ANDBX,1ADDNEGTEVEN,BL;和1与之后结果加到负偶数中JMPLOP;--------------------------------------------------------CALC:MOVAH,POSIMOVAL,POSIEVENSUBAH,AL;计算正奇数个数MOVPOSIODD,AHMOVAH,NEGTMOVAL,NEGTEVENSUBAH,AL;计算负奇数个数MOVNEGTODD,AH;--------------------------------------------------------PRINT:;打印正数提示符和正数(奇偶)个数MOVAH,09HMOVDX,OFFSETPOSICHARINT21HMOVAH,02HMOVDL,POSIADDDL,30HINT21HMOVAH,09HMOVDX,OFFSETEVENCHARINT21HMOVAH,02HMOVDL,POSIEVENADDDL,30HINT21HMOVAH,09HMOVDX,OFFSETODDCHARINT21HMOVAH,0