您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 钟计算机综合实践1-5
四川大学网络教育学院实践课程报告实践课程计算机综合实践校外学习中心专业电气工程及其自动化层次专升本年级10秋学生姓名学号2013年9月18日实验一熟悉、使用DEBUG调试工具一.实验目的:1.了解并逐步熟悉汇编语言的编辑方法及特点.2.复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。3.掌握汇编语言的编辑、汇编及连接的过程。4.了解并逐步掌握运用DEBUG进行调试汇编语言程序。二.实验内容:1.运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。2.运用MASM﹒EXE文件进行汇编,修改发现的各种语法错误,直至正确,形成*.OBJ文件。3.运用文件进行连接,形成*.EXE文件。4.仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。5.运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。6.再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。程序清单:多字节非压缩型BCD数除法(88754/6=14792)DATASEGMENTADB8,8,7,5,4BDB6CDB5DUP(0)NEQU5DATAENDSCODESEGMENTASSUMECS:CODE;DS:DATA;ES:DATA,STARTMOVAX,DATAMOVDS,AXMOVES,AXCLDLEASI,ALEBDI,CMOVCX,NMOVAH,0LP1:LODSBAADDIVBSTOSBLOOPLP1MOVCX,NLEADI,CLP2:MOVDL,[DI]MOVAH,2开始INT21HDECDI设置被除数、商的地址指针LOOPLP2设置单位除法次数计数器MOVAH,4CHINT21H取被除数一位作十进制调整CODE:ENDSENDSTART作字节除法、存商N被除数各位已除完Y显示运算结果结束三、实验体会通过本次实验,我了解了汇编语言的编辑方法及特点,掌握汇编语言的编辑、汇编及连接的过程,并逐步掌握运用DEBUG进行调试汇编语言程序。但对其的熟悉程度和应用还远远不够,因此需要经过加强练习,提高水平。实验二设计汇编语言程序一.实验内容1、字符串统计程序设计2、双字乘法程序设计二.实验内容1.字符串统计。在数据段中建立一个缓冲区BUFFER,变量VER,编程使得程序具有如下功能:从键盘输入一个子字符串存入VER,从键盘输入包含一个或几个子字符串的字符串存入BUFFER。统计BUFFER中的字符串含有多少个子字符串以及每个子字符串的位置。2.双字乘法程序。设计一个程序实现32位带符号双精度数乘法运算。由于只有8位和16位的乘法指令。因此32位乘法运算是不能直接用指令实现的。但可以用16位乘法指令,通过4次想乘然后把部分积想加。对于带符号数,可以先根据绝对值求得积。然后判断积的符号,若积为负数,应将其用补码表示。三.实验流程与程序:子程序入口AX←NUM1开始DX:AX←AX*NUM2乘积符号标志SIGN=0MRLT←AX,MRLT+2←DX被乘数0YAX←NUM1+2N被乘数取补DX:AX←AX*NUM2SIGN标志取反MRLT+2←AX+MRLT+2,MRLT+4←DX+C乘数0YAX←NUM1N乘数取补DX:AX←AX*NUM2+2SIGN标志取反MRLT+2←AX+MRLT+2,MRLT+4←DX+C调用32位无符号乘法子程序保存进位SIGN=0YAX←NUM1+2N乘积取补DX:AX←AX*NUM2+2结束恢复进位32位带符号数乘法流程图MRLT+4←AX+MRLT+4,MRLT+6←DX+CRET32位无符号乘法子程序流程图datasegmentioportequ0d400h-0280hio8253aequioport+280hio8253bequioport+283hio8255aequioport+288hio8255bequioport+28bhio0832aequioport+290hdata1db80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdhdb0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96hdb80h,66h,4eh,38h,25h,15h,09h,04hdb00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据timedb120,106,94,89,79,70,63,59;发不同音时8253的计数器初值msgdb'Press1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'numdb;num为8253计数器初值的序号dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetmsgmovah,9int21h;显示提示信息sss:movah,7int21h;从键盘接收字符,不回显cmpal,1bhjeexit;若为ESC键,则转EXITcmpal,31hjlssscmpal,38hjgsss;若不在'1'-'8'之间转ssssubal,31hmovnum,al;求出相应的时间常数的序号movcx,60;取60次32个正弦波数据ddd:movsi,0lll:moval,data1[si];取正弦波数据movdx,io0832aoutdx,al;放音calldelay;调延时子程序incsicmpsi,32;是否取完32个数据jllll;若没有,则继续loopddd;总循环次数60是否完,没有,则继续jmpsssexit:movah,4chint21hdelayprocnear;延时子程序ccc:movbx,offsettimemovdx,io8253b;置8253通道0为方式0工作moval,10houtdx,almovdx,io8255b;设8255A口输入moval,9bhoutdx,almoval,num;取相应的时间常数xlatmovdx,io8253aoutdx,al;向8253通道0输出kkk:movdx,io8255ainal,dx;从8255A口读一字节testal,01;判PA0口是否为1jzkkk;若不为1,则转KKKret;子程序返回delayendpcodeendsendstart四、实验体会编辑程序有很多种,但按功能划分,主要有两大类。一类是行编辑程序,如EDIT编辑程序;另一类是全屏幕编辑程序如QuickEdit(QE)。行编辑程序功能较弱,不如全屏幕编辑程序方便、灵活。实验三8253定时器/计数器接口与数字电子琴一、实验目的改变定时器2的计数值来改变声音频率,通过编程来获得声调(频率)和节奏(延时长短),使计算机演奏出乐曲来。二、实验原理PC机的主机箱上装有一只小喇叭,由定时器8253和并行接口芯片8255控制其发音,其电路如下:8253DRIVER1.9318MHZCLKOUT28255PB0GATE2PB18253用定时器2来产生896Hz的音频信号使喇叭发声,我们可以改变定时器2的计数值来改变声音频率,通过发声的延时程序来获得时间长短不同的声音,于是就可以通过编程;来获得声调(频率)和节奏(延时长短),使计算机演奏出乐曲来。如果再把音符1,2,3,4,...5,6,7,1,2,3,······与数字键1,2,3,4,5,6,7,8,9,······对应起来,就可以把计算机变成电子琴。以下给出有关资料:1.音符1.,2.,3.,4.,5.,6.,7.,1,2,3,4,5,6,7,ⅰ频率1311471651751962202472622943303493924404945232.计数值计算公式计数值=(时钟频率)/给定频率=1234DCH/给定频率8253道地地定时器通道2的端口地址:42H(存放计数值,先送低位字节,后送高位字节)命令寄存器地址:43H4.实验程序:1)计算计数值程序段:MOVDI,给定频率MOVDX,12HMOVAX,34DCHDIVDIAX中即为计数值。2)打开扬声器发声,8255PB0,PBI送出高电平:INAL61HORAL3OUT61HAL3)关闭扬声器,停止发声:INAL61HORAL0FCHOUT61HAL三.实验体会实验刚开始有点不知如何下手,经过请教别人和网上查找资料,慢慢有了思路。通过学习和研究利用8253定时器/计数器的特点和功能,应用编程知识慢慢调试,最终编出音乐来。获得实验成功的时候,觉得知识在生活中的应用真是太美妙了!以后将学着去编出其他曲目的程序来。实验四实时时钟实验一、实验目的设计一个时钟显示程序,要求利用定时器0的定时中断记录时间。二、实验原理PC机中8253定时器0是作为系统时钟的定时中断使用的,它被设置为每秒产生18。2次定时中断。用户可以改写中断向量表,使这个0级中断转入自己的定时服务程序中去,也可以重新初始化该计数器,使之产生用户所需要的定时中断,这样就可以在计算机控制系统中用来定时采样压力,温度等等被控制参数,然后进行开环或闭环控制。BIOS在初始化8253定时器以后,给用户留下了一个INT1CH的软件接口,其处理程序只是一条空操作返回指令,用户可以将其入口地址填入中断向量表1CH型中断向量,使得一进入1CH型中断,便立即执行用户自己的程序,执行完又返回中断服务程序继续执行第二种方式是重新设置定时器0,使其工作在方式3,装入计数值11932,使其每10ms发一次定时中断。由于定时器0的中断类型号是08H,所以应将用户的中断服务程序入口地址填入中断向量表的08H向量中。三、实验内容:1.用第二种方式重新设置定时器0,使其工作在方式3(控制寄存器地址43H),装入计数值11932(端口地址40H),使超10ms产生一次中断;2.设计一个时钟显示程序,要求利用定时器0的定时中断记录时间,然后以hh:mm:ss的形式在屏幕上显示出来(hh是小时,mm是分,ss是秒),每秒钟显示一次,而且必须在同一位置显示,才能看见变化数位的数字跳动。3.将程序的入口地址写入中断向量08H,注意在写入前,必须设置一个变量将原中断向量保存起来,以便在程序结束时恢复。4.程序中要设计输入正确计时点(当前时间值)的方法。5.按ESC键推出,返回DOS。(注意:要恢复原来的中断向量,此功能才能实现)。6.程序中允许时钟和键盘中断。四、简略流程图。开始利用PSP参数区存放命令行参数读按键(当前时间与命令行参数相定时中断子程序入口等时,按回车,程序向下执行)保存原08H型中断向量改变时﹑分﹑秒计数值写入新的中断向量并以ASCII码形式形成显示字符串初始化8253通道0,使其工作在方式3,每10ms发一次中断IRET检查秒计数值改变否,若改变在同一位置显示时间,否则不显示定时中断子程序流程图有键按下否NY恢复原中断向量返回DOS主程序流程图五、实验程序1、利用RTC的增量功能进行1s的定时,当定时时间到,取反LED控制#include#defineLED1CON0x00000400/*口为LED1控制器*//*定义Fpclk值,用于设置串口波特率*/#defineFPCLK3686250L2、初始化实时时钟voidRTCIni(void){PREINT=FPCLK/32768-1;2764800L5/6/71F3F3F8255A8255A工作方式选择字8255工作方式选择字共8位,存放在8255控制寄存器中。最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。3、C口置/复位控制字8255的C口可进行位操作,即:可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的(图8-10)。C口置/复位字共8位,各位含义如下:4、命令字与初始化编程8255有两个命令字,即方式选择控制字和C口置0/置
本文标题:钟计算机综合实践1-5
链接地址:https://www.777doc.com/doc-7597949 .html