汇编语言实验报告模板
课程实验报告
实验名称: | |
姓 名: | |
学 号: | |
上课类型: | 平台课/专业课 |
日 期: |
一、实验内容
实验内容包含要进行什么实验,实验的目的是什么,实验用到的算法及其原理的简单介绍。
1.1实验
1.2实验
1.3实验
二、实验设计
若实验内容皆为指定内容,则此部分则可省略;若实验内容包括自主设计模型等内容,则需要在此部分写明设计思路、流程,并画出模型图并使用相应的文字进行描述。
三、实验环境及实验数据集
简单介绍实验环境和涉及的数据集
四、实验过程
实验过程包括在编写代码时一些需要注意的事项,可附代码片段进行说明;还应该包括在训练模型时进行的一些步骤、参数设置等内容。
注:为了代码片段尽量的美观、统一,建议附代码片段时只附加关键的片段,不要全部粘贴,并尽量使用下面提供的网站进行代码高亮等格式转换后再粘贴。
http://www.planetb.ca/syntax-highlight-word
4.1实验
4.2实验
4.3实验
五、实验结果
实验结果包括程序运行结果以及对结果的分析,尽量用图表展示实验结果,并且通过结果进行相关的分析。
5.1结果
5.2结果
5.3结果
六、实验心得体会
这部分主要包含自己做实验过程中遇到的困难以及解决办法,通过做实验自己有哪些收获和体会,以及不足等等。
七、参考文献
参考文献主要包含实验过程中涉及到的参考资料或者借鉴别人的材料等,如果没有可以不写。
八、附录
需要补充说明的内容,如无可略。
实验报告编写要求
1.正文要求小四号宋体,行间距1.5倍;
2.英文要求小四号Times New Roman;
3.在实验内容、实验过程、实验结果三部分需要针对当次实验不同的实验内容分别填写(模版以实验一为例),实验设计中如有必要也可以分开填写;
4.实验报告配图的每幅图应有编号和标题,编号和标题应位于图下方处,居中,中文用五号宋体;
5.表格应为三线表,每个表格应有编号和标题,编号和标题应写在表格上方正中,距正文段前0.5倍行距。表格中量与单位之间用“/”分隔,编号与标题中的中文用五号宋体;
关键词:语言模板,数学语言,独立思考
学生的数学语言表达能力应该从低年级开始就有意识地进行培养。在入学前, 通过前六年的积淀, 学生已经具备了一定的生活语言表达能力, 但在数学语言的积累方面还基本处于空白, 如何从生活语言顺利过渡到数学语言, 就需要教师提供必要的语言模板进行引领和示范。可以说语言模板是搭建生活语言到数学语言的桥梁, 是学生学习数学知识的重要工具, 在培养学生数学语言表达能力的过程中发挥着不可替代的作用。
在低年级的数学教学中, 比如一年级上册第一单元“数一数”, 表示大树的棵树, 我给予学生的语言模板是:一共有8棵树, 8 表示树的总棵树, 从而在说明物体的数量时渗透“总数”的概念。“分与合”单元, 学生要初步掌握用“部分数”和“总数”两个数学名词来说明一个数的分与合。以5 的分与合为例, 我提供给学生的语言模板是:5 可以分成1 和4 两个部分数, 1 和4 两个部分数合成总数5。这样通过对10 以内数的分与合的各种情况的叙述, 为学生建立“部———总关系”思想奠定了方法和语言基础。再如针对低年级学生的认知特点, “加法和减法”单元多以图画或图文结合的形式呈现问题情境。我不仅引导学生根据具体情境图寻找、提取、加工数学信息, 并用三句话提出加法或减法解答的数学问题, 而且在指导学生解决问题时, 始终坚持对学生进行抽象数量名称、概括数量关系、说清算法和算理等语言方面的训练。又如要解决“苹果树有5 棵, 梨树有4 棵, 苹果树和梨树一共有多少棵?”这个问题, 可以用以下的语言模板来说明解题思路:我是用加法来计算的。因为要求一共有多少棵果树, 就是把两个部分数合起来求总数, 所以用加法计算, 我列的算式是:5+4=9。这个算式表示苹果树的棵树加上梨树的棵树就等于两种果树的总棵树。从算法、算理、算式到数量关系式, 一气呵成。这样的语言模板帮助学生经历了把生活语言表述的数学问题, 抽象成纯数学语言表述的过程, 发展了学生的理性思维。各个年级解决问题的说理思路基本相似, 有了低年级语言模板训练的基础, 到了中高年级学生在问题解决方面的数学语言表达一定会更加纯熟。可以说从合理选择算法到说清算理, 不仅是学习进程中的必然要求, 而且是数学智慧不断成熟的标志。
除了在低年级的数学教学中, 语言模板使用得比较多以外, 对于其他年级, 当学习比较抽象或较难表述的数学知识和概念时, 也可以请语言模板来帮忙。如三年级上册“轴对称图形”一课, 学生需要对三个平面图形观察并动手操作来感知轴对称图形的特征。在学生自主探究后, 我先请他们说说自己的发现。学生一边操作一边说到了“折起来”、“完全重叠”等词, 我在学生发言的基础上适时引导:这个操作在数学上叫“对折”;“完全重叠了”在数学上称为“完全重合”。并将这两个数学名词板书在黑板上, 然后请学生用上刚学到的两个数学名词重新说说三个平面图形的特征, 学生基本都能表述得比较准确规范了。再如四年级上册“简单的周期”一课, 在描述情境图中盆花、彩灯、彩旗的排列规律时, 怎样使语言更加规范简洁呢?我给学生提供了这样的语言模板 (以盆花的排列规律为例) :盆花是按照每三盆为一组, 每组中按蓝花、黄花、红花的顺序依次重复排列的。清晰简洁的两句话将盆花的规律表述得一目了然, 学生仿照这样的语言模板再去表述彩灯和彩旗的规律就容易多了。
数据类型,运算符和简单的输入输出
姓名 王颖晶
班级 材料2班
学号 22140059 日期2015年3月
24日
指导老师 赵芳
1.实验目的
(1)掌握C语言数据类型,了解字符型数据和整形数据的内在关系。(2)掌握对各种数值型数据的正确输入方法。
(3)学会使用C的有关算数运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
(4)学会编写和运行简单的应用程序。
(5)进一步熟悉C程序的编辑,编译,连接和运行的过程。2.实验内容和步骤
(1)输入并运行教材第3章第4题给出的程序
(2)输入第3章第5题的程序 用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。问在键盘上如何输入?
(3)输入以下程序
①
② 将6,7行改为 m=i++; n=++j; ③ 程序改为 #include
Printf(“i =%d,j=%d,m=%d,n=%dn”,i,j,m,n);}(4)假如我国国民生产总值的年增长率为9%,计算十年后我国国民生产总值与现在相比增长多少百分比,编写程序。计算公式为:p=(1+r)^n r为年增长率,n为年数,p为与现在相比的倍数。
① 输入编好的程序,编译并运行。
② 年增长率不在项目中指定,改用scanf函数语句输入,分别输入%7,%8,%10,观察结果。
③ 在程序中增加printf函数语句,用来提示输入什么数据,说明输入的是什么数据。
心得体会
指导教师曾宪华实验时间: 2010 年10月日 学院通信与信息工程专业通信类
班级0101105学号2011210150姓名陈环宇 实验室s313
实验目的及要求:
(1)掌握选择结构程序设计,学会if语句嵌套的应用。
(2)以此程序掌握使用断点调试程序的方法。
实验题目:
实验内容及步骤:源程序(已修正)
操作步骤
a.打开C++,新建文件,输源程序。
b.进行编译和连接时,没有出现错误或者警告。
c.单击Go,输入a,b,c的值后,程序执行到断点①处,输入变量a,b,c,查看a,b,c的值。此时,变量的值与输入的值一致。
d.单击Go,程序运行到断点②处,运行显示d为49.81,此时方程有实根。
e.单击Go,运行到最后一个断点处,运行显示x1=-0.44,x2=-3.80,符合题目要求。f.单击Stop Debugging,调试完成。
运行结果示例
心得体会:
实验目的
1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。
2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。
3、掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。
实验内容
计算并输出1000以内的10个素数以及它们的和。
要求:
在程序内部加必要的注释。
由于偶数不是素数,可以不考虑对偶数的处理。
虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。
输出形式为:素数1+素数2+素数3+…+素数10=总和值。
算法描述流程图
Main函数:
判断素数:
源程序
#include
#include
int sushu(int n)/* 判断素数的函数 */
{
int t,i;
t=sqrt(n);
for(i=2;i1;i-=2)/* x为奇数时,做函数计算 */
{
n=sushu(i); /* 做判断素数的函数调用 */
( 励志天下 )
if(n!=0)/* 对素数的处理 */
{
a[j]=n;/* 把素数由大至小存入数组a[ ]中 */
j++;
if(j<11)
m+=n;/* 统计前10个素数之和 */
}
}
if(j<10)/* 当素数个数小于10个时,结果输出 */
{
for(i=0;i
{
n=a[i];
printf(“%d”,n);
printf(“+”);
}
printf(“2=”);
printf(“%d ”,m+2);
}
else for(i=0;i<10;i++)/* 当素数个数大于等于10个时,结果输出 */
{
n=a[i];
printf(“%d”,n);
if(i<9)
printf(“+”);
else
{
printf(“=”);
printf(“%d ”,m);
}
}
}
}
测试数据
分别输入1000、100、10测试。
运行结果
出现问题及解决方法
当素数个数小于10时的处理不够完善,考虑不够周全。把“+2”的处理做的太勉强。
程序过大,不够精简,无用文字太多。
学习耐心与细心不足,如scanf(“%d”,&n);中的“&”经常忘记。
编程思想不够发散,例如如何判断素数,只能想出2种方式(其中1种为参考教科书上内容);在今后学习中应更多的动脑,综合运用所学。
基本功不够,如清屏clrscr等函数用的不好,有时同样的问题多次犯,给实验课老师带来很大的麻烦。这说明我的知识不够广,有很多有用但不做考试要求的书中内容没有学好,认识程度不够深刻。就算以后C语言这门课程结束后,也应多看相关东西,多上机练习,才能真正从本质上提高自己。
物理实验报告 ·化学实验报告 ·生物实验报告 ·实验报告格式 ·实验报告模板
在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,以下是小编为大家整理分享的c语言实验报告分析总结。欢迎阅读。
c语言实验报告分析总结1
在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。
在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:
1.加深对课堂讲授内容的理解
课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去”掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。
2.熟悉程序开发环境、学习计算机系统的操作方法
一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓”环境”就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3.学习上机调试程序
完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难!
c语言实验报告分析总结2
一周的C语言实训,虽然时间略显仓促,但却让我学到了很多实际运用的技能!
一、心得与感想
首先,在实训中的第一步是编写功能较为单一的小程序,虽然是小程序,但所用的知识却都是我们本学期学习的重点知识。在做题的过程中让我们把这些知识复习了一遍,强化了知识!
其次,这次作中所碰到的题目,在实训中已经接触过,所我们都比较深知这些题目的要求和算法,因次在编写小程序时比较快,而且算法也是比较简化,运算准确。鉴次我明白很多编程题要经过多次编写修改与调试,才会得到最简略的算法。
再次,平时我们学C语言视乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们的将所学知识运用于解决实际问题的机会,让人更有激情,这就是编写软件的在雏形,也让我们感受到了编写软件程序的乐趣。但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用!
虽然我这次是编写一个菜单的程序,但是如果我么留心的话,我们身边有许多电子设备都是内置有程序的,我们也可以在此次专题实训过后,自行确定其他的专题进行编写程序,这样可以让我们的知识更加深化丰富!
这次实训似乎是对我巨大的考验,程序在不慌不忙的进行着,按照我自身的进度,提前完成是没有问题的,但是很多客观条件让我不得不在最后的时间里才上交的作业。每当我把程序写完以后,却由于每一台电脑的识别格式不一样而导致我所写的文件一次次的被损坏,尽管这样,我仍然没有放弃,最后还赶在截止时间到来之前上交了我的作业!
这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好,可是又不轻易的向老师询问,因为好像蛮简单,相信自己能够检查出来,所以我一般都是独立思考的完成的,只有少部分是在老师和与同学讨论下完成的。
在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。没能够使自己编写出来的程序等到想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。
一、、for(i=0;i T[2*d]=' Scanf(“%s”,&s)、#define ARR-SIZE 80; Inverse(char a); Str[i]=str[j]; 3、int f=1; 二、1、i<=n S+x[i] i2—i1+12、#include String strTemp[i] J++; 学院 标 准 实 验 报 告 (实验)课程名称 汇编语言与微机接口技术综合实验 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 (一)学生姓名:郫县英格拉姆 学 号:2014123456789 指导教师:皮皮怪 实验地点:主楼A2_412 实验时间:2017年4月25日星期二 一、实验室名称: 主楼A2_412机房 二、实验项目名称:汇编语言编程训练 三、实验学时:3学时 四、实验原理:(包括知识点,电路图,流程图) 知识点 (一)课后自学——使用DOSBox在win7 x64位下搭建汇编环境 1.软件安装 a.安装3DOSBox b.准备debug.exe,masm.exe,link.exe,edit.exe文件。2.使用 a.DOSBox安装完成后,打开,可发下它的提示符是:“Z:>”,这是DOSBox里的虚拟盘。我们需要更改到我们自己的盘符,如果直接更改的话,会提示你错误。首先需要mount到自己的目录。 b.比如我们准备将D:DEBUG作为我们自己的汇编测试目录,则执行“mount C D:DEBUG”命令,这样C盘符也就虚拟成了自己本地电脑的D:DEBUG目录。我们在DOSBox中切换到C盘符时,也就实际上切换到了D:DEBUG目录。c.将debug.exe,masm.exe,link.exe,edit.com放置于D:DEBUG目录下,我们就能在DOSBox下直接使用它们了。3.配置 上面我们为使用DOSBox,要mount到我们本地目录,但是我们每一次打开DOSBox都要进行这两步,有点麻烦,可以通过下面的操作来保存配置。a.开始->所有程序->DOSBox-0.74->Options->DOSBox 0.74 Options,在文本的最后位置找到“[autoexec]”: [autoexec] # Lines in this section will be run at startup.# You can put your MOUNT lines here.b.然后将下面的2条命令写在此处:第一条命令的作用是mount目录,第二条命令的作用是mount之后切换到D盘符: mount C D:DEBUG C: 知识点 (二)课堂讲述——相关知识介绍 1.生成可执行程序的过程 ·建立汇编源程序(*.asm) ·汇编源程序文件,生成目标文件(*.obj)、·连接目标文件,生成可执行文件(*.exe)·运行调试程序 2.汇编 假设masm.exe在D盘根目录下,编辑了一个名为demo.asm的源文件,则通过命令 D:>masm demo.asm;扩展名可以忽略,默认为asm类型 得到汇编结果,如下图所示: ·扩展名为*.lst的文件称为列表文件,该文件对于后续的调试十分有用。 关于列表文件(*.lst) 列表文件同时列出源程序和机器语言程序清单,并给出段表、段的大小及属性,以及用户定义的符号表、符号类型及属性,对于调试程序十分有用。3.连接 在生成了目标文件demo.obj以后,通过输入命令 D:>link demo.obj;LINK.EXE是连接程序,同样的,扩展名可以忽略,默认为obj类型 得到连接结果,如下图所示: 4.调试 a.关于DEBUG.EXE b.DEBUG.EXE的用法 在DOS的提示符下,如下键入:c.DEBUG.EXE的注意事项 d.本实验课需要的DEBUG指令 运行命令G、追踪命令T、继续命令P、显示内存单元内容命令D、退出命令Q 修改内存单元内容命令E、检查和修改寄存器内容的命令R 流程图 五、实验电路(本次实验无电路图) 六、实验内容:(介绍自己所选的实验内容) 实验内容一: 学习“第4章 顺序、分支、循环程序例子.ppt”,按照要求完成下列题目并给出实验结果(至少选择两个):我选择1、2 1、利用学号查学生的数学成绩表 在数据段中建立一个成绩表TABLE,表中的成绩按照学生学号从小到大的顺序存放。要查的学号存放在变量NUM中,查表的结果放在变量MATH中。(用XLAT指令进行查表) 2、无符号数排序 数据段的ARY数组中存放有10个无符号数,试找出其中最大者送入MAX单元。(用LOOP指令做循环) 实验内容二: 学习“第4 子程序设计例子(1).ppt”,用“堆栈传递参数”的方式编程并运行给出结果.将两个给定的二进制数(8位和16位)转换为ASCII码字符串。用堆栈传递参数,要求:分步骤给出堆栈状态和运行结果。 七、实验步骤:(编辑调试的过程)实验一: 题目1.利用学号查学生的数学成绩表 1、根据题目要求,建立汇编源程序,用Windows系统自带的记事本进行编辑,另存为projec1.asm,并保存至masm.exe所在目录中。 2、汇编源程序文件,生成目标文件project1.obj; 3、通过link命令连接目标文件,生成可执行文件project1.exe; 4、运行调试程序,键入debug project1.asm,参考LST文件,通过G命令、D命令进行调试,分析结果。(分析过程见报告第九部分)。题目2.无符号数排序 1、根据题目要求,建立汇编源程序,用Windows系统自带的记事本进行编辑,另存为projec2.asm,并保存至masm.exe所在目录中。 2、汇编源程序文件,生成目标文件project2.obj 3、通过link命令连接目标文件,生成可执行文件project2.exe 4、运行调试程序,参考LST文件,通过G命令、D命令进行调试,分析结果,(分析过程见报告第九部分)。 实验二: 题目:用“堆栈传递参数” 的方式编程,将两个给定的二进制数(8位和16位)转换为ASCII码字符串。 1.根据题目要求,建立汇编源程序,用Windows系统自带的记事本进行编辑,另存为projec4.asm,并保存至masm.exe所在目录中。 2.汇编源程序文件,生成目标文件project4.obj 3.通过link命令连接目标文件,生成可执行文件project4.exe 4.运行调试程序,通过G命令、D命令进行调试,分析结果(分析过程见报告第九部分)。 八、实验结果:(源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照)实验一 第一题 源代码及其注释如下: TITLE TABLE LOOKUP DATA SEGMENT;数据段 TABLE DB 01, 02, 03, 04, 05, 06, 07, 82, 09, 10 DB 11, 12, 13, 14, 15, 16, 17, 18, 19, 20;为了便于调试,把82之外的数据进行特殊处理,使其数值等于所在的位置 NUM DB 8;学号为8 MATH DB ? DATA ENDS STACK1 SEGMENT PARA STACK;堆栈段 DW 20H DUP(0)STACK1 ENDS COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX;装入DS MOV BX,OFFSET TABLE;BX指向表首地质 XOR AH,AH;AH清零 MOV AL,NUM;NUM值赋给AL DEC AL;因为实际学号从1开始 XLAT;查表 MOV MATH,AL;存结果 MOV AH,4CH INT 21H COSEG ENDS END START 运行结果介绍及截图、分析: 运行调试程序,通过G命令、D命令进行调试,分析结果。 查看PROJECT1.LST文件,可以分析出调试的方法,分析过程见图标记: 根据上述分析输入指令g 0013、d0015 l1进行调试,结果见下图: 结果分析:MATH中成绩为52h,对应十进制82,而在程序源代码中对成绩的定义情况如下,其中的学号为8对应的成绩确实为82: 符合要求,实验成功。 实验一:第二题 源代码及其注释如下: DATA SEGMENT ARY DB 01,16,02,03,04,05,06,07,08,09 MAX DB ? DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 BEGIN: MOV AX,DATA MOV DS,AX;装入DS MOV SI,OFFSET ARY;SI指向ARY第一个元素 MOV CX,9;CX做计数器 MOV AL,[SI];取第一个元素到AL LOP: INC SI;SI指向后一个元素 CMP AL,[SI];比较两个数 JAE BIGER;前元素>=后元素,则跳到BIGER进行处理 MOV AL,[SI];取较大数到AL BIGER: LOOP LOP;循环执行LOOP MOV MAX, AL;存最大数 MOV AH,4CH INT 21H CODE ENDS END BEGIN 运行结果介绍及截图、分析: 运行调试程序,通过G命令、D命令进行调试,分析结果。 查看PROJECT2.LST文件,可以分析出调试的方法,分析过程见图标记: 根据上述分析输入指令g 0019、d000a l1进行调试,结果见下图: MATH中成绩为10h,对应十进制数16,确实是我编写的十个数中的最大数: 符合要求,实验成功。 实验二:堆栈传递参数,转化ASCII码 代码及注释如下: DATA SEGMENT BIN1 DB 35H BIN2 DW 0AB48H ASCBUF DB 20H DUP(?)DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(65535);对应OFFFFH 便于查看内存单元时确定堆栈位置 STACK1 ENDS COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1 BEGIN: MOV AX,DATA MOV DS,AX XOR AX,AX;清零AX MOV AH,BIN1;第一个数据送AH PUSH AX;待转换数据压栈 MOV AX,8 PUSH AX;待转换位数压栈 LEA DI,ASCBUF PUSH DI;存放ASCII码首址压栈 CALL BINASC;调用转换子程序 MOV AX,BIN2;第二个数据送AX PUSH AX;待转换数据压栈 MOV AX,10H PUSH AX;待转换位数压栈 ADD DI,8 PUSH DI;DI+8压栈 CALL BINASC;调用转换子程序 MOV AH,4CH INT 21H BINASC PROC PUSH AX PUSH CX PUSH DX PUSH DI MOV BP,SP MOV DI,[BP+10];从堆栈取入口参数 MOV CX,[BP+12] MOV DX,[BP+14] LOP: ROL DX,1;LOP为将所给转化为ASCII的算法 MOV AL,DL AND AL,1ADD AL,30H MOV [DI],AL INC DI LOOP LOP POP DI POP DX POP CX POP AX RET 6;返回并从堆栈中弹出6个字节 BINASC ENDP COSEG ENDS END BEGIN 分析: 首先单步运行几条指令,通过d 00 查看内存单元状态,检测堆栈段等的设置是否成功: 空间看起来有问题:上面显示00的部分是设置的ASCBUF应该有用32个字节,截图显示是45个;下面的STACK1应该有64个字节,截图显示是54个,但后面全部执行完毕后结果是正确的。在网络上查询过后得知应该是软件的原因。 继续执行至将第一个待转换数据0035H压栈,查看内存单元,截图如下: 同样的,执行至待转换位数、存放ASCII码首址成功入栈,与上图相似,省去截图,直至调用转化子程序,执行完一系列入栈操作和取入口参数、数据位数、待转换数据操作: 进入标号为LOP的程序段,循环执行求ASCII码的算法,将数据一位一位地转化为ASCII码,循环过程中可以看到CX依次减1,减小至0时不再执行LOP循环: 继续执行至第一个数据转化结束,查看内存单元情况,与预期结果进行比较,第一个待转换数据35H=0011 0101B,其对应ASCII码确实与内存单元中显示相同,详见图片: 第二个待转换数据分析过程与第一个数据相同,转化结束后同样与预期结果进行比较: 第二个待转换数据AB48H=1010 1011 0100 1000B, 其对应ASCII码确实与内存单元中显示相同,详见图片: 九、结果分析和改进意见(完成每次留的问答题,以及实验过程中遇到的问题) 汇编语言编程作为低级语言,与高级语言相比,可读性不如高级语言,更易出错,调试更麻烦,但是逻辑性很强,更接近机器,分析起来很有意思,每一步都是很小的操作,最后能达到目的。 在堆栈传递参数的实验中,内存中显示00的部分是设置的ASCBUF,应该有用32个字节,截图显示是45个;下面的STACK1应该有64个字节,截图显示是54个,但后面全部执行完毕后结果是正确的。在网络上查询过后发现有很多相似的情况,应该是软件的原因。后期可以研究一下产生这种现象的具体原因和解决方案。 十、心得体会: 做实验很有趣,写报告很烦。在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王老师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~ 报告评分: 指导教师签字: 电 子 科 技 大 学 实 验 报 告 (二)学生姓名:郫县英格拉姆 学 号:2014123456789 指导教师:皮皮怪 实验地点:主楼A2_412 实验时间:2017年5月9日星期二 一、实验室名称: 主楼A2_411机房 二、实验项目名称:8259A中断控制器实验 三、实验学时:3学时 四、实验原理:(包括知识点,流程图) (一)知识点: (老师上课提的问题写在报告第九部分) 1.8259A的工作过程 (1)中断源在中断请求输入端IR0-IR7上产生中断请求 涉及问题:中断请求的触发方式有哪些? ·电平触发方式:用IR引脚上的有效高电平信号触发中断。常被用于需要重复执行当前中断服务程序的情况,直到IR信号变为无效。 ·边沿触发方式:采用IR输入信号的上升沿触发中断,常被用于不希望产生重复响应及中断请求信号是一个短暂脉冲的情况。 (2)中断请求被锁存在IRR中,并经IMR屏蔽,结果送优先权电路判优 涉及问题:IRR/IMR的数据是自动写入还是通过软件编程设定? ·IRR的数据是根据中断请求信号自动写入的(有中断请求的对应位为1,允许多个位为1,如果被响应对应位清零); ·IMR的数据是通过软件编程设定的(通过对某位或某几位置1屏蔽该位,使其不能进入优先级判别器) (3)优先权电路检出优先权最高的中断请求位,设置ISR的对应位(置1)涉及问题:中断判优的依据是什么?ISR是自动写入还是通过软件编程设定? ·IRR的数据是根据中断请求信号自动写入的(有中断请求的对应位为1,允许多个位为1,如果被响应对应位清零); ·IMR的数据是通过软件编程设定的(通过对某位或某几位置1屏蔽该位,使其不能进入优先级判别器) (4)8259A控制逻辑接受中断请求,向CPU输出INT信号 (5)CPU接受INT信号,进入两个INTA中断响应周期,第一个周期通知8259A做好响应准备,第二个周期8259A将响应的中断类型号输出到DB上 涉及问题:CPU中断响应过程中的“配套操作”有哪些? ·8259A接到来自CPU的第一个脉冲时,设置ISR并把IRR中的相应位复位。同时,8259A准备向数据总线发送中断向量。 ·在8259A发送中断向量的最后一个脉冲期间,如果是在自动结束中断方式下,在这个脉冲结束时复位ISR的相应位。在其他方式下,ISR相应位要由中断服务程序结束时发出的EOI命令来复位。 (6)CPU读取该中断类型号,转移到相应的中断处理程序 涉及问题:如何通过中断类型号找到中断处理程序? 2.8259A的命令字 (1)ICW1/OCW2/OCW3复用同一个地址(A0=0);剩下的命令字复用另一个地址(A0=1),在本系统中,复用地址分别是0FFE0H和0FFE1H,预置数类别顺序为先初始化命令字,再操作命令字,预置数设定顺序为下标顺序(见“第六章输入输出与中断-2-8259” P32) (2)0FFE0H用于ICW1,OCW2和OCW3,0FFE1H用于ICW2,ICW3,ICW4和OCW1。本次实验中,ICW3、OCW3不需要进行设定。 (3)本实验只需要用一片8259A进行中断控制,中断源采用单脉冲信号,中断触发方式属于边沿触发,且8086/8088系统必须设定ICW4,因此ICW1=00010011B=13H(4)本系统中,设定使用中断类型8来服务IR7边沿触发产生的中断,所以ICW2=00001000B=08H(5)对于单片8259A,不需要设定ICW3,而8086/8088系统需要确定ICW4。因此跳过ICW3的设定直接设定ICW4。在该实验中,我们使用全嵌套方式(最常用的也是默认的工作方式,只开放比当前中断优先级高的中断,且中断优先权的级别固定,按照IR0-IR7逐级次之。)和普通EOI方式(一般的中断结束方式,在中断程序返回前,输出中断结束命令把ISR当前优先级最高的对应位清零)操作,因此ICW4=00001001B=09H(6)对于OCW,假设使用OCW1来屏蔽除IR7外其它所有中断,这样OCW1=01111111B=7FH;选用普通EOI,则OCW2=00100000=20H 3.有关中断向量存储地址的形成说明 (1)ICW2是设置中断类型码的初始化命令字。其中,D7~D3是8086/8088系统中8259A的中断指针地址的高5位,D2~D0的值恒为0。 (2)本系统的中断序号和中断地址对应表如下: 4.有关ICW4的设置说明 ICW4的位定义如下: ·其中,D7-D5位总是为0 ·在IBM PC/XT系统中,BUF位设定为1,M/S设定为0 ·普通中断结束方式用于完全嵌套情况下,8259每得到一次EOI命令,将把ISR中已经置位的各位中优先级最高的位复位,以此类推。·因此,在本例中,ICW4=00001001B=09H 5.有关OCW2的设置说明 OCW2用于控制中断结束,其格式如下: ·其中,R为优先权控制位,R=1为循环优先权,R=0为固定优先权 ·SL位决定了OCW2中L2,L1,L0是否有效,SL=1则有效,否则无效 ·EOI为中断结束命令位,在非自动中断结束命令下,EOI=1使得中断服务寄存器ISR中具有最高优先权的IS复位,EOI=0则该位无效。·在本实验中,OCW2=0010000=20H 6.七段数码管显示相关知识 数码管字形口地址:0FFDCH,字形代码如下表所示: 上述不同的代码实际上就是使得每只数码管中八只发光二极管的不同“点亮”组合,从而形成所谓不同的“字形”。 数码管字位口地址:0FFDDH,字位代码如下表所示: 上述不同的代码实际上就是“选通”某一片数码管工作的片选信号,显然,对应选通信号高电平有效。 字位1对应逻辑箱最左边那只数码管,字位6对应最右边那只数码管。7.七段数码管显示电路图(ppt)8.Dais微机接口实验箱操作说明(ppt)9.Windows平台操作方法(ppt)10.LED平台操作方法说明(ppt) (二)流程图:(用visio画的) 五、实验电路: 1、实验参考电路及接线说明(8259部分)(红色连线为补充连线) ·SP插孔和8259A的IR7插孔相连,同时将SP插孔和8259A的IR6插孔也连接起来,提供两个中断源 ·连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G与位于地址线A0引出孔所在位置下方的使能控制输出端G作对应连接。8259的CS端连138译码器的Y0孔。 ·将8259的单元总线接口D0-D7,用8芯排线或8芯扁平线与数据总线单元D0-D7任一接口相连。 2、电路图拍照: 六、实验内容:(介绍自己所选的实验内容) 编制程序,利用8259芯片的IRi作为中断源,产生多级中断,系统显示中断号,比如:IR7作为中断源则显示7。 七、实验步骤: 1.点击桌面上“Intel8088 微机实验系统”图标; 2.选择通信串口和速率; 3.检查有无错误对话框,是否正确连接仪器; 4.进入dais集成开发环境; 5.选择本次实验对应的实验指导; 6.调出连线指导,按照实验原理电路图,在实验箱上进行连线; 7.调出参考代码,进行修改,编写本次实验的源程序,源代码及注释按ppt要求,放在实验结果部分; 8.将源程序编译、连接、装载入仪器,若出错则进行修改,直到装载成功; 9.将LED平台复位,然后点击绿色按钮运行; 八、实验结果:(源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照) (一)源程序代码及中文注释: CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 3400H H8: JMP P8259 ZXK EQU 0FFDCH;数字管字形码端口地址 ZWK EQU 0FFDDH;数字管字位码端口地址 LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;LED DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H BUF DB ?,?,?,?,?,?;预留6个字节空间存放的是需要显示的字符,如123456 PORT0 EQU 0FFE0H;偶地址 PORT1 EQU 0FFE1H;奇地址 P8259: CLI;关中断 CALL WP;初始化显示“P.” MOV AX,OFFSET INT8359 MOV BX,0038H;6号中断向量表 MOV [BX],AX MOV BX,003AH MOV AX,0000H MOV [BX],AX MOV AX,OFFSET INT8259 MOV BX,003CH;7号中断向量表 MOV [BX],AX MOV BX,003EH MOV AX,0000H MOV [BX],AX CALL FOR8259;命令字的设置 MOV SI,0000H STI;开中断 CALL WP CON8: CALL DIS JMP CON8;-----INT8259:CLI;初始化8259 IR7 MOV BX,OFFSET BUF MOV BYTE PTR [BX+SI],07H ;INC SI CMP SI,0007H JZ X59 XX59: MOV AL,20H;OCW2 MOV DX,PORT0 OUT DX,AL MOV CX,0050H XXX59: PUSH CX CALL DIS POP CX LOOP XXX59 POP CX MOV CX,3438H PUSH CX STI IRET X59: MOV SI,0000H CALL WP JMP XX59;-----INT8359:CLI;初始化8259 IR6 MOV BX,OFFSET BUF MOV BYTE PTR [BX+SI],06H ;INC SI CMP SI,0007H JZ Y59 YY59: MOV AL,20H;OCW2=0010000=20H 一般EOI命令,全嵌套方式 MOV DX,PORT0 OUT DX,AL MOV CX,0050H YYY59: PUSH CX CALL DIS POP CX LOOP YYY59 POP CX MOV CX,3438H PUSH CX STI IRET Y59: MOV SI,0000H CALL WP JMP YY59;============================== FOR8259:MOV AL,13H;ICW1=00010011B=13H 单脉冲 边沿触发 MOV DX,PORT0 OUT DX,AL MOV AL,08H;ICW2=00001000B=08H 中断类型8 MOV DX,PORT1 OUT DX,AL MOV AL,09H;ICW4=400001001B=09H 全嵌套方式,普通EOI方式 OUT DX,AL MOV AL,00H;OCW1=00000000B=00H 不屏蔽中断 OUT DX,AL RET ;--------------------------- WP: MOV BUF,11H;初始化显示“P.” MOV BUF+1,10H MOV BUF+2,10H MOV BUF+3,10H MOV BUF+4,10H MOV BUF+5,10H RET ;- DIS: MOV CL,20H;字位码指向左侧第一个数码管 MOV BX,OFFSET BUF DIS1: MOV AL,[BX];取第一个需要显示的字符 PUSH BX MOV BX,OFFSET LED;BX指向字形码表的表头地址 XLAT;查表得到需要显示的字符对应的字形码,并装入AL POP BX MOV DX,ZXK OUT DX,AL;将要显示的字形码输出到字形码端口 MOV AL,CL MOV DX,ZWK OUT DX,AL;将要显示的字位码输出到字位码端口 PUSH CX MOV CX,0100H DELAY: LOOP $;延时程序 POP CX CMP CL,01H;检测是否显示到最右侧的数码管 JZ EXIT;如果是,退出 INC BX SHR CL,1 JMP DIS1;否则继续显示下一个 EXIT: MOV AL,00H MOV DX,ZWK OUT DX,AL;一个都不显示 RET;返回主程序;--------------------------CODE ENDS END H8 (二)运行结果及分析 1、运行结果介绍: 不按弹片时,初始化显示“P.”; 短按弹片时,显示“6”; 长按弹片时,先显示“6”,再显示“7”。 2、照片:将关键部分合并到一张图片,便于观察,如下图: 3、结果分析: 不按弹片时,初始化显示“P.”; 短按弹片时,有IR6和IR7两个中断源,由于OCW2设置为固定优先级,IR0优先级最高,依次递减,IR6优先被处理,因此显示“6”,由于短按,处理完IR6之后IR7中断信号源已经消失; 长按弹片时,有IR6和IR7两个中断源,IR6优先被处理,因此显示“6”,后处理IR7,因此之后显示变为“7”。 九、结果分析和改进意见(完成每次留的问答题,以及实验过程中遇到的问题) (一)上课留的问答题 1、pc机有几块8259,端口地址是多少 (1)早期的微型计算机使用单片的8259A,如早期IBM PC/XT只有一个8259A,端口地址分别是20H、21H。(2)后期,设计师们意识到这是不够的,到了IBM PC/AT,有2个8259A,一个称作Master,另一个称作Slave,Slave以基连的方式连接在Master上,如今大多数PC都有两个8259A。课件相关知识: 2、ret和iret的区别 (1)ret是过程调用的返回指令,一般位于子程序的最后,如果是段内返回,则从堆栈中弹出一个字送IP,如果是段间返回,则从堆栈中弹出两个字送IP和CS,不需要恢复标志寄存器; (2)iret是中断返回指令,是中断服务程序的最后一条指令,负责恢复断点并恢复标志寄存器的内容。 3、中断和过程调用的区别 (1)中断是随机事件或异常事件引起,调用则是事先已在程序中安排好 ; (2)响应中断请求不仅要保护断点地址,还要保护FLAGS标志寄存器的内容; (3)调用指令在指令中直接给出子程序入口地址,而中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中。 4、短按和长按的区别 (1)短按,则中断时间短,处理完IR6中断后,IR7的中断信号源已经不存在了; (2)长按,则中断时间长,处理完IR6中断后,IR7源仍然存在,继续处理IR7中断。 (二)实验过程中遇到的问题 一定要正确运用开关中断的指令,为了避免其他中断服务影响当前中断服务程序的运行,可以在当前程序开始运行的时候加上CLI指令。在当前程序运行结束的时候,为了不影响其他中断服务程序的正常请求和响应,应该加上STI指令开放中断。做实验很有趣,写报告很烦。 在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王老师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~ 可以把中断源增加至3个、4个等,让数码管的显示变化更复杂有趣。 十一、心得体会: 做实验很有趣,写报告很烦。 在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王老师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~ 报告评分: 指导教师签字: 电 子 科 技 大 学 实 验 报 告 (三)学生姓名:郫县英格拉姆 学 号:2014123456789 指导教师:皮皮怪 实验地点:主楼A2_412 实验时间:2017年5月16日星期二 一、实验室名称: 主楼A2_411机房 二、实验项目名称:8253时钟中断计时实验 三、实验学时:3学时 四、实验原理:(包括知识点,流程图) (一)知识点: (老师上课提的问题写在报告第九部分) (一)有关8253芯片 8253基本工作方式就是对CLK时钟脉冲进行计数。CLK脉冲可以是均匀的、连续的、周期精确的,也可以是不均匀的、断续的、周期不定的。 无论8253工作于何种方式,当计数器减1到0时,在OUT引脚上必定有电平或脉冲输出,OUT引脚输出的信号可以是方波、电平或脉冲等,由工作方式决定。 8253每个计数器都可以选择6种工作方式之一进行工作。在控制字中进行设定。 二进制方式计数的最小值是0001H,最大值为0000H,即216=65536 二-十进制(BCD码)计数的最小值是0001H,最大值为0000H,即10^4=10000 (二)计数器和定时器的异同点 相同之处:都需要设定计数初值,在每个输入脉冲的作用下进行减1计数,减到0后产生一个OUT输出。 不同之处: 1.定时器方式下减到0后会自动恢复初始值进行下一轮减1计数;计数器方式下减到0后必须有新的外界因素的重触发才开始新一轮减1计数。 2.定时器方式下的输入时钟CLK必须是等周期的;计数器方式下的输入时钟CLK不一定是等周期的。 (三)关于选择分频信号源的说明 【目标】产生一个1s周期的方波信号(方式3)和1s延时的信号(方式0)1s周期对应的频率是1HZ,当计数初值=信号频率时得到1s周期的信号输出 T0-T7中,最小的非小数频率(HZ为单位)计数初值为76.8K 【结论】任意一个通道的计数器最大值<76.8K,无法一次设定好需要的初值 解决方案(该系统CPU8088/8086采用主频为14.3818MHz)1.用多个定时/计数通道进行分频 2.对单个定时/计数通道进行设置,设定一定倍数的周期信号引发显示刷新(不是引发显示中断) (二)流程图:(用visio画的) 五、实验电路: 1、实验参考电路及接线说明(红色连线为补充连线) ·8253的GATE接+5V(方式3)或者开关(方式0)。 ·8253的CLK插孔接分频器74LS393的T0-T7插孔(建议选择76.8KHZ)·8253的OUT输出端与8259的IR7输入端相连。 ·连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G与位于地址线A0引出孔所在位置下方的使能控制输出端G作对应连接,该端的寻址范围为0FFE0H~0FFFFH。8253、8259的CS孔与138译码器的Y0孔相连。 ·将8259、8253的单元总线接口D0~D7用8芯排线或8芯扁平线与数据总线单元D0~D7任一接口相连(要接两根数据线)。 2、电路图拍照: 六、实验内容:(介绍自己所选的实验内容)利用8253的多个通道产生周期方波信号(方式3),该信号作为8259芯片的中断源,用边沿触发方式产生中断(单级中断),从而在七段数码管上构成一个“秒表”(显示范围为0-9或者00-59)。要求正确设置参数和采用适当的编程技巧,使得七段数码管的显示间隔为1s。 七、实验步骤: 1.点击桌面上“Intel8088 微机实验系统”图标; 2.选择通信串口和速率; 3.检查有无错误对话框,是否正确连接仪器; 4.进入dais集成开发环境; 5.选择本次实验对应的实验指导; 6.调出连线指导,按照实验原理电路图,在实验箱上进行连线; 7.调出参考代码,进行修改,编写本次实验的源程序,源代码及注释按ppt要求,放在实验结果部分; 8.将源程序编译、连接、装载入仪器,若出错则进行修改,直到装载成功; 9.将LED平台复位,然后点击绿色按钮运行; 八、实验结果:(源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照) (一)源程序代码及中文注释: CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 3400H H8: JMP P8259 ZXK EQU 0FFDCH;数字管字形码端口地址 ZWK EQU 0FFDDH;数字管字位码端口地址 LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;LED DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H BUF DB ?,?,?,?,?,?;预留6个字节空间存放的是需要显示的字符,如123456 IR_COUNT DB 0 SC_0 EQU BUF+5 PORT0 EQU 0FFE0H;8253计数器0 & 8259偶地址 PORT1 EQU 0FFE1H;8253计数器1 & 8259奇地址 PORT2 EQU 0FFE2H;8253计数器2 PC EQU 0FFE3H;8253控制寄存器地址 P8259: CLI CALL WP;初始化显示“P.” MOV AX,OFFSET IR7_BEGIN;取IR7中断服务程序偏移地址 MOV BX,003CH MOV [BX],AX;写中断向量表IP MOV BX,003EH MOV AX,0000H MOV [BX],AX;写中断向量表CS CALL FOR8253;8253初始化 CALL FOR8259;8259初始化 MOV SI,0000H STI CON8: CALL DIS JMP CON8;-----IR7_BEGIN: CLI INC BYTE PTR[IR_COUNT] CMP BYTE PTR[IR_COUNT],4JB IR7_E MOV BYTE PTR[IR_COUNT],0 CALL INCS0 IR7_E: MOV AL,20H;OCW2,EOI命令 MOV DX,PORT0 OUT DX,AL MOV BX, OFFSET BUF POP CX MOV CX,OFFSET CON8;也显示当前BUF中的数据 PUSH CX STI IRET INCS0: INC BYTE PTR[SC_0] CMP BYTE PTR[SC_0],10 JB INCS0_CARRY MOV BYTE PTR [SC_0], 0 INCS0_CARRY: RET ;============================== FOR8259:MOV AL,13H;ICW1单级中断,需要ICW4,不需要ICW 3MOV DX,PORT0 OUT DX,AL MOV AL,08H;ICW2 MOV DX,PORT1 OUT DX,AL MOV AL,09H;ICW4,特殊全嵌套,缓冲方式,8086 OUT DX,AL MOV AL,7FH;OCW1,中断屏蔽操作字,屏蔽除IR7之外的所有中断 OUT DX,AL RET ;============================== FOR8253:MOV DX,PC MOV AL,36H;00110110 计数器0,先低后高,方式3,二进制 OUT DX,AL MOV DX,PORT0 MOV AL,00H;低8位 OUT DX,AL MOV AL,4BH;高8位 OUT DX,AL ;--------------------------- WP: MOV BUF,11H;初始化显示“P.” MOV BUF+1,10H MOV BUF+2,10H MOV BUF+3,10H MOV BUF+4,10H MOV BUF+5,10H RET ;-DIS: MOV CL,20H MOV BX,OFFSET BUF DIS1: MOV AL,[BX];取第一个需要显示的字符 PUSH BX MOV BX,OFFSET LED;BX指向字形码表的表头地址 XLAT;查表得到需要显示的字符对应的字形码,并装入AL POP BX MOV DX,ZXK OUT DX,AL;将要显示的字形码输出到字形码端口 MOV AL,CL MOV DX,ZWK OUT DX,AL;将要显示的字位码输出到字位码端口 PUSH CX MOV CX,0100H DELAY: LOOP $;延时程序 POP CX CMP CL,01H;检测是否显示到最右侧的数码管 JZ EXIT;如果是,退出 INC BX SHR CL,1 JMP DIS1;否则继续显示下一个 EXIT: MOV AL,00H MOV DX,ZWK OUT DX,AL;一个都不显示 RET;返回主程序 ;--------------------------CODE ENDS END H8 (二)运行结果 1、运行结果介绍: 运行程序,数码管左侧显示“P.”不变,右侧按照1s的时间间隔变化,依次显示数字“0”~“9”,实现秒表,很好的完成了实验要求。 2、照片:将关键部分合并到一张图片,便于观察,如下图: 九、结果分析和改进意见(完成每次留的问答题,以及实验过程中遇到的问题) (一)上课留的问答题 1、在实验中,先初始化8253还是8259?为什么? 先初始化8253。因为8253和8259存在地址复用,8259的初始化程序中存在指令会干扰8253的初始化。2.PC机上有无8253,地址分配如何? 有8253。PC/XT微机系统中使用一片8253,T0、T1、T2、控制口地址依次是:40H、41H、42H、43H。三个定时/计数器各自的用途是: 定时/计数器T0:用于日历时钟计时; 定时/计数器T1:用于DRAM内存定时刷新; 定时/计数器T2:用于扬声器发声。 十一、心得体会: 做实验很有趣,写报告很烦。 在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王老师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~ 报告评分: 指导教师签字: 电 子 科 技 大 学 实 验 报 告 (四)学生姓名:郫县英格拉姆 学 号:2014123456789 指导教师:皮皮怪 实验地点:主楼A2_412 实验时间:2017年5月23日 周二 一、实验室名称: 主楼A2_411机房 二、实验项目名称:8255A并行可编程接口芯片实验 三、实验学时:3学时 四、实验原理:(包括知识点,流程图) (一)知识点: (老师上课提的问题写在报告第九部分) 1.有关8255的工作方式 方式0——基本输入/输出方式,不用联络信号,不用中断。A组和B组都可以作为输入/输出,而且输出是锁存的。 方式1——选通输入输出方式,与方式0相比,它的主要特点是当A口、B口工作于方式1时,C口的某些I/O线被定义为A口和B口在方式1下工作时所需的联络信号线,这些线已经定义,不能由用户改变。A口工作于方式1输出时,用PC3,PC6和PC7作联络线。C口剩余的两个I/O线PC4和PC5工作于方式0。该方式下输入输出均带锁存器。 2、实验题目2注意事项 【分析】PA口驱动LED,因此作为输出,工作在方式1,需要正确连接和设置PC3/PC6/PC7三个联络信号,如下图所示: 由于8255采用中断方式传送数据,故INTEA=1(PC6=1),需要通过C口置位/复位控制字来设定;INTRA由PC3连接8259A的IR,引发中断;PC7未用。3、8255A的方式选择控制字格式 4、8255A通道C置位/复位控制字格式 (二)流程图:(用visio画的) 五、实验电路: 1、实验参考电路及接线说明(红色连线为补充连线) ·用PC6连接单脉冲发生器模拟外设应答信号,PC3连接8259的IR端(单级中断) 2、电路图拍照: 六、实验内容:(介绍自己所选的实验内容)设置8255的A组工作在方式1,用中断的方式驱动PA口8只发光二极管,用PC6连接单脉冲发生器模拟外设应答信号,PC3连接8259的IR端(单级中断),每按一次单脉冲就点亮一个LED(从左往右或者从右往左依次点亮)。 七、实验步骤: 1.点击桌面上“Intel8088 微机实验系统”图标; 2.选择通信串口和速率; 3.检查有无错误对话框,是否正确连接仪器; 4.进入dais集成开发环境; 5.选择本次实验对应的实验指导; 6.调出连线指导,按照实验原理电路图,在实验箱上进行连线; 7.调出参考代码,进行修改,编写本次实验的源程序,源代码及注释按ppt要求,放在实验结果部分; 8.将源程序编译、连接、装载入仪器,若出错则进行修改,直到装载成功; 9.将LED平台复位,然后点击绿色按钮运行; 八、实验结果:(源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照) (一)源程序代码及中文注释: CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 3400H H8: JMP P8259 PORT0 EQU 0FFE0H;偶地址 PORT1 EQU 0FFE1H;奇地址 PA EQU 0FFD8H;A口 PB EQU 0FFD9H;B口 PC EQU 0FFDAH;C口 PCTL EQU 0FFDBH;控制口 P8259: CLI MOV AX,OFFSET INT8259;7号中断向量表 MOV BX,003CH MOV [BX],AX MOV BX,003EH MOV AX,0000H MOV [BX],AX CALL FOR8259;设置命令字 MOV SI,0000H STARTP1: MOV DX,PCTL MOV AL,0A8H;SET 1010 1000 OUT DX,AL MOV AL,0DH;SET 0000 110 1OUT DX,AL MOV BX,0H STI CON8: CALL DIS JMP CON8;-----INT8259:CLI SHL BX,1; INC BX; MOV AL,20H MOV DX,PORT0 OUT DX,AL;OCW2,EOI命令 STI IRET ;-----FOR8259:MOV AL,13H;ICW1 MOV DX,PORT0 OUT DX,AL MOV AL,08H;ICW 2MOV DX,PORT1 OUT DX,AL MOV AL,09H;ICW4,特殊全嵌套,缓冲方式,8086 OUT DX,AL MOV AL,00H;OCW1 不屏蔽 OUT DX,AL RET ;-DIS: MOV AX, 0FFFFH XOR AX, 0FFFFH MOV DX, PA;A口 OUT DX, AL JMP DIS;--------------------------CODE ENDS END H8 (二)运行结果及拍照 1、运行结果介绍: 开始运行后,发光二极管不会亮,每按一次弹片,产生一个单脉冲,就点亮一只发光二极管,从左向右依次点亮。 2、照片:将关键部分合并到一张图片,便于观察,如下图: 九、结果分析和改进意见(完成每次留的问答题,以及实验过程中遇到的问题) (一)上课留的问答题 1、PC上有几片8255,是如何与扬声器和打印机连接的? 有一片8255。 与打印机连接情况如下: 8255A工作在方式1,作为打印机的接口,其电路连接如图所示,采用中断方式传送数据。地址为0C0H、0C2H、0C4H、0C6H。 与扬声器连接情况如下: PB0输出扬声器发声控制信号到8253的GATE2端,PB0=1,允许8253计数器2产生音调信号; PB1输出扬声器发声信号。PB1=1允许8253输出的音调信号加到扬声器驱动电路。 (二)实验过程中遇到的问题 一开始怎么调试是卡死状态,很绝望,后来发现居然是电脑前的板子连接的是其他的电脑。 十一、心得体会: 做实验很有趣,写报告很烦。 在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王老师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~ 报告评分: 指导教师签字: 电 子 科 技 大 学 实 验 报 告 (五)学生姓名:郫县英格拉姆 学 号:2014123456789 指导教师:皮皮怪 实验地点:主楼A2_412 实验时间:2017年6月7日 周三 一、实验室名称: 主楼A2_411机房 二、实验项目名称:交通灯综合实验 三、实验学时:3学时 四、实验原理:(包括知识点,流程图) (一)知识点: (老师上课提的问题写在报告第九部分) (一)实验涉及的子程序 1.显示子程序 2.控制子程序 3.黄灯闪烁5次子程序 (二)中断服务程序的功能 调用显示子程序并更新显示缓冲区数据(实现倒数计数,时间间隔1s) (三)主程序功能 1.初始化8255,8253,8259,显示缓冲区以及写中断向量 2.往8255的端口送数,驱动发光二极管模拟十字路口交通灯工作状态 3.调用控制子程序以及黄灯闪烁5次子程序 4.循环操作第2、3步 (四)编程提示 8255部分 1.该实验中,8255选择工作方式0; 2.由于十字路口的交通灯在东西方向或南北方向的6只发光二极管的工作状态完全一致,因此,12只灯可分为两组,用PA或PB一个端口即可进行模拟; 3.用PC口一个位连接8253的GATE,作为中断显示数据的控制开关; 4.该实验只需要正确设置方式选择控制字寄存器; 5.黄灯闪烁的处理,实际上就是往对应的黄灯位置0后再置1,循环5次; 8253部分 1.该实验中,8253选择工作方式3,产生周期性的方波信号; 2.正确选择CLK信号源,正确计算初始值,使得方波信号周期为1s或者接近1s; 3.由于GATE信号为高电平时才会产生方波信号,因此用PC口某位连接GATE,通过不同的输出进行8253工作方式3的开关信号; 8259部分 1.只需要编写单级中断,中断服务程序主要完成倒计时的功能; 2.正确设置命令字寄存器和正确填写中断向量; 3.中断信号源为8253输出的方波信号 (二)流程图:(老师ppt自带流程图) 五、实验电路: 1、实验参考电路及接线说明(红色连线为补充连线) ·138译码器的Y0对应的地址范围为0FFE0H--0FFE3H,覆盖了8253和8259的寄存器地址,因此,8253和8259的CS端均连Y0。 ·138译码输入端ABC分别连A2、A3、A4,使能控制输入端G与位于地址线A0引出孔所在位置下方的使能控制输出端G作对应连接。 ·将8253和8259的单元总线接口D0--D7,与数据总线单元D0--D7任一接口相连。 ·将8255的PA或PB口连接12只发光二极管(只用端口的6位)·将8255的PC口某位连接8253的某GATE ·将8253的某OUT连接8259的某IR ·将8253的某CLK连接393分频器某输出(T0--T7中任意一个,自选) 2、电路图拍照: 六、实验内容:(介绍自己所选的实验内容) 用8255A驱动12只发光二极管,模拟十字路口交通灯工作状态。用8253的方式3产生连续的方波信号,利用该信号的上升沿触发中断,作为8259的中断请求信号,在七段数码管上显示红绿灯余下时间(间隔一秒显示刷新,倒数计数,当计数值为0时红绿灯进行切换,绿灯转换为红灯之前,黄灯闪烁5次) 七、实验步骤: 1.点击桌面上“Intel8088 微机实验系统”图标; 2.选择通信串口和速率; 3.检查有无错误对话框,是否正确连接仪器; 4.进入dais集成开发环境; 5.选择本次实验对应的实验指导; 6.调出连线指导,按照实验原理电路图,在实验箱上进行连线; 7.调出参考代码,进行修改,编写本次实验的源程序,源代码及注释按ppt要求,放在实验结果部分; 8.将源程序编译、连接、装载入仪器,若出错则进行修改,直到装载成功; 9.将LED平台复位,然后点击绿色按钮运行; 八、实验结果:(源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照) (一)源程序代码及中文注释: CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 3400H H8: JMP START P0 EQU 0FFE0H;(1)8253 计数器0(2)用于ICW1,OCW2和OCW3 P1 EQU 0FFE1H;(1)8253 计数器1(2)用于ICW2,ICW3,ICW4和OCW1 P2 EQU 0FFE2H;8253 计数器2 P3 EQU 0FFE3H;8253 写方式字的端口 PA EQU 0FFD8H;8255 A口 PB EQU 0FFD9H;8255 B口 PC EQU 0FFDAH;8255 C口 PCTL EQU 0FFDBH;8255 控制口地址 ZXK EQU 0FFDCH;数码管字形口地址 ZWK EQU 0FFDDH;字位口地址 LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H BUF DB ?,?,?,?,?,? YELLOW EQU 11111110B GREEN EQU 11111101B RED EQU 11111011B NULL EQU 11111111B PATH DW 0;道路通行方向, 0东西方向, 1南北方向 TIME DB 0;通行剩余时间 START: CLI MOV AX,OFFSET INT8259;设置中断 MOV BX,003CH MOV [BX],AX;放入服务程序偏移量 MOV BX,003EH MOV AX,0000H;放入系统中断向量区段基地址0000 MOV [BX],AX CALL WP;显示9 CALL INIT8253;初始化8253 CALL INIT8255;初始化8255 CALL INIT8259;初始化8259 STI CON8: CALL DIS JMP CON8;-------8259中断服务子程序-------INT8259: CLI;关中断 MOV CL,TIME;显示10 DEC CL MOV BUF,CL JNZ L1 MOV DX,PC MOV AL,00H OUT DX,AL;PC停止计时 MOV DX,PA ADD DX,PATH CALL FLASH;闪烁 MOV AL,RED OUT DX,AL;变为红灯 XOR PATH,1;另一方向通行 XOR DX,1 MOV AL,GREEN OUT DX,AL;变为绿灯 MOV CL,10;定时器初始化 MOV DX,PC MOV AL,01H OUT DX,AL;PC开始计时 L1: MOV TIME,CL;倒计时 CALL DIS;显示 MOV AL,20H;中断退出 MOV DX,P0 OUT DX,AL;OCW2 OEI POP BX MOV BX, OFFSET CON8 PUSH BX STI IRET ;-------闪烁子程序(DX)-------FLASH: PUSH CX MOV CL, 5 FLASH1: MOV AL,YELLOW;初始AL黄 OUT DX,AL;黄灯亮 CALL DELAY1;长延时 MOV AL,NULL;清空AL OUT DX,AL;(黄)灯灭 CALL DELAY1;长延时 LOOP FLASH1 POP CX RET ;-------8253初始化---------INIT8253: MOV AL,00110110B;选计数器0,从而后面是P0,先低后高字节,选方式3 MOV DX,P3 OUT DX,AL;写控制字 MOV AL,00H;低8位为0 MOV DX,P0;计数器0 OUT DX,AL MOV AL,4BH;高8位为4B,这样393连接T5或T6,应该会每秒一个脉冲 OUT DX,AL MOV AL,10010110B;选计数器2,直接传低8位,方式3,添加有效果 MOV DX,P3 OUT DX,AL;写控制字 MOV AL,04H MOV DX,P2;计数器2 OUT DX,AL RET ;-------8255初始化-------INIT8255: MOV AL,10000000B;控制字 A口,方式0,输出;B口方式0,输出;C口,输出 MOV DX,PCTL OUT DX,AL MOV DX,PA;A口 MOV AL,GREEN;初始状态,绿灯 OUT DX,AL MOV DX,PB;B口 MOV AL,RED;初始状态,红灯 OUT DX,AL;初始状态,LV灯 MOV TIME,10;初始化计时时间 MOV DX,PC;C口 MOV AL,01H;PC输出始终是1,连到8253GATE OUT DX,AL;输出到C口,开始计时 RET ;----------8259初始化-------INIT8259: MOV AL,13H;ICW1 【汇编语言实验报告模板】推荐阅读: 汇编语言课程设计模版07-10 C语言实验报告模版07-10 c语言实验报告总结07-13 c语言课内实验报告四09-13 语言调查报告09-07 语言社会调查报告06-08 小学语言文字验收报告06-02 语言文字工作达标报告06-05 员工制度汇编06-12 清洁生产资料汇编05-26汇编语言实验报告模板 篇8