资源描述:
《计算机组成技术 大作业 第2题程序说明.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第2题程序说明题目有一组八位无符号数,求出其中的最大值max,最小值min,以及平均值avg(不考虑余数),请画出框图并编写完整程序。程序简单说明程序中number和DataSource(0)表示数组长度(以字型进行访问)。程序核心是一个循环找出最大数、最小数、数组总和。输出中用到了八位无符号二进制数转化为ascii码。代码流程图中同一行中的代码,是可以并行的、不分先后顺序的。程序执行结果此结果是对24,100,35,67,78,96,57,18,39,10,11,132,13,14来说的。程序流程图bx=数据源首地址di=0;dx=0;ax=0;cx=0;bp=0000f
2、fffhcl←[bx+si];si--ax=ax+cxadcdx,0算平均数;保存min、ax、avg开始判断数组是否合法比较bp与cx否结束提示否是主程序流程图:是di大比较di与cxbp小于等于di=cxbp小bp大于等于bp=cx判断zf是否为0calldbxout(输出)dbxout子程序(输出)流程图。输出max、min、avg存储单元中内容。开始si←MaxString(三个提示)地址;di←max(三个数据)地址;cx=3;dx=si;输出dx指向的字符串;al=[di];bx←maxminavg(临时数据区)地址;dx=bx;callEBinaryAscii
3、(八位无符号二进制数转化为ascii码);[bx]=09h;bx++;[bx]='$';输出dx指向的字符串si=si+5di++cx--否判断zf是否为0是退出EBinaryAscii子程序(八位无符号二进制数转化为ascii码)流程图。al为目标操作数,bx为结果存放位置,结束时bx为结果存放位置的下一个有效位置。第一个循环:除10取余,第二个循环:去掉数字中可能有的0。cx--否开始di=2;dx=10h小比较al与10大于等于ah=0;除dl(10);ah=ah+30h[bx+di]=ah;di--al=al+30h;[bx+di]=al;cx=3;cx=cx-di
4、;si=0al=[bx+di];[bx+si]=alsi++di++判断zf是否为0是bx=bx+si退出代码datasegmentnumberdb14;高字节存在DataSource(0)中,number子操作DataSourcedb00,24,100,35,67,78,96,57,18,39,10,11,132,13,14;DataSource+1指向第一个元素位置maxdb0mindb0avgdb0MaxStringdb'max:','$'MinStringdb'min:','$'AvgStringdb'avg:','$'maxminavgdb5dup(?)Index
5、dw0;错误提示ydb'Thenumberofarrayelementsis0!','$'dataendsstacksegmentdb100dup(?)stackendscodesegmentassumeds:data,cs:code,ss:stackbegin:dbxprintmacro;输出字符串宏movah,09hint21hendmdbxprintmovax,datamovds,axmovax,stackmovss,axmovsp,100movbx,offsetDataSource;数据源地址movsi,wordptrnumber;数组最大为65535cmpsi,0
6、;判断数组是否合法jnzCanStartmovax,0;错误提示calldbxerrorjmpexitCanStart:xordi,di;di存最大值orbp,0000ffffh;bp存最小值xordx,dx;dx:ax存所有元素之和,最大为4294967295xorax,axxorcx,cx;循环找数暂存器lop:;循环找数movcl,[bx+si]cmpdi,cxjaRelativelyLargemovdi,cxRelativelyLarge:cmpbp,cxjbRelativelySmallmovbp,cxRelativelySmall:addax,cxadcdx,0
7、decsijnzlopmovbx,wordptrnumberdivbxmovcx,bp;保存max、min、avgmovbx,dimovmax,blmovmin,clmovavg,alcalldbxoutexit:movax,4c00hint21hdbxoutprocnear;输出movsi,offsetMaxStringmovdi,offsetmaxmovcx,3outlop:movdx,si;输出maxdbxprintmoval,byteptr[di]movbx,offsetmaxminavgmovdx,bxc