微机原理实验三 编程实现子程序调用

上传人:工**** 文档编号:485456366 上传时间:2023-01-10 格式:DOCX 页数:10 大小:66.27KB
返回 下载 相关 举报
微机原理实验三 编程实现子程序调用_第1页
第1页 / 共10页
微机原理实验三 编程实现子程序调用_第2页
第2页 / 共10页
微机原理实验三 编程实现子程序调用_第3页
第3页 / 共10页
微机原理实验三 编程实现子程序调用_第4页
第4页 / 共10页
微机原理实验三 编程实现子程序调用_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《微机原理实验三 编程实现子程序调用》由会员分享,可在线阅读,更多相关《微机原理实验三 编程实现子程序调用(10页珍藏版)》请在金锄头文库上搜索。

1、实验二编程实现循环程序*一、题目内容*编程实现:-1.主程序由键盘输入一个数(10),用子程序1实现DATA段以这个数为首连续十 个整数填充字节数组buf。譬如显示提示:Please input a number:,键盘输入3, 执行子程序 1 后 buf db 3,4,5,6,7,8,9,10,11,12。 竺程序实现十个数求和,调用另一子程序2实现将和逐位转为ASCII码显 示:Sum is: xx。提示:和不会超过十进制3位数,所以将和除以10,逐位转换,再加上30H即 分别可以得它们的ASCII码。二、流程图开女台zoMOV BL,1 OOIV BL立数 VAH+3 QI百位数十位数

2、ALMOV AH ,OMOV Bl_,1 ODIV BL百位敏 AL-i-SOH十位数 Al+3 01*三、程序代码*stack segment stack stackdw 32 dup(0)stack ends=data segmentTIP1 DB Plesase input a number(0n10)BUF DB 10 DUP(?)TIP2 DB From n to n+10 is the result of theSUM DW 0data ends;=STAC SEGMENTSTA DB 100 DUP(?)STAC ENDS;=code segment;=MAIN proc far

3、assume ss:stack,cs:code,ds:data push dssub ax,ax mov ax,data mov ds,ax;=MOV DX,OFFSET TIP1MOV AH,9INT 21H$;用于变量定义予置的堆栈空间;显示提示语XOR AX,AXMOV AH,1INT 21H;键入并显示一个字符,把字符的ASCII码存入AL中MOV DL,0AHPUSH AXMOV AH,2INT 21HPOP AX;换行MOV DI,OFFSET BUF;取BUF的首址存入DI中XOR CX,CX;一1调用子程序FUZHI实现DATA段以这个数为首CALL AddNum连续十个整数填

4、充字节数组bufXOR AX,AX;给LOOP2循环赋初值10MOV CX,0AHMOV DI,OFFSET BUFAGAIN2: ADD AX,DIINC DILOOP AGAIN2;主程序实现求上述十个数的和,存入AX中;循环10次CALL DELAY1S;2调用子函数延时1SPUSH AXCALL Transf;3调用另一子程序ZHUANG实现将和逐位转为ASCII码显示POP AX;MOV AH,4CH;返回DOS,不用这个,对话框会一闪而退;INT 21H;RETmov ah, 1;这个的话对话框会暂停int 21hMAIN ENDP;/*/;子程序名:AddNum;功能:实现DAT

5、A段以输入的那个数为首连续十个整数填充字节数组buf;入口参数:;DS: DI-待填充的数组buf的首地址;AL-输入的那个数;出口参数:【DI】一填充结果;/*/AddNum PROCPUSH CXSUB AL,30HMOV CX,0AH;将AL转为十进制;给LOOP循环赋初值10AGAIN1: MOV DI,ALINC DIINC AL;将AL存入BUF中;DI+1,即数组BUF中的地址单元+1;AL+1LOOP AGAIN1POP CXRETAddNum ENDP;返回主程序;/*/;子程序名:Transf;功能:实现将和逐位转为ASCII码显示;入口参数:;DS: DI-数组buf的首

6、地址;AX-和的十进制数;出口参数:AX-和的ASCII码 ;/*/Transf PROCPUSHFPUSH AXPUSH BXPUSH CXPUSH DXXOR BX,BXPUSH AXXOR AH,AHCMP AX,64HJNB SANWEIPOP AXXOR AH,AHMOV BL,10DIV BLAH中,所以AH为个位数。;将除数赋值为10;将和AX除以10,商存入AL中,所以AL为十位数。余数存入PUSH AXMOV DX,OFFSET TIP2MOV AH,9INT 21HPOP AX;显示结果提示语句XOR DX,DX MOV DL,AL ADD DL,30H PUSH AX M

7、OV AH,2 INT 21H POP AX;将十进制的十位数加上30H,得到它的ASCII码XOR DX,DX MOV DL,AH ADD DL,30H MOV AH,2 INT 21H JMP L;将十进制的个位数加上30H,得到它的ASCII码SANWEI:XOR DX,DXMOV BX,10DIV BXAH中,所以AH为个位数。;将除数赋值为10;将和AX除以10,商存入AL中,所以AL为十位数。余数存入PUSH DXPUSH AXMOV DX,OFFSET TIP2MOV AH,9INT 21HPOP AXPOP DX;显示结果提示语句MOV BL,10;将除数赋值为10DIV BL

8、;将和AX除以10,商存入AL中,所以AL为十位数。余数存入AH中,所以AH为个位数。PUSH DXMOV DL,ALADD DL,30H;将十进制的百位数加上30H,得到它的ASCII码PUSH AXMOV AH,2INT 21HPOP AXPOP DXPUSH DXXOR DX,DX;将十进制的个位数加上30H,得到它的ASCII码MOV DL,AHADD DL,30HMOV AH,2POP DXADD DL,30HMOV AH,2L:POP DX;返回主程序POP CX POP BX POP AX POPFRETTransf ENDP;/*/DELAY1S PROC延时1S子程序PUSH

9、FPUSH BXPUSH CXMOV BX,3E8HLP2:MOV CX,176HLP1:PUSHFPOPFLOOP LP1DEC BXJNZ LP2POP CXPOP BXPOPFRETDELAY1S ENDP, codeends ,end MAIN四、操作截图国 管坦员 C:Wi n dowssystem 3 2cmd. exeMicrosoft Uindous ? 6.1.76011 ? 2009 Microsoft Corporation?C: MJsers2hye :E:cd masmE:SMASMmasn weiji3.asmMicrosoft Macro Assembler Ue

10、rsion 5.00(Copyright Microsoft Corp 1981-1985, 1987. All rights reseruedObject filename weiji3.OBJ:Source listing CNUL.LST:Icross-reference CNUL.CRF:49134 + 381330 B捕 E:MASMWEIJI3.EXElesase input a number(0n10): 4zrom n to n+10 is the result of the :85五、实验分析或经验总结这个程序自己实在调不出来,只能很大程度地参考网上类似的题目,可见自己的基础太薄弱了,必 须抓紧查漏补缺。1、编译汇编文件:先在记事本里输入代码后,再用汇编编译器编译。具体过程如下:1)、编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如:LX.ASM;2)、汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下:MASM LX.ASM;3)、连接:用连接程序(LINK.EXE)对目

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号