微机原理实验3分支程序设计Word文档格式.docx
《微机原理实验3分支程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验3分支程序设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
2.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
3.在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
4.将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
3、实验过程:
1.根据要求用分支结构设计编辑实现符号函数
的源程序,汇编源程序,运行MASMFORWINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义如下:
DATASSEGMENT;
定义数据段
xdb-6;
存入x的值,比如此处取x=-6
ydb
dadb'
y=1'
'
$'
dendb'
y=0'
xiaodb'
y=-1'
DATASENDS
STACKSSEGMENT;
定义堆栈段
STACKSENDS
CODESSEGMENT;
定义代码段
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX;
初始化
moval,x;
X=-6送入AL
cmpal,0;
将AL与0比较大小
JLnext;
(小于转移,SF!
=0且ZF=0)小于转移到next
jgnext1;
(大于转移,SF=0F且ZF=0)大于转移到next1
movy,0;
将存入y
leadx,den;
取den的偏移地址送DX
movah,09h;
9存入AH
int21h;
调用9号功能键,显示den的内容‘y=0’
jmpnext2;
无条件转移到next2
next1:
movy,1;
1送入y
leadx,da;
取da的偏移地址放DX
movah,09h
调用9号功能显示da的内容‘y=1’
jmpnext2;
next:
movy,-1;
-1放y
leadx,xiao;
取xiao的偏移地址放DX中
调用9号功能显示xiao的内容‘y=-1’
next2:
MOVAH,4CH;
调用返回DOS功能
INT21H;
返回DOS
CODESENDS;
代码段结束
ENDSTART;
汇编结束,起始运行地址为START
程序流程图如下:
调试过程如下:
2.根据要求,在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示,写出源程序,汇编源程序,运行MASMFORWINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义如下:
DATASSEGMENT;
ydb'
error'
;
定义输出字符串
DATASENDS
STACKSSEGMENT;
STACKSENDS
CODESSEGMENT;
ASSUMECS:
MOVAX,DATAS;
MOVDS,AX
movah,1;
1放AH
调用1号功能,输入一个字符
cmpal,61h;
与61H比较大小
jgenext1;
大于等于转移到next1
jmpnext4;
无条件转移到next4
next1:
cmpal,7Ah;
与7AH比较大小
jlenext2;
小于等于转移到next2
jmpnext4;
next2:
subal,20h;
AL加20H
next3:
movdl,al;
AL内容放DL
movah,2;
2放AH
调用2号功能键显示DL中内容
jmpnext5;
无条件转移next5
next4:
leadx,y;
取y的偏移地址
movah,09h
用9号功能键显示
next5:
MOVAH,4CH;
返回DOS功能调用
返回DOS
CODESENDS;
ENDSTART;
汇编结束,起始运行地址为
3.根据要求,写出输入字符判断它是一个数字、大写字母还是小写字母的源程序,汇编源程序,运行MASMFORWINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义如下:
DATASSEGMENT;
shuzidb'
digital'
zimudb'
letter'
qitadb'
other'
DATASENDS
stringdb;
定义存放单元
STACKSENDS
CODESSEGMENT;
START:
MOVAX,DATAS;
MOVDS,AX
movah,1
调用1号功能键输入一个数
cmpal,30h;
与30H比较大小
大于等于转移
jmpnext6;
无条件转移
cmpal,39h;
与39H比较大小
jlenext2;
小于等于转移
cmpal,41h;
与41H比较大小
jgenext3;
直接转移
next3:
cmpal,5Ah;
与5AH比较大小
jlenext5;
jmpnext8;
next8:
cmpal,61h;
jlenext6;
jgenext4;
next5:
leadx,zimu;
取偏移地址
movah,09h
调用9号功能键显示
jmpnext7;
next4:
leadx,shuzi;
int21h;
next6:
leadx,qita;
next7:
INT21H;
CODESENDS;
4.根据要求,编写将字节型变量x的低四位十六进制数的形式显的源程序,汇编源程序,运行MASMFORWINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义如下:
datasegment;
xdb15;
存入要转换的x的值,比如此处取15
dataends
codesegment;
assumecs:
code,ds:
data
start:
movax,data;
movds,ax
moval,x;
x的值送AL中
andal,0fh;
将AL高四位清零
cmpal,9;
AL与9比较大小
JBEnext;
低于等于转移
addal,7;
AL加7
next:
addal,30h;
AL加30H
movah,2
movdl,al;
AL输入DL
调用2号功能键显示DL中的内容
movah,4ch;
codeends;
endstart;
汇编结束,起始运行地址为start
4、实验结论
1>
学习并使用了DEBUG程序,进一步掌握和熟悉汇编语言程序上机过程、DEBUG的常用指令。
2>
根据要求编写了程序,用分支结构设计程序实现符号函数,运行MASMFORWINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义,主要运用有功能键的调用,如1、2、9号功能键,及其出入口参数,回车换行的运用。
3>
根据要求编写了判断字符是否为小写字母,显示错误信息,即则将其转换为大写字母并显示的程序。
通过键盘输入字符,利用JIE、JMP、JGE等转移指令,大小写字母的ASIIC码及相关输入显示功能号的调用等实现。
在DEBUG下查看执行结果,用p指令逐条执行源程序的寄存器变化及指令逐条含义。
4>
通过键盘输入字符,利用JIE、JMP、JGE等转移指令,大小写字母即数字的ASIIC码、1、2、9等相关输入显示功能号的调用等实现判断字符它是一个数字、大写字母还是小写字母,并在屏幕上显示相应的提示信息digital、letter和other。
5>
利用转移指令JBEJNZ和移位指令ROL以逻辑与指令AND及将字节型变量x的低四位(用十六进制数的形式显示了出来,并运用MASMFORWINDOWS软件逐步调试运行了改程序。
6>
通过以上四个程序的设计、调试、运行,了解、熟悉并掌握了分支程序的基本结构和设计以及分支程序上机运行和调试方法。
5、实验中存在问题及解决方法
程序调试中,对一些转换指令及其执行过程中的对标志位的影响不是很熟悉,导致有些程序片段看起来有些吃力,尤其在调试过程中;
在查看分析寄存器的存储状态时有些不太清楚。
2>
格式问题,对汇编程序编写的格式不太规范,导致一些基本简单的指令运行出错,比如在输入常量时,十六定制在教材学习中必须带上H,而在运行程序时,编写的程序中十六定制常量不能带有H。
3>
对教材中汇编程序的理论学习不扎实,很多指令原来没有完全掌握,导致在编写、运行程序时很多程序指令、执行结果、以及执行后的寄存器存储状态不太明白,一些执行过程没有完全理解透彻,以致在出现错误时很难找到原因。
六、教师评语
三、实验过程:
四、实验结论
五、实验中存在问题及解决方法