电子科大计算机学院汇编语言程序设计实验报告_第1页
电子科大计算机学院汇编语言程序设计实验报告_第2页
电子科大计算机学院汇编语言程序设计实验报告_第3页
电子科大计算机学院汇编语言程序设计实验报告_第4页
电子科大计算机学院汇编语言程序设计实验报告_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

..电子科技大学计算机科学与工程学院标准实验报告〔实验〕课程名称汇编语言与微机接口技术综合实验电子科技大学教务处制表电子科技大学实验报告〔一〕学生:郫县英格拉姆学号:89指导教师:皮皮怪实验地点:主楼A2_412实验时间:2017年4月25日星期二一、实验室名称:主楼A2_412机房二、实验工程名称:汇编语言编程训练三、实验学时:3学时四、实验原理:〔包括知识点,电路图,流程图〕知识点〔一〕课后自学——使用DOSBox在win7x64位下搭建汇编环境1.软件安装a.安装3DOSBoxb.准备debug.exe,masm.exe,link.exe,edit.exe文件。2.使用a.DOSBox安装完成后,翻开,可发下它的提示符是:"Z:\>〞,这是DOSBox里的虚拟盘。我们需要更改到我们自己的盘符,如果直接更改的话,会提示你错误。首先需要mount到自己的目录。b.比方我们准备将D:\DEBUG作为我们自己的汇编测试目录,那么执行"mountCD:\DEBUG〞命令,这样C盘符也就虚拟成了自己本地电脑的D:\DEBUG目录。我们在DOSBox中切换到C盘符时,也就实际上切换到了D:\DEBUG目录。c.将debug.exe,masm.exe,link.exe,edit.放置于D:\DEBUG目录下,我们就能在DOSBox下直接使用它们了。3.配置上面我们为使用DOSBox,要mount到我们本地目录,但是我们每一次翻开DOSBox都要进展这两步,有点麻烦,可以通过下面的操作来保存配置。开场->所有程序->DOSBox-0.74->Options->DOSBox0.74Options,在文本的最后位置找到"[autoexec]〞:[autoexec]#Linesinthissectionwillberunatstartup.#YoucanputyourMOUNTlineshere.b.然后将下面的2条命令写在此处:第一条命令的作用是mount目录,第二条命令的作用是mount之后切换到D盘符:mountCD:\DEBUGC:知识点〔二〕课堂讲述——相关知识介绍1.生成可执行程序的过程·建立汇编源程序〔*.asm〕·汇编源程序文件,生成目标文件〔*.obj〕、·连接目标文件,生成可执行文件(*.exe)·运行调试程序2.汇编假设masm.exe在D盘根目录下,编辑了一个名为demo.asm的源文件,那么通过命令D:\>masmdemo.asm;扩展名可以忽略,默认为asm类型得到汇编结果,如以下图所示:·扩展名为*.lst的文件称为列表文件,该文件对于后续的调试十分有用。关于列表文件〔*.lst〕列表文件同时列出源程序和机器语言程序清单,并给出段表、段的大小及属性,以及用户定义的符号表、符号类型及属性,对于调试程序十分有用。3.连接在生成了目标文件demo.obj以后,通过输入命令D:\>linkdemo.obj;LINK.EXE是连接程序,同样的,扩展名可以忽略,默认为obj类型得到连接结果,如以下图所示:4.调试a.关于DEBUG.EXEb.DEBUG.EXE的用法在DOS的提示符下,如下键入:c.DEBUG.EXE的考前须知d.本实验课需要的DEBUG指令运行命令G、追踪命令T、继续命令P、显示存单元容命令D、退出命令Q修改存单元容命令E、检查和修改存放器容的命令R流程图五、实验电路〔本次实验无电路图〕六、实验容:〔介绍自己所选的实验容〕实验容一:学习"第4章顺序、分支、循环程序例子.ppt〞,按照要求完成以下题目并给出实验结果〔至少选择两个〕:我选择1、21、利用学号查学生的数学成绩表在数据段中建立一个成绩表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、运行调试程序,键入debugproject1.asm,参考LST文件,通过G命令、D命令进展调试,分析结果。〔分析过程见报告第九局部〕。题目2.无符号数排序根据题目要求,建立汇编源程序,用Windows系统自带的记事本进展编辑,另存为projec2.asm,并保存至masm.exe所在目录中。汇编源程序文件,生成目标文件project2.obj通过link命令连接目标文件,生成可执行文件project2.exe运行调试程序,参考LST文件,通过G命令、D命令进展调试,分析结果,〔分析过程见报告第九局部〕。实验二:题目:用"堆栈传递参数〞的方式编程,将两个给定的二进制数(8位和16位)转换为ASCII码字符串。1.根据题目要求,建立汇编源程序,用Windows系统自带的记事本进展编辑,另存为projec4.asm,并保存至masm.exe所在目录中。2.汇编源程序文件,生成目标文件project4.obj3.通过link命令连接目标文件,生成可执行文件project4.exe4.运行调试程序,,通过G命令、D命令进展调试,分析结果〔分析过程见报告第九局部〕。八、实验结果:〔源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照〕实验一第一题源代码及其注释如下:TITLETABLELOOKUPDATASEGMENT;数据段TABLEDB01,02,03,04,05,06,07,82,09,10DB11,12,13,14,15,16,17,18,19,20;为了便于调试,把82之外的数据进展特殊处理,使其数值等于所在的位置NUMDB8;学号为8MATHDB"DATAENDSSTACK1SEGMENTPARASTACK;堆栈段DW20HDUP(0)STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AX;装入DSMOVBX,OFFSETTABLE;BX指向表首地质XORAH,AH;AH清零MOVAL,NUM;NUM值赋给ALDECAL;因为实际学号从1开场XLAT;查表MOVMATH,AL;存结果MOVAH,4CHINT21HCOSEGENDSENDSTART运行结果介绍及截图、分析:运行调试程序,通过G命令、D命令进展调试,分析结果。查看PROJECT1.LST文件,可以分析出调试的方法,分析过程见图标记:根据上述分析输入指令g0013、d0015l1进展调试,结果见以下图:结果分析:MATH中成绩为52h,对应十进制82,而在程序源代码中对成绩的定义情况如下,其中的学号为8对应的成绩确实为82:符合要求,实验成功。实验一:第二题源代码及其注释如下:DATASEGMENTARYDB01,16,02,03,04,05,06,07,08,09MAXDB"DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1BEGIN:MOVAX,DATAMOVDS,AX;装入DSMOVSI,OFFSETARY;SI指向ARY第一个元素MOVCX,9;CX做计数器MOVAL,[SI];取第一个元素到ALLOP:INCSI;SI指向后一个元素CMPAL,[SI];比拟两个数JAEBIGER;前元素>=后元素,那么跳到BIGER进展处理MOVAL,[SI];取较大数到ALBIGER:LOOPLOP;循环执行LOOPMOVMAX,AL;存最大数MOVAH,4CHINT21HCODEENDSENDBEGIN运行结果介绍及截图、分析:运行调试程序,通过G命令、D命令进展调试,分析结果。查看PROJECT2.LST文件,可以分析出调试的方法,分析过程见图标记:根据上述分析输入指令g0019、d000al1进展调试,结果见以下图:MATH中成绩为10h,对应十进制数16,确实是我编写的十个数中的最大数:符合要求,实验成功。实验二:堆栈传递参数,转化ASCII码代码及注释如下:DATASEGMENTBIN1DB35HBIN2DW0AB48HASCBUFDB20HDUP(")DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(65535);对应OFFFFH便于查看存单元时确定堆栈位置STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1BEGIN:MOVAX,DATAMOVDS,AXXORAX,AX;清零AXMOVAH,BIN1;第一个数据送AHPUSHAX;待转换数据压栈MOVAX,8PUSHAX;待转换位数压栈LEADI,ASCBUFPUSHDI;存放ASCII码首址压栈CALLBINASC;调用转换子程序MOVAX,BIN2;第二个数据送AXPUSHAX;待转换数据压栈MOVAX,10HPUSHAX;待转换位数压栈ADDDI,8PUSHDI;DI+8压栈CALLBINASC;调用转换子程序MOVAH,4CHINT21HBINASCPROCPUSHAXPUSHCXPUSHDXPUSHDIMOVBP,SPMOVDI,[BP+10];从堆栈取入口参数MOVCX,[BP+12]MOVDX,[BP+14]LOP:ROLDX,1;LOP为将所给转化为ASCII的算法MOVAL,DLANDAL,1ADDAL,30HMOV[DI],ALINCDILOOPLOPPOPDIPOPDXPOPCXPOPAXRET6;返回并从堆栈中弹出6个字节BINASCENDPCOSEGENDSENDBEGIN分析:首先单步运行几条指令,通过d00查看存单元状态,检测堆栈段等的设置是否成功:空间看起来有问题:上面显示00的局部是设置的ASCBUF应该有用32个字节,截图显示是45个;下面的STACK1应该有64个字节,截图显示是54个,但后面全部执行完毕后结果是正确的。在网络上查询过后得知应该是软件的原因。继续执行至将第一个待转换数据0035H压栈,查看存单元,截图如下:同样的,执行至待转换位数、存放ASCII码首址成功入栈,与上图相似,省去截图,直至调用转化子程序,执行完一系列入栈操作和取入口参数、数据位数、待转换数据操作:进入标号为LOP的程序段,循环执行求ASCII码的算法,将数据一位一位地转化为ASCII码,循环过程中可以看到CX依次减1,减小至0时不再执行LOP循环:继续执行至第一个数据转化完毕,查看存单元情况,与预期结果进展比拟,第一个待转换数据35H=00110101B,其对应ASCII码确实与存单元中显示一样,详见图片:第二个待转换数据分析过程与第一个数据一样,转化完毕后同样与预期结果进展比拟:第二个待转换数据AB48H=1010101101001000B,其对应ASCII码确实与存单元中显示一样,详见图片:九、结果分析和改良意见〔完成每次留的问答题,以及实验过程中遇到的问题〕汇编语言编程作为低级语言,与高级语言相比,可读性不如高级语言,更易出错,调试更麻烦,但是逻辑性很强,更接近机器,分析起来很有意思,每一步都是很小的操作,最后能到达目的。在堆栈传递参数的实验中,存中显示00的局部是设置的ASCBUF,应该有用32个字节,截图显示是45个;下面的STACK1应该有64个字节,截图显示是54个,但后面全部执行完毕后结果是正确的。在网络上查询过后发现有很多相似的情况,应该是软件的原因。后期可以研究一下产生这种现象的具体原因和解决方案。十、心得体会:做实验很有趣,写报告很烦。在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王教师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~报告评分:指导教师签字:电子科技大学实验报告〔二〕学生:郫县英格拉姆学号:89指导教师:皮皮怪实验地点:主楼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=20H3.有关中断向量存储地址的形成说明〔1〕ICW2是设置中断类型码的初始化命令字。其中,D7~D3是8086/8088系统中8259A的中断指针地址的高5位,D2~D0的值恒为0。〔2〕本系统的中断序号和中断地址对应表如下:4.有关ICW4的设置说明ICW4的位定义如下:·其中,D7-D5位总是为0·在IBMPC/XT系统中,BUF位设定为1,M/S设定为0·普通中断完毕方式用于完全嵌套情况下,8259每得到一次EOI命令,将把ISR中已经置位的各位中优先级最高的位复位,以此类推。·因此,在本例中,ICW4=00001001B=09H5.有关OCW2的设置说明OCW2用于控制中断完毕,其格式如下:·其中,R为优先权控制位,R=1为循环优先权,R=0为固定优先权·SL位决定了OCW2中L2,L1,L0是否有效,SL=1那么有效,否那么无效·EOI为中断完毕命令位,在非自动中断完毕命令下,EOI=1使得中断效劳存放器ISR中具有最高优先权的IS复位,EOI=0那么该位无效。·在本实验中,OCW2=0010000=20H6.七段数码管显示相关知识数码管字形口地址: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平台复位,然后点击绿色按钮运行;八、实验结果:〔源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照〕〔一〕源程序代码及中文注释:CODESEGMENTASSUMECS:CODE,DS:CODE,ES:CODEORG3400HH8:JMPP8259ZXKEQU0FFDCH;数字管字形码端口地址ZWKEQU0FFDDH;数字管字位码端口地址LEDDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;LEDDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3HBUFDB",",",",",";预留6个字节空间存放的是需要显示的字符,如123456PORT0EQU0FFE0H;偶地址PORT1EQU0FFE1H;奇地址P8259:CLI;关中断CALLWP;初始化显示"P.〞MOVAX,OFFSETINT8359MOVBX,0038H;6号中断向量表MOV[BX],AXMOVBX,003AHMOVAX,0000HMOV[BX],AXMOVAX,OFFSETINT8259MOVBX,003CH;7号中断向量表MOV[BX],AXMOVBX,003EHMOVAX,0000HMOV[BX],AXCALLFOR8259;命令字的设置MOVSI,0000HSTI;开中断CALLWPCON8:CALLDISJMPCON8;------------------------------------INT8259:CLI;初始化8259IR7MOVBX,OFFSETBUFMOVBYTEPTR[BX+SI],07H;INCSICMPSI,0007HJZX59XX59:MOVAL,20H;OCW2MOVDX,PORT0OUTDX,ALMOVCX,0050HXXX59:PUSHCXCALLDISPOPCXLOOPXXX59POPCXMOVCX,3438HPUSHCXSTIIRETX59:MOVSI,0000HCALLWPJMPXX59;------------------------------------INT8359:CLI;初始化8259IR6MOVBX,OFFSETBUFMOVBYTEPTR[BX+SI],06H;INCSICMPSI,0007HJZY59YY59:MOVAL,20H;OCW2=0010000=20H一般EOI命令,全嵌套方式MOVDX,PORT0OUTDX,ALMOVCX,0050HYYY59:PUSHCXCALLDISPOPCXLOOPYYY59POPCXMOVCX,3438HPUSHCXSTIIRETY59:MOVSI,0000HCALLWPJMPYY59;==============================FOR8259:MOVAL,13H;ICW1=00010011B=13H单脉冲边沿触发MOVDX,PORT0OUTDX,ALMOVAL,08H;ICW2=00001000B=08H中断类型8MOVDX,PORT1OUTDX,ALMOVAL,09H;ICW4=400001001B=09H全嵌套方式,普通EOI方式OUTDX,ALMOVAL,00H;OCW1=00000000B=00H不屏蔽中断OUTDX,ALRET;---------------------------WP:MOVBUF,11H;初始化显示"P.〞MOVBUF+1,10HMOVBUF+2,10HMOVBUF+3,10HMOVBUF+4,10HMOVBUF+5,10HRET;--------------------------------DIS:MOVCL,20H;字位码指向左侧第一个数码管MOVBX,OFFSETBUFDIS1:MOVAL,[BX];取第一个需要显示的字符PUSHBXMOVBX,OFFSETLED;BX指向字形码表的表头地址XLAT;查表得到需要显示的字符对应的字形码,,并装入ALPOPBXMOVDX,ZXKOUTDX,AL;将要显示的字形码输出到字形码端口MOVAL,CLMOVDX,ZWKOUTDX,AL;将要显示的字位码输出到字位码端口PUSHCXMOVCX,0100HDELAY:LOOP$;延时程序POPCXCMPCL,01H;检测是否显示到最右侧的数码管JZEXIT;如果是,退出INCBXSHRCL,1JMPDIS1;否那么继续显示下一个EXIT:MOVAL,00HMOVDX,ZWKOUTDX,AL;一个都不显示RET;返回主程序;--------------------------CODEENDSENDH8〔二〕运行结果及分析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,如早期IBMPC/XT只有一个8259A,端口地址分别是20H、21H。〔2〕后期,设计师们意识到这是不够的,到了IBMPC/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个等,让数码管的显示变化更复杂有趣。十一、心得体会:做实验很有趣,写报告很烦。在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王教师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~报告评分:指导教师签字:电子科技大学实验报告〔三〕学生:郫县英格拉姆学号:89指导教师:皮皮怪实验地点:主楼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平台复位,然后点击绿色按钮运行;八、实验结果:〔源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照〕〔一〕源程序代码及中文注释:CODESEGMENTASSUMECS:CODE,DS:CODE,ES:CODEORG3400HH8:JMPP8259ZXKEQU0FFDCH;数字管字形码端口地址ZWKEQU0FFDDH;数字管字位码端口地址LEDDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;LEDDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3HBUFDB",",",",",";预留6个字节空间存放的是需要显示的字符,如123456IR_COUNTDB0SC_0EQUBUF+5PORT0EQU0FFE0H;8253计数器0&8259偶地址PORT1EQU0FFE1H;8253计数器1&8259奇地址PORT2EQU0FFE2H;8253计数器2PCEQU0FFE3H;8253控制存放器地址P8259:CLICALLWP;初始化显示"P.〞MOVAX,OFFSETIR7_BEGIN;取IR7中断效劳程序偏移地址MOVBX,003CHMOV[BX],AX;写中断向量表IPMOVBX,003EHMOVAX,0000HMOV[BX],AX;写中断向量表CSCALLFOR8253;8253初始化CALLFOR8259;8259初始化MOVSI,0000HSTICON8:CALLDISJMPCON8;------------------------------------IR7_BEGIN:CLIINCBYTEPTR[IR_COUNT]CMPBYTEPTR[IR_COUNT],4IR7_EMOVBYTEPTR[IR_COUNT],0CALLINCS0IR7_E:MOVAL,20H;OCW2,EOI命令MOVDX,PORT0OUTDX,ALMOVBX,OFFSETBUFPOPCXMOVCX,OFFSETCON8;也显示当前BUF中的数据PUSHCXSTIIRETINCS0:INCBYTEPTR[SC_0]CMPBYTEPTR[SC_0],10INCS0_CARRYMOVBYTEPTR[SC_0],0INCS0_CARRY:RET;==============================FOR8259:MOVAL,13H;ICW1单级中断,需要ICW4,不需要ICW3MOVDX,PORT0OUTDX,ALMOVAL,08H;ICW2MOVDX,PORT1OUTDX,ALMOVAL,09H;ICW4,特殊全嵌套,缓冲方式,8086OUTDX,ALMOVAL,7FH;OCW1,中断屏蔽操作字,屏蔽除IR7之外的所有中断OUTDX,ALRET;==============================FOR8253:MOVDX,PCMOVAL,36H;00110110计数器0,先低后高,方式3,二进制OUTDX,ALMOVDX,PORT0MOVAL,00H;低8位OUTDX,ALMOVAL,4BH;高8位OUTDX,AL;---------------------------WP:MOVBUF,11H;初始化显示"P.〞MOVBUF+1,10HMOVBUF+2,10HMOVBUF+3,10HMOVBUF+4,10HMOVBUF+5,10HRET;--------------------------------DIS:MOVCL,20HMOVBX,OFFSETBUFDIS1:MOVAL,[BX];取第一个需要显示的字符PUSHBXMOVBX,OFFSETLED;BX指向字形码表的表头地址XLAT;查表得到需要显示的字符对应的字形码,并装入ALPOPBXMOVDX,ZXKOUTDX,AL;将要显示的字形码输出到字形码端口MOVAL,CLMOVDX,ZWKOUTDX,AL;将要显示的字位码输出到字位码端口PUSHCXMOVCX,0100HDELAY:LOOP$;延时程序POPCXCMPCL,01H;检测是否显示到最右侧的数码管JZEXIT;如果是,退出INCBXSHRCL,1JMPDIS1;否那么继续显示下一个EXIT:MOVAL,00HMOVDX,ZWKOUTDX,AL;一个都不显示RET;返回主程序;--------------------------CODEENDSENDH8〔二〕运行结果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:用于扬声器发声。十一、心得体会:做实验很有趣,写报告很烦。在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王教师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~报告评分:指导教师签字:电子科技大学实验报告〔四〕学生:郫县英格拉姆学号:89指导教师:皮皮怪实验地点:主楼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平台复位,然后点击绿色按钮运行;八、实验结果:〔源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照〕〔一〕源程序代码及中文注释:CODESEGMENTASSUMECS:CODE,DS:CODE,ES:CODEORG3400HH8:JMPP8259PORT0EQU0FFE0H;偶地址PORT1EQU0FFE1H;奇地址PAEQU0FFD8H;A口PBEQU0FFD9H;B口PCEQU0FFDAH;C口PCTLEQU0FFDBH;控制口P8259:CLIMOVAX,OFFSETINT8259;7号中断向量表MOVBX,003CHMOV[BX],AXMOVBX,003EHMOVAX,0000HMOV[BX],AXCALLFOR8259;设置命令字MOVSI,0000HSTARTP1:MOVDX,PCTLMOVAL,0A8H;SET10101000OUTDX,ALMOVAL,0DH;SET00001101OUTDX,ALMOVBX,0HSTICON8:CALLDISJMPCON8;------------------------------------INT8259:CLISHLBX,1;INCBX;MOVAL,20HMOVDX,PORT0OUTDX,AL;OCW2,EOI命令STIIRET;------------------------------------FOR8259:MOVAL,13H;ICW1MOVDX,PORT0OUTDX,ALMOVAL,08H;ICW2MOVDX,PORT1OUTDX,ALMOVAL,09H;ICW4,特殊全嵌套,缓冲方式,8086OUTDX,ALMOVAL,00H;OCW1不屏蔽OUTDX,ALRET;--------------------------------DIS:MOVAX,0FFFFHXORAX,0FFFFHMOVDX,PA;A口OUTDX,ALJMPDIS;--------------------------CODEENDSENDH8〔二〕运行结果及拍照1、运行结果介绍:开场运行后,发光二极管不会亮,每按一次弹片,产生一个单脉冲,就点亮一只发光二极管,从左向右依次点亮。2、照片:将关键局部合并到一图片,便于观察,如以下图:九、结果分析和改良意见〔完成每次留的问答题,以及实验过程中遇到的问题〕〔一〕上课留的问答题PC上有几片8255,是如何与扬声器和打印机连接的?有一片8255。与打印机连接情况如下:8255A工作在方式1,作为打印机的接口,其电路连接如下图,采用中断方式传送数据。地址为0C0H、0C2H、0C4H、0C6H。与扬声器连接情况如下:PB0输出扬声器发声控制信号到8253的GATE2端,PB0=1,允许8253计数器2产生音调信号;PB1输出扬声器发声信号。PB1=1允许8253输出的音调信号加到扬声器驱动电路。〔二〕实验过程中遇到的问题一开场怎么调试是卡死状态,很绝望,后来发现居然是电脑前的板子连接的是其他的电脑。十一、心得体会:做实验很有趣,写报告很烦。在大三下学期,保研考研找实习最忙的时候,要写这么多报告,很难受。但是万幸王教师很漂亮,讲话又好听,我超喜欢她的。如果她直接教汇编理论课我一定好好听~~~报告评分:指导教师签字:电子科技大学实验报告〔五〕学生:郫县英格拉姆学号:89指导教师:皮皮怪实验地点:主楼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平台复位,然后点击绿色按钮运行;八、实验结果:〔源程序代码,必要的中文注释,以及运行结果,包括截图或者拍照〕〔一〕源程序代码及中文注释:CODESEGMENTASSUMECS:CODE,DS:CODE,ES:CODEORG3400HH8:JMPSTARTP0EQU0FFE0H;〔1〕8253计数器0〔2〕用于ICW1,OCW2和OCW3P1EQU0FFE1H;〔1〕8253计数器1〔2〕用于ICW2,ICW3,ICW4和OCW1P2EQU0FFE2H;8253计数器2P3EQU0FFE3H;8253写方式字的端口PAEQU0FFD8H;8255A口PBEQU0FFD9H;8255B口PCEQU0FFDAH;8255C口PCTLEQU0FFDBH;8255控制口地址ZXKEQU0FFDCH;数码管字形口地址ZWKEQU0FFDDH;字位口地址LEDDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3HBUFDB",",",",","YELLOWEQU11111110BGREENEQU11111101BREDEQU11111011BNULLEQU11111111BPATHDW0;道路通行方向,0东西方向,1南北方向TIMEDB0;通行剩余时间START:CLIMOVAX,OFFSETINT8259;设置中断MOVBX,003CHMOV[BX],AX;放入效劳程序偏移量MOVBX,003EHMOVAX,0000H;放入系统中断向量区段基地址0000MOV[BX],AXCALLWP;显示9CALLINIT8253;初始化8253CALLINIT8255;初始化8255CALLINIT8259;初始化8259STICON8:CALLDISJMPCON8;-------8259中断效劳子程序-------INT8259:CLI;关中断MOVCL,TIME;显示10DECCLMOVBUF,CLJNZL1MOVDX,PCMOVAL,00HOUTDX,AL;PC停顿计时MOVDX,PAADDDX,PATH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论