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

上传人:b****9 文档编号:26157684 上传时间:2023-06-17 格式:DOCX 页数:12 大小:65.50KB
下载 相关 举报
微机原理实验三 编程实现子程序调用.docx_第1页
第1页 / 共12页
微机原理实验三 编程实现子程序调用.docx_第2页
第2页 / 共12页
微机原理实验三 编程实现子程序调用.docx_第3页
第3页 / 共12页
微机原理实验三 编程实现子程序调用.docx_第4页
第4页 / 共12页
微机原理实验三 编程实现子程序调用.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《微机原理实验三 编程实现子程序调用.docx》由会员分享,可在线阅读,更多相关《微机原理实验三 编程实现子程序调用.docx(12页珍藏版)》请在冰豆网上搜索。

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

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

实验二编程实现循环程序

**************************************************************************************

一、题目内容

**************************************************************************************

•编程实现:

•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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1