微机原理实验三 编程实现子程序调用.docx
- 文档编号:26157684
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:12
- 大小:65.50KB
微机原理实验三 编程实现子程序调用.docx
《微机原理实验三 编程实现子程序调用.docx》由会员分享,可在线阅读,更多相关《微机原理实验三 编程实现子程序调用.docx(12页珍藏版)》请在冰豆网上搜索。
微机原理实验三编程实现子程序调用
实验二编程实现循环程序
**************************************************************************************
一、题目内容
**************************************************************************************
•编程实现:
•1.主程序由键盘输入一个数(<10),用子程序1实现DATA段以这个数为首连续十个整数填充字节数组buf。
譬如显示提示:
”Pleaseinputanumber:
”,键盘输入3,执行子程序1后bufdb3,4,5,6,7,8,9,10,11,12。
•2.主程序实现十个数求和,调用另一子程序2实现将和逐位转为ASCII码显示:
”Sumis:
xx”。
•提示:
和不会超过十进制3位数,所以将和除以10,逐位转换,再加上30H即分别可以得它们的ASCII码。
**************************************************************************************
2、流程图**************************************************************************************
**************************************************************************************三、程序代码
**************************************************************************************
stacksegmentstack'stack'
dw32dup(0)
stackends
;==========================
datasegment
TIP1DB'Plesaseinputanumber(0 $' BUFDB10DUP(? ) TIP2DB'Fromnton+10istheresultofthe: $' SUMDW0 dataends ;========================== STACSEGMENT;用于变量定义予置的堆栈空间 STADB100DUP(? ) STACENDS ;========================== codesegment ;=================== MAINprocfar assumess: stack,cs: code,ds: data pushds subax,ax movax,data movds,ax ;=========== MOVDX,OFFSETTIP1;显示提示语 MOVAH,9 INT21H XORAX,AX;键入并显示一个字符,把字符的ASCII码存入AL中 MOVAH,1 INT21H MOVDL,0AH;换行 PUSHAX MOVAH,2 INT21H POPAX MOVDI,OFFSETBUF;取BUF的首址存入DI中 XORCX,CX CALLAddNum;—1—调用子程序FUZHI实现DATA段以这个数为首连续十个整数填充字节数组buf XORAX,AX MOVCX,0AH;给LOOP2循环赋初值10 MOVDI,OFFSETBUF AGAIN2: ADDAX,[DI];主程序实现求上述十个数的和,存入AX中 INCDI LOOPAGAIN2;循环10次 CALLDELAY1S;—2—调用子函数延时1S PUSHAX CALLTransf;—3—调用另一子程序ZHUANG实现将和逐位转为ASCII码显示 POPAX ;MOVAH,4CH;返回DOS,不用这个,对话框会一闪而退 ;INT21H ;RET movah,1;这个的话对话框会暂停 int21h MAINENDP ;/***************************************************************************/ ;子程序名: AddNum ;功能: 实现DATA段以输入的那个数为首连续十个整数填充字节数组buf ;入口参数: ;DS: DI←待填充的数组buf的首地址 ;AL←输入的那个数 ;出口参数: 【DI】←填充结果 ;/***************************************************************************/ AddNumPROC PUSHCX SUBAL,30H;将AL转为十进制 MOVCX,0AH;给LOOP循环赋初值10 AGAIN1: MOV[DI],AL;将AL存入BUF中 INCDI;DI+1,即数组BUF中的地址单元+1 INCAL;AL+1 LOOPAGAIN1 POPCX RET;返回主程序 AddNumENDP ;/***************************************************************************/ ;子程序名: Transf ;功能: 实现将和逐位转为ASCII码显示 ;入口参数: ;DS: DI←数组buf的首地址 ;AX←和的十进制数 ;出口参数: AX←和的ASCII码 ;/***************************************************************************/ TransfPROC PUSHF PUSHAX PUSHBX PUSHCX PUSHDX XORBX,BX PUSHAX XORAH,AH CMPAX,64H JNBSANWEI POPAX XORAH,AH MOVBL,10;将除数赋值为10 DIVBL;将和AX除以10,商存入AL中,所以AL为十位数。 余数存入AH中,所以AH为个位数。 PUSHAX MOVDX,OFFSETTIP2;显示结果提示语句 MOVAH,9 INT21H POPAX XORDX,DX MOVDL,AL ADDDL,30H;将十进制的十位数加上30H,得到它的ASCII码 PUSHAX MOVAH,2 INT21H POPAX XORDX,DX;将十进制的个位数加上30H,得到它的ASCII码 MOVDL,AH ADDDL,30H MOVAH,2 INT21H JMPL SANWEI: XORDX,DX MOVBX,10;将除数赋值为10 DIVBX;将和AX除以10,商存入AL中,所以AL为十位数。 余数存入AH中,所以AH为个位数。 PUSHDX PUSHAX MOVDX,OFFSETTIP2;显示结果提示语句 MOVAH,9 INT21H POPAX POPDX MOVBL,10;将除数赋值为10 DIVBL;将和AX除以10,商存入AL中,所以AL为十位数。 余数存入AH中,所以AH为个位数。 PUSHDX MOVDL,AL ADDDL,30H;将十进制的百位数加上30H,得到它的ASCII码 PUSHAX MOVAH,2 INT21H POPAX POPDX PUSHDX XORDX,DX;将十进制的个位数加上30H,得到它的ASCII码 MOVDL,AH ADDDL,30H MOVAH,2 POPDX ADDDL,30H MOVAH,2 L: POPDX POPCX POPBX POPAX POPF RET;返回主程序 TransfENDP ;/***************************************************************************/ DELAY1SPROC;延时1S子程序 PUSHF PUSHBX PUSHCX MOVBX,3E8H LP2: MOVCX,176H LP1: PUSHF POPF LOOPLP1 DECBX JNZLP2 POPCX POPBX POPF RET DELAY1SENDP ;=================== codeends ;========================== endMAIN **************************************************************************************四、操作截图************************************************************************************** **************************************************************************************五、实验分析或经验总结************************************************************************************** 这个程序自己实在调不出来,只能很大程度地参考网上类似的题目,可见自己的基础太薄弱了,必须抓紧查漏补缺。 1、编译汇编文件: 先在记事本里输入代码后,再用汇编编译器编译。 具体过程如下: 1)、编辑: 用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如: LX.ASM; 2)、汇编: 用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下: MASMLX.ASM; 3)、连接: 用连接程序(LINK.EXE)对目标程序进行连接,形成可执行文件(.EXE),格式如下: LINKLX.OBJ; 4)、执行: 如果结果在屏幕在显示,则直接执行可执行文件。 5)、调试: 用调试程序(LINK.EXE)对可执行文件进行调试,格式如下: DEBUGLX.EXE 2、代码用英文格式输入状态,否则出错。 3、注意关键词输入正确性。 4、返回DOS,不用这个,对话框会一闪而退 MOVAH,4CH INT21H RET 这个的话对话框会暂停 movah,1 int21h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理实验三 编程实现子程序调用 微机 原理 实验 编程 实现 子程序 调用