实验报告子程序设计实验.docx

上传人:b****0 文档编号:406862 上传时间:2022-10-09 格式:DOCX 页数:13 大小:181.92KB
下载 相关 举报
实验报告子程序设计实验.docx_第1页
第1页 / 共13页
实验报告子程序设计实验.docx_第2页
第2页 / 共13页
实验报告子程序设计实验.docx_第3页
第3页 / 共13页
实验报告子程序设计实验.docx_第4页
第4页 / 共13页
实验报告子程序设计实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验报告子程序设计实验.docx

《实验报告子程序设计实验.docx》由会员分享,可在线阅读,更多相关《实验报告子程序设计实验.docx(13页珍藏版)》请在冰豆网上搜索。

实验报告子程序设计实验.docx

实验报告子程序设计实验

实验5子程序实验

一.实验目的

1.掌握主程序与子程序之间的调用关系及调用方法;

2.掌握子程序调用过程中近程调用与远程调用的区别;

3.掌握通过堆栈转送参数的方法。

4.掌握多模块程序设计方法

二.实验容

1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。

要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。

DATASSEGMENT

BUFDB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B,11100010B,01010010B

CANDB$-BUF;定义常量CAN

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

MAINPROCFAR;主程序块

START:

MOVAX,DATAS

MOVDS,AX

MOVCL,10

LEASI,BUF

LOOP1:

;调用子程序语句

callHEXAC

callDISP

DECCAN

JNZLOOP1

EXIT:

MOVAH,4CH

INT21H

MAINENDP

HEXACPROCNEAR;二进制转换成十六进制子程序

MOVBL,[SI]

INCSI

RET

HEXACENDP

DISPPROCNEAR;显示子程序

MOVCL,4

MOVCH,2

MOVE:

;移位语句

ROLBL,CL

MOVDL,BL

ANDDL,0FH

ADDDL,30H

CMPDL,'9'

JBEPRINT

ADDDL,07H

PRINT:

MOVAH,02H;显示语句

INT21H

DECCH

JNZMOVE

MOVDL,''

MOVAH,02H

INT21H

RET

DISPENDP

CODESENDS

ENDSTART

2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。

DATASEGMENT

STR1DB0ah,0dh,'PLEASEINPUTYOURSTRING:

$'

STR2DB0ah,0dh,'THENUMBEROFbis:

$'

TABLEDB50,?

50DUP(?

),'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,STR1

MOVAH,9

INT21H

LEADX,TABLE

MOVAH,0AH

INT21H

LEASI,TABLE

MOVCL,[SI+1]

MOVCH,0

INCSI

INCSI

MOVAL,'b'

MOVAH,0

PUSHSI

PUSHCX

PUSHAX

CALLFARPTRCHECK

POPAX

MOVCL,AL

LEADX,STR2

MOVAH,9

INT21H

MOVDL,CL

ANDDL,0FH

CMPDL,9

JBECAN

ADDDL,7

CAN:

ADDDL,30H

MOVAH,2

INT21H

EXIT:

MOVAH,4CH

INT21H

CODEENDS

SCODESEGMENT

ASSUMECS:

SCODE

CHECKPROCFAR

PUSHBP

MOVBP,SP

MOVSI,[BP+10]

MOVCX,[BP+8]

MOVAX,[BP+6]

XORAH,AH

AGAIN:

CMPAL,[SI]

JNECAN1

INCAH

CAN1:

INCSI

LOOPAGAIN

MOVAL,AH

MOV[BP+10],AX

POPBP

RET4

CHECKENDP

SCODEENDS

ENDSTART

3.请编写一个程序来实现简单的程序菜单显示。

(采用多模块程序设计方法)

显示一个菜单要求用户从下表中选择:

(1)HEXACGAME      (对应-->程序1)

(2)CHARSTATISTICSPROGRAM    (对应-->程序2)

(3)PRESS“ESC”TOQUIT

用户作出选择1~3时,显示输出要执行操作的名字,如“Yourselectionis1,theprogramwillexecuteHEXACNUMBERGAME!

”然后转向相应的程序去执行,执行结束前进行退出的判断,显示一个提示信息“willyoucontinueprogramreally?

(Y:

N)”要求用户从键盘键入字符,若是“Y”键,则继续程序的执行,若是“N”键,则返回到菜单。

