实验报告子程序设计实验Word文件下载.docx
《实验报告子程序设计实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验报告子程序设计实验Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
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;
显示语句
DECCH
JNZMOVE
MOVDL,'
'
MOVAH,02H
DISPENDP
CODESENDS
ENDSTART
2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。
DATASEGMENT
STR1DB0ah,0dh,'
PLEASEINPUTYOURSTRING:
$'
STR2DB0ah,0dh,'
THENUMBEROFbis:
TABLEDB50,?
50DUP(?
),'
DATAENDS
CODESEGMENT
CODE,DS:
DATA
MOVAX,DATA
LEADX,STR1
MOVAH,9
LEADX,TABLE
MOVAH,0AH
LEASI,TABLE
MOVCL,[SI+1]
MOVCH,0
INCSI
MOVAL,'
b'
MOVAH,0
PUSHSI
PUSHCX
PUSHAX
CALLFARPTRCHECK
POPAX
MOVCL,AL
LEADX,STR2
MOVDL,CL
ANDDL,0FH
CMPDL,9
JBECAN
ADDDL,7
CAN:
ADDDL,30H
MOVAH,2
INT21H
CODEENDS
SCODESEGMENT
SCODE
CHECKPROCFAR
PUSHBP
MOVBP,SP
MOVSI,[BP+10]
MOVCX,[BP+8]
MOVAX,[BP+6]
XORAH,AH
AGAIN:
CMPAL,[SI]
JNECAN1
INCAH
CAN1:
LOOPAGAIN
MOVAL,AH
MOV[BP+10],AX
POPBP
RET4
CHECKENDP
SCODEENDS
3.请编写一个程序来实现简单的程序菜单显示。
(采用多模块程序设计方法)
显示一个菜单要求用户从下表中选择:
(1)HEXACGAME (对应-->
程序1)
(2)CHARSTATISTICSPROGRAM (对应-->
程序2)
(3)PRESS“ESC”TOQUIT
用户作出选择1~3时,显示输出要执行操作的名字,如“Yourselectionis1,theprogramwillexecuteHEXACNUMBERGAME!
”然后转向相应的程序去执行,执行结束前进行退出的判断,显示一个提示信息“willyoucontinueprogramreally?
(Y:
N)”要求用户从键盘键入字符,若是“Y”键,则继续程序的执行,若是“N”键,则返回到菜单。
若用户选择3,要求程序显示提示信息“PleasepressESCkeytoexit!
”,并能按要求正确退出。
OPTDWYI
DWER
menuDB0DH,0AH,'
THEMENU:
'
;
显示菜单
DB0DH,0AH,'
(1)HEXACGAME'
对应-->
程序1
(2)CHARSTATISTICSPROGRAM'
;
程序2
(3)PRESS"
ESC"
TOQUIT$'
BUFDB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B,11100010B,01010010B
定义常量CAN
str1DB0DH,0AH,'
Yourselectionis1,theprogramwillexecuteHEXACGAME!
str2DB0dh,0ah,'
Yourselectionis2,theprogramwillexecuteCHARSTATISTICSPROGRAM!
str3DB0DH,0AH,'
willyoucontinueprogramreally?
N)$'
str4DB0DH,0AH,'
PleasepressESCkeytoexit!
char1db0ah,0dh,'
char2db0ah,0dh,'
MAINPROCFAR
XORDI,DI
subbx,bx
xorsi,si
LEADX,menu;
显示主菜单
movdl,0dh;
显示回车
movah,2
int21h
MOVDL,0AH;
显示换行
MOVAH,2
MOVAH,1;
输入选项
CMPAL,'
1'
JEYI
2'
JEER
3'
JEQUIT
YI:
MOVDI,0
leadx,str1
movah,9
int21h
CALLHEXAC
JMPCONTINUE
ER:
MOVDI,02H
leadx,str2
LEADX,char1
MOVAH,0AH;
输入字符串
MOVCH,0;
CX中为字符串长度
INCSI;
SI指向串首址TABLE
MOVAH,0;
AX中为待查字符
PUSHAX;
参数送堆栈
CALLCHECK
POPAX;
统计个数在AL中
LEADX,char2;
显示结果
JBECAN3
CAN3:
INT21H;
显示统计个数
QUIT:
LEADX,str4;
退出的子程序
MOVAH,1
CMPAL,1BH;
按ESC退出
JEEXIT
CONTINUE:
LEADX,str3;
用户是否继续执行当前程序
Y'
按y继续,按n退出,不需区分大小写
JEYES
y'
N'
JESTART
n'
YES:
JMPopt[DI];
继续运行当前子程序
MOVAH,4CH;
退出
HEXACCODESSEGMENT
HEXACCODES
HEXACPROCFAR;
HEXACCODESENDS
DISPCODESSEGMENT
DISPCODES
DISPPROCFAR;
JNZM