四川大学微机原理实验报告_第1页
四川大学微机原理实验报告_第2页
四川大学微机原理实验报告_第3页
四川大学微机原理实验报告_第4页
四川大学微机原理实验报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

2/19《微机原理与接口技术实验报告》学院:电气信息学院班级:109班老师:罗江陶学号:1143031270姓名:实验一汇编语言程序的上机步骤实验目的:1、了解汇编语言程序的执行流程。2、熟悉和使用DEBUG调试工具,分析和读懂一些与硬件相关的小程序。3、通过对程序的分析,理解计算机程序的执行过程。4、了解并逐步熟悉汇编语言的编辑方法及特点.5、复习8086汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。6、掌握汇编语言的编辑、汇编及连接的过程。7、了解并逐步掌握运用DEBUG进行调试汇编语言程序二、实验内容:以文件名为1.asm源程的序为例,学习汇编语言的上机步骤。汇编语言程序MASM软件由EDIT.COM编辑器,汇编MASM.EXE程序,连接LINK.EXE程序以及DUEBUG.EXE调试程序四个部分组成。汇编语言编制完成后,在计算机上的操作过程就分为四个阶段。1.编辑EDIT.COM:首先输入源程序:在记事本里录入,注意在保存时文件格式必须选择所有文件,文件后缀名为.ASM,即保存时文件名为XXX.asm。2.用汇编程序MASM.Exe对源程序.ASM文件汇编,生成目标文件.OBJ:双击MASM软件中的MASM.Exe文件框,在命令行后键入源程序名XXX.asm,(如果源程序与MASM软件在同一路径下,可以只键入文件名,而不要后缀)3.连接LINK.EXE双击MASM软件中的LINK.Exe文件框,在命令行后键入目标文件名XXX.OBJ(如果源程序,目标文件与MASM软件在同一路径下,可以只键入文件名,而不要后缀)如果连接没有错误,就会产生一个XXX.EXE的可执行文件,如果.OBJ文件有错误,连接时会指出错误的原因。4.运行和调试DEBUG.exe运行可执行文件,即双击XXX.EXE文件框即可,或在DOS下运行此程序,E:\XXX.EXE。程序流程图:汇编程序汇编汇编语言源程序编辑程序汇编程序汇编汇编语言源程序编辑程序编辑汇编语言源文件机器语言执行文件连接程序机器语言执行文件连接程序连接机器语言目标文件结果计算机结果计算机程序清单与注释:DATA SEGMENTNUM1 DB 35,35HNUM2 DW35,35HNUM3 DB 4DUP(34,3DUP(34H))NUM4 DB'34AB' NUM5 DW'34','AB'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETNUM1MOVAL,[BX]MOVBX,OFFSETNUM5MOVAX,[BX]MOVAH,4CHINT21HCODEENDSENDSTART五、运行结果:将以上程序在笔记本中保存为xueyuan1.ASM编译后显示编译成功:运行结果如下:运行可执行文件出现此界面后“闪退”六、实验心得:通过本次实验,我了解了一个汇编程序在计算机上的执行步骤,如何实现一个汇编程序的编辑、连接、运行。能看懂一些十分简单的汇编小程序。汇编语言是一种面向机器的“低级”语言,是计算机能够提供给用户的最快而最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。要真正理解计算机的工作过程,理解计算机程序的执行过程,就必须学习汇编语言。也正是因为如此,汇编语言程序设计是计算机专业和电子,自动控制等相关专业的重要课程。实验二汇编语言程序设计循环结构程序一、实验目的:1.理解8086各种指令的功能。2.进一步学习程序的调试。3.掌握循环结构程序的设计编程。二、实验内容:用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。提示:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。对于5(N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。每一遍的排序由若干次邻元素的排序组成。4遍排序中,邻元素的排序依次为4,3,2,1遍。完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DECCX)排序遍数本遍排序前第一次排序后第二次排序后第三次排序后第四次排序后1300,250,280,240,260250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,3002250,280,240,260,300250,280,240,260,300250,240,280,260,300250,240,260,280,3003250,240,260,280,300250,240,260,280,300240,250,260,280,3004240,250,260,280,300240,250,260,280,300要求:1. 编制程序,从键盘输入300,250,280,240,260这五个数,并思考如何输入任意五个数,五个数可以有一位数,二位数,三位数,四位数,五位数,混合输入比较大小;2. 对这组数用冒泡法进行排序,并输出原始数据及排序后数据,两两数据之间用空格分隔;3. 利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化,以及会用调试命令查看程序运算中寄存器中的值;4. 去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;5. 用压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平均值按位逐个输出(即输出263);6. 用移位指令将平均值以二进制串的形式输出。7. 设计程序要有模块化的思想,用子程序实现不同的功能;8. 所有数据输出前要用字符串的输出指令,进行输出提示(如:zuidazhishi:300等),所有数据结果能清晰地显示在电脑屏幕上。三、程序流程图:开始开始从键盘输入待排序的字符从键盘输入待排序的字符调用子程序SRZH调用子程序SRZH(输入转化)进行转化,循环5次调用子程序XS调用子程序XS(显示)进行未排序的数据显示,循环5次调用子程序PAIXU调用子程序PAIXU(排序)进行排序调用子程序XS调用子程序XS(显示)进行排序后结果显示,循环5次输出最大值输出最大值,其中SI要进行加8处理后指向排在最后的最大值,输出最小值输出最小值,其中SI指向VAR就了个输出最小值取中间三个数据,相加起来除以3,取中间三个数据,相加起来除以3,输出去掉最大最小值的平均值采用不断除以二并压入栈的方式得到数据的二进制表示,并输出采用不断除以二并压入栈的方式得到数据的二进制表示,并输出子程序有:SRZH(输入转化)子程序,XS(显示)子程序,PAIXU(排序)子程序。四、程序清单与注释:DSEGSEGMENTSRDB40,?,20DUP(?)VARDW5DUP(0)AVGDW?MDW10PDW3DDW2SHURUDB'QINGSHURUSHUJU:','$'XS1DB0DH,0AH,'YUANSHISHUJU:','$'XS2DB0DH,0AH,'PAIXUHOUSHUJU:','$' XS3 DB 0DH,0AH,'ZUIDAZHISHI:','$' XS4 DB 0DH,0AH,'ZUIXIAOZHISHI:','$'XS5DB0DH,0AH,'PINGJUNZHISHI:','$'XS6DB0DH,0AH,'ERJINZHIPINGJUNZHISHI:','$'DSEGENDSSTACK SEGMENT DW 100DUP(?)STACKENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:STACK,ES:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVES,AXMOV DX,OFFSETSHURU ;显示输入的提示符 MOV AH,09H INT 21HLEADX,SRMOVAH,0AH;输入待排序的字符INT21HCLDMOV CX,5 LEA SI,SRADDSI,2LEADI,VARLOOPS: CALL SRZH ;调用子程序SRZH进行转化 LOOP LOOPS ;循环5次MOV DX,OFFSETXS1 ;显示未排序的提示符 MOV AH,09H INT 21H MOV CX,5 LEA SI,VARLOOP1: CALL XS ;调用子程序XS进行未排序的数据显示 LOOP LOOP1 ;循环5次CLDMOVCX,4MOVDX,1LOOP2:CALLPAIXU;调用子程序PAIXU进行排序INCDXLOOPLOOP2MOV DX,OFFSETXS2 MOV AH,09H INT 21H MOV CX,5 ;计数寄存器CX置5才能显示5个数 LEA SI,VARLOOP3:CALLXS;调用子程序XS进行排序后结果显示LOOPLOOP3MOV DX,OFFSETXS3;输出最大值 MOV AH,09H INT 21H LEA SI,VARADDSI,8 ;SI要进行加8处理后指向排在最后的最大值 CALL XSMOV DX,OFFSETXS4;输出最小值 MOV AH,09H INT 21H LEA SI,VAR CALLXSMOVDX,OFFSETXS5;输出去掉最大最小值的平均值 MOV AH,09H INT 21HMOVAX,[SI] MOVBX,[SI+2] ;取第二个数据 ADD AX,BX MOVBX,[SI+4] ;取第三个数据(这样相加相当于去掉了最大最小值) ADD AX,BXCWDIDIVP ;把相加和除以三来求得平均值LEASI,AVG MOV[SI],AX ;把求得的平均值存入AVGCALLXSMOVDX,OFFSETXS6;输出2进制的平均数 MOV AH,09H INT21H MOV CX,16 LEA SI,AVG MOV AX,[SI]LP2: CWD IDIV D;采用不断除以二并压入栈的方式得到数据的二进制表示方式 PUSH DX LOOPLP2 MOV CX,16LP3: POP DX ADD DL,30H ;将数据弹出站并且加30H进行ASCII的转换显示 MOV AH,2 INT 21H LOOP LP3MOVAH,4CHINT21HSRZHPROC;输入转化子程序MOVBX,2;BX取2,可以循环3次,相当于把3个字节的数转化为1个字MOVDX,0ZH1:MOVAX,0LODSB;从SR串中读出数据SUBAL,30HADDDX,AXMOVAX,DXMULMMOVDX,AXDECBXJNZZH1MOVAX,DXSTOSW;把字数据以16进制存入VAR数据串中INCSIINCSI;跳过3位数后面的空格或逗号RET;输入转化子程序结束SRZHENDPXS PROC ;显示子程序 LODSW MOV BX,3 ;数据在十进制时的是三位数所以计数部分BX置三ZL1: CWD IDIVM ;采用除以16的方法不断得到每一位数 PUSH DX ;将每一位压入栈 DEC BX JNZ ZL1 MOV BX,3ZL2: POP DX ;压完一个数后立即出栈进行显示 ADD DL,30H DEC BX MOV AH,2 INT 21H JNZ ZL2MOVDL,20H ;每个数据间由空格隔开MOVAH,2 INT 21H RET ;显示子程序结束XS ENDPPAIXUPROC;排序子程序PUSHCXMOVCX,5SUBCX,DXMOVSI,0RECMP:MOVAX,VAR[SI]CMPAX,VAR[SI+2]JLENOCHXCHGAX,VAR[SI+2]XCHGAX,VAR[SI]NOCH:INCSIINCSILOOPRECMPPOPCXRET;排序子程序结束PAIXUENDPCSEGENDSENDSTART五、运行结果:六、实验心得:因为很容易出错,编辑的错误很容易找,通过masm.exe和edit.exe就能找到。难的是算法和逻辑上的错误,看了很多遍程序总觉得没有错误,但是就是1个小问题就导致全部出错,比如我的这个程序里的SRZH(输入转化)子程序最后是有2行的INCSI,相当于SI加了2,就直接跳过数中间的空格或者逗号,但是如果只加了1行的话,程序能运行,但是最后输出的全是乱码。实验三8253定时器/计数器与接口实验乐曲程序一、实验目的:学习8253计数器2输出方波信号用以驱动扬声器发声的原理,通过程序设置计数器2的输出波形的频率和延续时间,控制扬声器的音调和发生长短。二、实验内容:1.设计程序让微机演奏一段两只老虎的乐曲。2.思考如何让PC机演奏一遍,两遍以及数遍这段两只老虎的乐曲,并修改程序实现。三、程序流程图:读取8253计数初值和音长读取8253计数初值和音长8253置初值开启与门和8253GATE延时关闭与门和8253GATE返回四、程序清单与注释:DATASSEGMENTDATASENDSSTACKSEGMENTPARASTACK'STACK'SSSDW100DUP(?);堆栈段代码STACKENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAH,1INT21HMOVAH,0SUBAX,30HMOVCX,AXAGAIN:PUSHCXMOVAX,DATASMOVDS,AXMOVCX,2A:MOVBX,262 ;两只老虎CALLYINYUEMOVBX,294CALLYINYUEMOVBX,330CALLYINYUEMOVBX,262CALLYINYUEMOVBX,50CALLDELAYLOOPAMOVCX,2A1:MOVBX,330;跑得快CALLYINYUEMOVBX,349CALLYINYUEMOVBX,392CALLYINYUEMOVBX,250CALLDELAYLOOPA1MOVCX,2A2:MOVBX,392;一只没有耳朵,一直没有尾巴CALLYINYUE1MOVBX,440CALLYINYUE1MOVBX,392CALLYINYUE1MOVBX,349CALLYINYUE1MOVBX,330CALLYINYUEMOVBX,262CALLYINYUEMOVBX,50CALLDELAYLOOPA2MOVCX,2A3:MOVBX,294;真奇怪CALLYINYUEMOVBX,196CALLYINYUEMOVBX,262CALLYINYUEMOVBX,250CALLDELAYLOOPA3POPCXDECCXCMPCX,0JNZAGAINMOVAH,4CHINT21HYINYUEPROCNEARMOVAX,34DCH;输出音符的特定频率MOVDX,12HDIVBXOUT42H,ALMOVAL,AHOUT42H,ALINAL,61H;开扬声器ORAL,3OUT

温馨提示

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

评论

0/150

提交评论