若用户选择3,要求程序显示提示信息“PleasepressESCkeytoexit!

”,并能按要求正确退出。

DATASSEGMENT

OPTDWYI

DWER

menuDB0DH,0AH,'THEMENU:

';显示菜单

DB0DH,0AH,'

(1)HEXACGAME';对应-->程序1

DB0DH,0AH,'

(2)CHARSTATISTICSPROGRAM';对应-->程序2

DB0DH,0AH,'(3)PRESS"ESC"TOQUIT$'

BUFDB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B,11100010B,01010010B

CANDB$-BUF;定义常量CAN

str1DB0DH,0AH,'Yourselectionis1,theprogramwillexecuteHEXACGAME!

$'

str2DB0dh,0ah,'Yourselectionis2,theprogramwillexecuteCHARSTATISTICSPROGRAM!

$'

str3DB0DH,0AH,'willyoucontinueprogramreally?

(Y:

N)$'

str4DB0DH,0AH,'PleasepressESCkeytoexit!

$'

TABLEDB50,?

50DUP(?

),'$'

char1db0ah,0dh,'PLEASEINPUTYOURSTRING:

$'

char2db0ah,0dh,'THENUMBEROFbis:

$'

DATASENDS

CODESSEGMENT

MAINPROCFAR

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

XORDI,DI

subbx,bx

xorsi,si

LEADX,menu;显示主菜单

MOVAH,9

INT21H

movdl,0dh;显示回车

movah,2

int21h

MOVDL,0AH;显示换行

MOVAH,2

INT21H

MOVAH,1;输入选项

INT21H

CMPAL,'1'

JEYI

CMPAL,'2'

JEER

CMPAL,'3'

JEQUIT

YI:

MOVDI,0

leadx,str1

movah,9

int21h

MOVCL,10

LEASI,BUF

CALLHEXAC

LOOP1:

;调用子程序语句

callHEXAC

callDISP

DECCAN

JNZLOOP1

JMPCONTINUE

ER:

MOVDI,02H

leadx,str2

movah,9

int21h

LEADX,char1

MOVAH,9

INT21H

LEADX,TABLE

MOVAH,0AH;输入字符串

INT21H

LEASI,TABLE

MOVCL,[SI+1]

MOVCH,0;CX中为字符串长度

INCSI

INCSI;SI指向串首址TABLE

MOVAL,'b'

MOVAH,0;AX中为待查字符

PUSHSI

PUSHCX

PUSHAX;参数送堆栈

CALLCHECK

POPAX;统计个数在AL中

MOVCL,AL

LEADX,char2;显示结果

MOVAH,9

INT21H

MOVDL,CL

ANDDL,0FH

CMPDL,9

JBECAN3

ADDDL,7

CAN3:

ADDDL,30H

MOVAH,2

INT21H;显示统计个数

JMPCONTINUE

QUIT:

LEADX,str4;退出的子程序

MOVAH,9

INT21H

MOVAH,1

INT21H

CMPAL,1BH;按ESC退出

JEEXIT

CONTINUE:

LEADX,str3;用户是否继续执行当前程序

MOVAH,9

INT21H

MOVAH,1

INT21H

CMPAL,'Y';按y继续,按n退出,不需区分大小写

JEYES

CMPAL,'y'

JEYES

CMPAL,'N'

JESTART

CMPAL,'n'

JESTART

YES:

JMPopt[DI];继续运行当前子程序

EXIT:

MOVAH,4CH;退出

INT21H

MAINENDP

CODESENDS

HEXACCODESSEGMENT

ASSUMECS:

HEXACCODES

HEXACPROCFAR;二进制转换成十六进制子程序

MOVBL,[SI]

INCSI

RET

HEXACENDP

HEXACCODESENDS

DISPCODESSEGMENT

ASSUMECS:

DISPCODES

DISPPROCFAR;显示子程序

MOVCL,4

MOVCH,2

MOVE:

;移位语句

ROLBL,CL

MOVDL,BL

ANDDL,0FH

ADDDL,30H

CMPDL,'9'

JBEPRINT

ADDDL,07H

PRINT:

MOVAH,02H;显示语句

INT21H

DECCH

JNZM

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

当前位置:首页 > 医药卫生 > 基础医学

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

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