辽宁工程技术大学上机实验报告1.docx
《辽宁工程技术大学上机实验报告1.docx》由会员分享,可在线阅读,更多相关《辽宁工程技术大学上机实验报告1.docx(12页珍藏版)》请在冰豆网上搜索。
辽宁工程技术大学上机实验报告1
辽宁工程技术大学上机实验报告
课程名称
计算机硬件基础
实验题目
简单程序设计
院系
软件学院
专业
嵌入式软件
班级
嵌软12-2
姓名
伊鹏
学号
1220030224
实验日期
2014-11-16
实验
目的
1.熟练掌握宏汇编程序设计的思想。
2.掌握顺序程序设计的思想及方法。
3.熟练掌握分支程序的结构。
4.掌握分支程序设计的思想、方法及上机调试过程。
实验
准备
1.8086/8088宏汇编指令及伪指令。
2.汇编语言程序设计的步骤。
3.顺序程序设计的思想和方法。
4.分支程序设计的思想和方法。
实验
进度
本次共有3个练习,完成3个。
实验
内容
【练习1】编写一个程序,计算表达式(XY-Z)/X的值,其中:
X、Y、Z均为16位带符号数,存放在数据段中,要求将表达式的计算结果存放在数据段中的RESULT起始的单元中。
(1)实现方法
(2)程序代码
aasegment
xdw?
ydw?
zdw?
resultdw?
aaends
bbsegment
assumecs:
bb,ds:
aa
start:
movax,aa
movds,ax
movax,x
imuly
movcx,ax
movbx,dx
movax,z
cwd
subcx,ax
sbbbx,dx
idivx
movresult,ax
movah,4ch
int21h
bbends
endstart
【练习2】设数据区中NUM1、NUM2字节单元中存放的是两个无符号数,试编写程序完成下述功能之一的操作:
(1)如果两个数均为偶数,则两个数分别加1后送入DA1、DA2字节单元中;
(2)如果一个为偶数,一个为奇数,则奇数送入DA1,偶数送入DA2字节单元中;
(3)如果两个数均为奇数,则两个数分别送入DA1、DA2字节单元中;
(1)实现方法
(2)程序代码
DATASSEGMENT
NUM1DB?
NUM2DB?
DA1DB?
DA2DB?
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVAL,NUM1
MOVAH,NUM2
TESTAL,01H
JNZJ1
TESTAH,01H
JNZJ21
INCAL
INCAH
MOVDA1,AL
MOVDA2,AH
JMPEXIT
J21:
MOVDA1,AH
MOVDA2,AL
JMPEXIT
J1:
TESTAH,01H
JNZJ22
MOVDA1,AL
MOVDA2,AH
JMPEXIT
J22:
MOVDA1,AL
MOVDA2,AH
EXIT:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
【练习3】在内存BUFFER单元中存有10个8位数,试编程找出其中的最大值及最小值,并放在指定的存储单元MAX和MIN中。
(1)实验方法
利用类似c语言中”起泡法“的方法逐一比较找到最大最小值。
(2)程序代码
DATASEGMENT
BUFDB10,?
10DUP(?
)
MINDB?
MAXDB?
COUNTDW09H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUF
INCSI
MOVAL,BUF
MOVCX,COUNT
FMAX:
CMPAL,[SI]
JGA
MOVAL,[SI]
A:
ADDSI,1
LOOPFMAX
MOVMAX,AL
LEASI,BUF
ADDSI,1
MOVAL,BUF
MOVCX,COUNT
FMIN:
CMPAL,[SI]
JLB
MOVAL,[SI]
B:
ADDSI,1
LOOPFMIN
MOVMIN,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验
分析
日
【练习1】
(1)利用编辑成编辑器完成保存连接以及调试工作。
(2)进行调试,用反汇编命令u,进行反汇编。
e指令给x,y,z赋值
利用U命令观察内容如下,表明DS=14d0H;变量X的起始地址为DX=0000H;变量Y的起始地址为DX=0002H;变量Z的起始地址为DX=0004H;存放结果的RESULT变量的起始地址为DX=0006H。
通过键盘录入X=0004H,Y=0006H,Z=0002H并运行:
(3)用运行指令g从起始地址14D1:
0000开始到14D1:
0021暂停
通过E命令将X、Y、Z值录入后,并通过G命令运行后,数据区1446H:
0000H连续8个字节分别存放0004H(X),0006H(Y),0002H(Z),0005H(结果)。
(4)用d指令查看数据段的内容。
(5)实验问题和解决方案
实验中在执行反汇编命令u的时候没有注意出现中断指令,所以出现错误。
运行指令g没办法执行,后来仔细查看才发现g后面需要有“=”连接。
【练习二】
(1)利用编辑成编辑器完成保存连接以及调试工作
(2)进行调试,用反汇编命令u,进行反汇编,用e指令赋值。
利用U命令观察内容如下,表明DS=14d0H;变量NUM1的起始地址为DX=0000H;变量NUM2的起始地址为DX=0001H;存放结果的DA1变量的起始地址为DX=0002H;DA1变量的起始地址为DX=0003H。
(3)用运行指令g从起始地址14D1:
0000开始到14D1:
0045暂停
(4)用d指令查看数据段的内容。
(5)实验问题和解决方法。
在执行d指令查看数据段内容的时候显示错误检查后发现原来是起始地址错写成了14D1:
0000.因为执行指令d是要查看数据段的所以应该指向数据段的起始地址。
【练习3】
(1)利用编辑成编辑器完成保存连接以及调试工作
(2)进行调试,用反汇编命令u,进行反汇编,用e指令赋值。
利用U命令观察内容如下,表明DS=14d0H;数据区BUFFER的起始地址为DX=0000H;存放结果的MIN变量的起始地址为DX=000AH;MAX的起始地址为DX=000BH。
E指令输入是个数据,执行结果如上图。
(3)用运行指令g从起始地址14D1:
0000开始到14D1:
0045暂停
(4)用d指令查看数据段的内容。
运行后数据区14d0H:
0000H开始的连续10个字节存放数据01H、03H、02H、06H、05H、07H、08H、09H、04H、0aH,其后连续2个字节存放结果最小值01H和最大值0aH。
(5)实验问题和解决方法
在输入数据的时候没有考虑到十六进制数输入了00.10这样错误的数据。
因为是十六进制数所以改为00.1A。
实验
总结
【实验1】
1.存在问题
编写程序的时候在一开始定义未知数的时候直接给出了数据,这样在运行的时候直接运行给定的数据被限定了,所以后来改成了问号,这样在运行程序的时候赋值也容易了。
2.实验结论
通过对数据段的数据定义,利用DOS系统功能调用方法实现了求表达式(XY-Z)/X的值。
3.收获和体会
这是第一个计算机硬件上机实验,通过这次试验使我们所学的知识得到活学活用,我学会了使用汇编集成器运行和调试。
更锻炼了动手操作能力。
【实验2】
1.存在问题
根据题目要求编写的时候由于题目是分条件的,所以一开始编写的时候容易混淆,不知道到哪里用JNZ转移。
后来通过看书分清了个转移指令的用法,才是程序能够正确运行。
2实验结论
通过对数据段的数据定义,利用DOS系统功能调用方法实现了判断一个数是奇数还是偶数。
3.收获和体会
通过这个实验理解并学会运用了标志位转移指令以及比较指令。
通过编辑代码学会比较两数奇偶性并判断。
【实验3】
1,.存在问题
在编写程序中由于要用到跳转指令,循环指令,比较指令等。
容易混淆以及不知道怎么应用,还好在同学的帮助以及老师的帮助下完成了这个程序。
2.实验结论
通过对数据段的数据定义,利用DOS系统功能调用方法实现了查找已知数据区的最大值和最小值。
3.心得和体会
通过和同学的交流以及请教老师我学会了运用不同的指令完成这个实验。
掌握了利用DOS系统功能调用方法实现了在已知数据区查找最大值和最小值。
教师
评语