资源描述:
《微机原理实验加法器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、四、参考程序snowMACROB;宏定义MOVDL,B;B为要显示字符的ASCII码MOVAH,02HINT21H:2号功能调用,在屏幕上显示一个字符ENDMDATASEGMENT;数据段DATA1DB38H,32H,34H,36H,31H;被加数16428的ASCII码(倒序存放)DATA2DB31H,36H,34H,33H,35H;加数53461的ASCII码(倒序存放)DATA3r)R1•nr)Hoah叫■yvjL/n9um94>DATAENDSSTACKSEGMENTSTACK;堆栈段STADB20DUP
2、(?)TOPEQULENGTHSTASTACKENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOVAX,DATA;初始化,取段基址MOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVSI,OFFSETDATA2;取DATA2(加数)的偏移地址MOVBX,05:设宣地址指针,BX=5(加数为5位)SHOW20H:宏调用,显示“空格”(ASCII码为20H)CALLDISPL;调显示子程序SHOW
3、ODH;宏调用,'‘回车”SHOWOAH;宏调用,“换行”MOVSI,OFFSETDATA1;取DATA1(被加数)的偏移地址MOVBX,05;设置地址指针,BX=5(被加数为5位)SHOW2BH;宏调用,显示“+”(ASCII码为2BH)CALLDISPL;调显示子程序SHOWODH;宏调用,“回车”SHOWOAH;宏调用,'‘换行”MOVCL,7:CL=7,显示7个“・”,构成直线SI:SHOW2DII;宏调用,显示“・”(ASCII码为2DH)LOOPSI;CX・1->CX,CXMO,转到标号siSHOWO
4、DHSHOWOAHMOVSI,OFFSETDATA1;取DATA1(被加数)的偏移地址MOVDI,OFFSETDATA2;取DATA2(加数)的偏移地址CALLADDA;调加法程序MOVSI,OFFSETDATA1;取DATA1的偏移地址,显示两数Z和SHOW20HMOVBX,05;BX=5,设置地址指针CALLDISPL;调显示子程序MOVAX,4C00H;返回DOSINT21HDISPLPROCNEAR;显示子程序DS1:SHOW[SI+BX-1];宏调用,倒序显示数据DECBX;BX—BX—1JNZDS1;
5、BX丸,转到标号DS1,继续显示数据RETD1SPLENDPADDAPROCNEAR;加法子程序MOVDX,SI;DATA1的偏移地址传送给DXMOVBP,DI;DATA2的偏移地址传送给BPMOVBX,05;BX=5,设登地址指针ADI:SUBBYTEPTR[SI+BX-1],30H;将ASCII码转化为十六进制数,并存入DATA1SUBBYTEPTR[DI+BX-1],3011;将ASCII码转化为十六进制数,并存入DATA2DECBX;BX—BX—1JNZAD1;BX却,转到标号AD1,继续转换MOVSLD
6、X:SI—DATA1的偏移地址MOVDbBP;DI—DATA2的偏移地址MOVCX,05;CX=5,设置计数常数CLC•晴除进位农示,CF=0AD2:MOVAL,[SI];AL—DATA1屮的低位数MOVBL,[DI]:BL*-DATA1中的低位数ADCAL,BL;带进位相加AAA•十进制调整MOV[SI],AL;将结果保存到DATA1中INCSI;指向下一位INCDILOOPAD2;CX・1tCX,CXM0,转到标号AD2,继续加法MOVSI,DX;SI—DATA1的偏移地址MOVDI,BP;DI<-DATA2
7、的偏移地址MOVBX,05;BX=5,设置地址指针AD3:ADDBYTEPTR[SI+BX-1],30H:将十六进制转化为ASCII码ADDBYTEPTR[DI+BX-1],30HDECBX;BX—BX—1JNZAD3;BXK),转到标号AD3,继续转换RETADDAENDPCODEENDSENDSTART/£>实验结果C:WINDOVSXsyste>32od.exe53461+1642869889Pressanykeytocontinue