资源描述:
《微机原理实验--子程序与宏指令》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、27.编制计算N(N<50)个偶数之和(2+4+6+...)的了•程序和接收键入N及将结果显示在主程序子程序代码:stacksegmentstack'stack1;定义堆栈段dw32dup⑺;堆栈段有32字空间stackendsdatasegment;定义数掘段inputdb'pleaseinputndb5,0,5dup⑺;定义变量数据区nobfdb8dup(?)dataendscodesegment;定义代码段startprocfar;定义一■个过程startassumess:stack,cs:co
2、de,ds:datapushdssubax,ax;未通过过程DOS返回做准备pushaxmovax,datamovds,axmovdx,offsetinputmovah,9;9号功能调用,显示器显示“pleaseinputN:’’int21hmovdx,offsetnmovah,10;10号功能调用,键盘输入并AA示数据nint21hmovsi,offsetn+2movcl,n+lmovch,0calla;调用子程序acallsum;调用子程序sumshlax,l;乘2movbx,segobfmove
3、s,bxmovdi,offsetobf+1callb;调川子程序bcallHH;凋用子程序HHmovdx,offsetobfmovah,9int21hRETstartendpsumproc;定义了•程序sum,sum为自然数相加了•程序pushex;保护现场pushbxmovcx,axmovbx,0movax,bxsm:adcbx,l;把bx,1和CF相加adcax,bx;把ax,bx和CF相加loopsmpopbx;恢复现场popexRETsumendpapmc;定义了程序a,a为键盘输入的
4、•进制
5、数转化成16进制了•程序movax,0cO:pushexmovex,10mulex;乘法指令调JIJandbyteptr[si],Ofh;
6、•进制的asc码转换成BCD码addal,[si]adcah,0incsi;越过负号指向数字popexloopcORETaendpbproc;定义过程c,b为16进制转换成asc码pushaxpushbxpushexpushdxpushdiorax,ax;判断数的负号jnsplus;为正转到plusmovbyteptres:[dj],LI;为负送负号至输出数据区i
7、ncdi;求负数的绝对值negaxplus:movcx,0;将ax屮2进制转换成10进制movbx,10cl:movdx,0divbxpushdx;余数进栈incex;十进制位数加1orax,ax;商不为0继续險以10jnzclc2:popax;将十进制较换成ascfi'iaddal,30hstosbloopc2moval/S1stosbpopdipopdxpopexpopbxpopaxRETbendpHHproc;定义过程HHmovdl,Oah;换行movah,2int21hmovdl,Odh;换行
8、movah,2int21hRETHHendpcodeendsendstart截阁如下:C:、>2.exepleaseinputN:642宏指令代码:summacroA;定义宏sum,sum为自然数相加了•程序pushex;保护现场pushbxmovcx,Amovbx,0movax,bxsm:adcbx,l;把bx,1和CF相加adcax,bx;把ax,bx和CF相力卩loopsmpopbx;恢复现场popexendmstacksegmentstack'stack1;定义堆栈段dw32dup⑺;堆栈段有
9、32字空间stackendsdatasegment;定义数据段inputdb!pleaseinputN:?$,ndb5,0,5dup⑺;定义变景数拋区nobfdb8dup(?)dataendscodesegment;定义代码段startprocfar;定义一■个过程startassumess:stack,cs:code,ds:datapushdssubax,ax;未通过过程DOS返M做准备pushaxmovax,datamovds,axmovdx,offsetinputmovah,9;9号功能凋用,显
10、示器显示“pleaseinputN:int21hmovdx,offsetnmovah,10;10号功能调用,键盘输入并AA示数据nint21hmovsi,offsetn+2movcl,n+lmovch,0calla;调用子程序aSUMax;宏展开sumshlax,l;乘2movbx,segobfmoves,bxmovdi,offsetobf+1callb;调川子程序bcallHH;调用子程序HHmovdx,offsetobfmovah,9int21hst