深圳大学微机原理实验报告Word格式文档下载.docx
- 文档编号:17203969
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:182.61KB
深圳大学微机原理实验报告Word格式文档下载.docx
《深圳大学微机原理实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《深圳大学微机原理实验报告Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
实验目的与要求:
1.实现以下汇编子程序
a)upper_fun(x,n),子程序名是upper_fun,其中入口参数x是一个英文字母的字符串
的首地址,16位无符号数,入口参数n是输入的字符串长度(n不超过31),8位
无符号数,没有出口参数/返回值。
程序将字符串x全部转换为相应的大写英文字
母。
b)lower_fun(x,n),子程序名是lower_fun,其中入口参数x是一个英文字母字符串的
首地址,16位无符号数,入口参数n是输入的字符串长度(n不超过31),8位无
符号数,没有出口参数/返回值。
程序将字符串x全部转换为相应的小写英文字母。
c)usage_fun(),子程序名usage_fun,没有入口参数和出口参数,输出用户界面。
2.程序开始时在显示器上输出用户界面,告诉用户怎么选择,用户可以选择两种操作,
大写转换操作(upper),小写转换操作(lower)。
3.当用户选择大写转换操作(upper)时,提示用户输入英文字母字符串,以回车结束,
读取输入字符串,调用upper_fun函数,并在显示器上显示转换后的结果
4.当用户选择小写转换操作(lower)时,提示用户输入英文字母字符串,以回车结束,
读取输入字符串,调用lower_fun函数,并在显示器上显示转换后的结果
5.当用户输入的字符串超过31位,或者包含非英文字母的字符时,提示错误,并重新输
出用户界面
6.程序无限循环,每次处理完即输出用户界面,等待用户的下一次选择
7.用户界面及结果显示要清晰简洁
8.例如:
用户选择大写转换操作,并输入”heLLo”,则输出”HELLO”;
用户选择小写转换
操作,并输入”heLLo”,则输出”hello”。
如果用户输入”hello123”,因为包含非英文单词
的字符,则输出错误提示。
设计思想(需绘制实验原理图或流程图):
程序清单(程序中需有必要注释):
;
数据段
datasegment
label1db"
pleaseinputupper(u)orlower(l)"
0dh,0ah,"
$"
label2db0dh,0ah,"
pleaseinputEnglishcharacter,lessthan31"
label3db0dh,0ah,"
theEnglishcharactermorethan31"
label4db0dh,0ah,"
thestringcontainscharacterotherthanEnglishcharacters"
label5db0dh,0ah,'
$'
bufferdb40,0,40dup(0)
dataends
代码段
codesegment
assumecs:
code,ds:
data
upper_funproc;
大写转换子程序upper
leadx,buffer
movah,0ah
int21h;
调用21号中断,让用户在界面上输入不超过31个英文字符
movbl,31
cmpbl,buffer[1]
JBerror1;
判断用户输入的字符个数是否超过31个
movcx,0
movcl,buffer[1];
buffer[1]中存储着用户输入的字符的数目(不包括回车)
movbx,2
next1:
moval,buffer[bx]
andal,11011111b
cmpal,'
A'
jlerror2
Z'
jgerror2;
将用户输入的字符全部转成大写字符,然后判断该字符是否在A和Z之间
andbuffer[bx],11011111B;
将字符串中的小写字母转换成大写字母
incbx
loopnext1
movah,9
leadx,label5
21号中断,在界面进行回车换行
movbl,buffer[1]
movbuffer[bx+3],0dh
movbuffer[bx+4],0ah
movbuffer[bx+5],'
;
在用户输入的字符串最后自动加上回车换行及$结束标志
leadx,buffer[2]
21号中断,输出转换后的结果
jmpover1
error1:
leadx,label3
int21h
jmpover1;
若用户输入字符超过31个,则跳转到error1处,并界面中显示出错
error2:
leadx,label4
若用户输入的字符串中包括了非英文字符,跳转到error2处,并在界面中显示出错
over1:
ret
upper_funendp
lower_funproc;
小写转换子程序upper
movah,0ah
JBerror3;
movcl,buffer[1];
next2:
moval,buffer[bx]
jlerror4
jgerror4;
orbuffer[bx],00100000B
loopnext2
movbh,0
leadx,buffer[2]
jmpover2
error3:
若用户输入字符超过31个,则跳转到error3处,并界面中显示出错
error4:
若用户输入的字符串中包括了非英文字符,跳转到error4处,并在界面中显示出错
over2:
lower_funendp
子程序
start:
movax,data;
设置DS,SS和ES段寄存器,不需要设置CS段寄存器
movds,ax
leadx,label1
使用21号中断显示字符串label1,提醒用户选择upper或者lower模式
movah,1
用户输入upper(u)或者lower(l)来选择模式
cmpal,75h;
判断用户输入的是不是u,若是u,则跳转到upper标号
jeupper
lower:
leadx,label2
提醒用户输入不超过31位的英文字符
calllower_fun;
调用子程序lower_fun
jmpover3
upper:
callupper_fun;
调用子程序upper_fun
over3:
jmpstart
movax,4c00h;
返回到dos系统
int21h
codeends
endstart
分析实验结果(显示程序运行结果并分析解释):
1.当用户在界面输入u时,程序进行小写字母转大写字母的操作:
2.然后用户在界面输入一串不超过31位的英文字符串:
如输入abcDEF
此时程序的输出结果为:
可以看到小写字母abc已经转换成了大写字母ABC,而大写字母DEF则保持不变。
3.若用户输入的字符超过31个,程序将报错
如输入35个h,程序运行结果为:
4.若用户输入了非英文字符,则程序也会报错
5.当用户开始时输入l,则程序进入到大写字母转小写字母的模式:
假如用户输入字符串ABCdef
可以看到,大写字母ABC最后被转换成了小写字母abc,而小写字母def则保持不变。
用户每次执行完字母大小写转换转换,程序会自动回到最开始的输入界面,等待用户的下一次输入。
实验过程中遇到的问题及解决方案:
1.在调用21号中断int21hah=0ah时,以为回车键0dh不会输入到buffer所在的内存中,但是经过观察内存单元发现,在用户输入的最后一个字符后面,还有一个内存单元是0dh,证明回车键会被输入到内存中。
2.在判断用户输入的字符是否为英文字符时,开始的时候没有考虑到在Z和a之间还有几个非英文的字符,于是把判断的算法写成了
next2:
cmpbuffer[bx],'
z'
jgerror4
后面想到可以将用户输入的字符当作是英文字符,然后全部转换成大写,接着判断其ascll码是否在A和Z之间即可:
next1:
jgerror2
3.开始的时候尝试使用堆栈进行参数传递,但是在执行call和int指令时,也会伴随着CSIP的入栈出栈,于是容易与要传递的参数发生冲突,最后选择使用寄存器传递参数。
4.在用户输入完字符串并经过转换之后,程序要将结果输出,但是用户没有输入$字符,因此我们需要手动在字符串后面添加结束标志$,程序才能成功地把结果输出到用户界面。
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深圳大学 微机 原理 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)