还剩26页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《微机原理与接口技术实验报告》学院电气信息学院班级109班老师罗江陶学号1143031270姓名实验一汇编语言程序的上机步骤实验目的
1.了解汇编语言程序的执行流程
1、熟悉和使用DEBUG调试工具,分析和读懂一些与硬件相关的小程序
2、通过对程序的分析,理解计算机程序的执行过程
4.了解并逐步熟悉汇编语言的编辑方法与特点.
5.复习8086汇编语言的段结构、常用的指令与伪指令、存储空间的分配等
6.掌握汇编语言的编辑、汇编与连接的过程
7、了解并逐步掌握运用DEBUG进行调试汇编语言程序
二、实验内容以文件名为
1.asm源程的序为例,学习汇编语言的上机步骤汇编语言程序MASM软件由EDIT.COM编辑器,汇编MASM.EXE程序,连接LINK.EXE程序以与DUEBUG.EXE调试程序四个部分组成汇编语言编制完成后,在计算机上的操作过程就分为四个阶段LOOP LOOP1循环5次CLDMOV CX,4MOV DX,1L00P2:;调用子程序PAIXU进行排CALL PAIXU序INC DXLOOPL00P2MOV DX,OFFSET XS2MOV AH,09HINT21H;计数寄存器CX置5才MOV CX,5能显示5个数LEA SI,VAR;调用子程序XS进行排序L00P3:CALL XS后结果显示LOOP LOOP3;输出最大值MOV DX,OFFSET XS3MOV AH,09HINT21HLEA SI,VARADD SI,8;SI要进行加8处理后指向排在最后的最大值CALL XSMOV DX,OFFSET XS4;输出最小值MOV AH,09HINT21HLEA SI,VARCALL XSMOV DX,OFFSET XS5;输出去掉最大最小值的平均值MOV AH,09HINT21HMOV AX,[SI]MOV BX,[SI+2];取第二个数据ADD AX,BX;取第三个数据(这样相加相当于MOV BX,[SI+4]去掉了最大最小值)ADD AX,BXCWD;把相加和除以三来求IDIV P得平均值LEA SI,AVG;把求得的平均值存入AVGMOV[SI],AXCALL XSXS6;输出2进制的平均数MOV DX,OFFSETMOV AH,09HINT21HMOV CX,16LEA SI,AVGMOV AX,[SI]LP2:CWDIDIV D;采用不断除以二并压入栈的方式得到数据的二进制表示方式PUSH DXLOOPLP2MOV CX,16LP3:POP DXADD DL,30H;将数据弹出站并且加30H进行ASCII的转换显示MOV AH,2INT21HLOOP LP3MOV AH,4CHINT21HSRZH PROC;输入转化子程序MOV BX,2;BX取2,可以循环3次,相当于把3个字节的数转化为1个字MOV DX,0ZHI:MOV AX,0LODSB;从51^串中读出数据SUB AL,30HADD DX,AXMOV AX,DXMUL MMOVDX,AXDEC BXJNZZHIMOV AX,DXSTOSW;把字数据以16进制存入VAR数据串中INC SIINC SI;跳过3位数后面的空格或逗号RET;输入转化子程序结束SRZH ENDPXSPROC;显示子程序LODSWMOV BX,3;数据在十进制时的是三位数所以计数部分BX置三ZL1:CWDIDIV M;采用除以16的方法不断得到每一位数PUSH DX;将每一位压入栈DEC BXJNZZL1MOV BX,3ZL2:;压完一个数后立即出栈进行POP DX显示ADDDL,30HDEC BXMOV AH,2INT21HJNZ ZL2;每个数据间由空格隔开MOV DL,20HMOV AH,2INT21HRET;显示子程序结束XS ENDPPAI XUPROC;排序子程序PUSH CXMOV CX,5SUB CX,DXMOV SI,0RECMP:MOV AX,VAR[SI]CMP AX,VAR[SI+2]JLE NOCHXCHG AX,VAR[SI+2]XCHGAX,VAR[SI]NOCH:INC SIINCSILOOP RECMPPOPCXRET;排序子程序结束PAIXU ENDPCSEGENDSEND START
五、运行结果:
六、实验心得:因为很容易出错,编辑的错误很容易找,通过masm.exe和edit,exe就能找到难的是算法和逻辑上的错误,看了很多遍程序总觉得没有错误,但是就是1个小问题就导致全部出错,比如我的这个程序里的SRZH(输入转化)子程序最后是有2行的INCSI,相当于SI加了2,就直接跳过数中间的空格或者逗号,但是如果只加了1行的话,程序能运行,但是最后输出的全是乱码实验三8253定时器/计数器与接口实验乐曲程序
一、实验目的学习8253计数器2输出方波信号用以驱动扬声器发声的原理,通过程序设置计数器2的输出波形的频率和延续时间,控制扬声器的音调和发生长短
1.设计程序让微机演奏一段两只老虎的乐曲
2.思考如何让PC机演奏一遍,两遍以与数遍这段两只老虎的乐曲,并修改程序实现
三、程序流程图I
四、程用读取计数初值和音长8253置初值8253DATAS SEGMENTDATASENDSSTACK SEGMENTPARA STACKSTACKSSS DW100DUP;堆栈段代码STACK ENDSCODESSEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AH,1INT21HMOV AH,0SUB AX,30HMOV CX,AXAGAIN:PUSH CXMOV AX,DATASMOV DS,AXMOV CX,2A:MOV BX,262;两只老虎CALL YINYUEMOV BX,294CALL YINYUEMOV BX,330CALL YINYUEMOV BX,262CALL YINYUEMOV BX,50CALL DELAYLOOPAMOV CX,2Al:MOV BX,330;跑得快CALL YINYUEMOV BX,349CALL YINYUEMOV BX,
3921.编辑EDIT.COM:首先输入源程序:在记事本里录入,注意在保存时文件格式必须选择所有文件,文件后缀名为.ASM.即保存时文件名为XXX
三、•asmo
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.EXEDATA SEGMENT程序流程图:NUM1DB35,35HNUM2DW35,35HNUM3DB4DUP34,3DUP34HNUM4DB34ABMOV BX,250CALL DELAYLOOPAlMOV CX,2A2:MOV BX,392;一只没有耳朵,一直没有尾巴CALL YINYUE1MOVBX,440CALL YINYUE1MOVBX,392CALL YINYUE1MOVBX,349CALL YINYUE1MOVBX,330CALL YINYUEMOVBX,262CALL YINYUEMOVBX,50CALL DELAYLOOPA2MOV CX,2A3:MOVBX,294;真奇怪CALL YINYUEMOVBX,196CALL YINYUEMOVBX,262CALL YINYUEMOVBX,250CALL DELAYLOOPA3POP CXDEC CXCMP CX,0JNZ AGAINMOV AH,4CHINT21HYINYUE PROC NEARMOV AX,34DCH;输出音符的特定频率MOVDX,12HDIV BXOUT42H,ALMOV AL,AHOUT42H,AL;开扬声器IN AL,61HOR AL,3OUT61H,AL;延时IsPUSH CXMOVBX,500DELI:MOV CX,2800DEL2:LOOP DEL2DEC BXJNZDELIPOP CX;关扬声器IN AL,61HAND AL,OFCHOUT61H,ALRETYINYUE ENDPYINYUE1PROCNEAR;输出音符的特定频率MOV AX,34DCHMOV DX,12HDIV BXOUT42H,ALMOV AL,AHOUT42H,AL;开扬声器IN AL,6IIIOR AL,3OUT61H,AL;延时
0.5sPUSH CXMOVBX,250DELI:MOV CX,2800DEL2:LOOP DEL2DEC BXJNZDELIPOP CXINAL,61H;关扬声器AND AL,OFCHOUT61H,ALRETYINYUE1ENDPDELAY PROCNEAR;子程序DELAY1,延时
0.2sPUSH CXDELI:MOVCX,2800DEL2:LOOP DEL2DEC BXJNZDELIPOP CXRETDELAYENDPCODES ENDSENDSTART
五、运行结果
六、实验心得通过本次实验,我第一次用8253通过电脑发声,了解了其编程过程,学到了很多新的知识我理解了汇编语言中编程的基本步骤,掌握了通过地址对数据赋值的方法掌握芯片的使用方法,了解了计算机编程过程中的相关知识特别是能够是主板发出声音,我觉得很有成就感,自己编的小调尽管十分粗糙,我还是从中得到了快乐NUM5DW’34,‘ABDATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX,OFFSET NUM1MOV AL,[BX]MOVBX,OFFSET NUM5MOV AX,[BX]MOV AH,4CHINT21HCODE ENDSENDSTART
五、运行结果将以上程序在笔记本中保存为xueyuanl.ASM编译后显示编译成功运行结果如下运行可执行文件出现此界面后“闪退”
六、实验心得通过本次实验,我了解了一个汇编程序在计算机上的执行步骤,如何实现一个汇编程序的编辑、连接、运行能看懂一些十分简单的汇编小程序汇编语言是一种面向机器的“低级”语言,是计算机能够提供给用户的最快而最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言要真正理解计算机的工作过程,理解计算机程序的执行过程,就必须学习汇编语言也正是因为如此,汇编语言程序设计是计算机专业和电子,自动控制等相关专业的重要课程实验二汇编语言程序设计循环结构程序
一、实验目的
1.理解8086各种指令的功能
2.进一步学习程序的调试
3.掌握循环结构程序的设计编程
二、实验内容用“冒泡”法对一组数300,250,280,240,260,按从小到大的顺序排列提示用冒泡的方法对一组数据元素排序,它的基本方法是将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序对于5N个元素,整个排序通过4遍二N-1邻元素排序完成每一遍的排序由若干次邻元素的排序组成4遍排序中,邻元素的排序依次为4,3,2,1遍完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序本遍排序第一次排第二次排第三次排第四次排外循环的次数」乙刖序后序后序后序后为CX=4次N-1,内循环的次数为4,3,2,1DECCX排序遍数1300,250,250,300,250,280,250,280,250,280,280,240,280,240,300,240,240,300,240,260,画2602602603002250,280,250,280,250,240,250,240,240,260,240,260,280,260,260,280,阿3003003003250,240,250,240,240,250,260,280,260,280,260,280,画3003004240,250,240,250,260,280,画要求
1.编制程序,从键盘输入300,250,280,240,260这五个数,并思考如何输入任意五个数,五个数可以有一位数,二位数,三位数,四位数,五位数,混合输入比较大小;
2.对这组数用冒泡法进行排序,并输出原始数据与排序后数据,两两数据之间用空格分隔;
3.利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化,以与会用调试命令查看程序运算中寄存器中的值;
4.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;
5.用压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平均值按位逐个输出(即输出263);
6.用移位指令将平均值以二进制串的形式输出
7.设计程序要有模块化的思想,用子程序实现不同的功能;
8.所有数据输出前要用字符串的输出指令,进行输出提示(如zuida zhishi:300等),所有数据结果能清晰地显示在电脑屏幕上
三、程序流程图:心〕TT从键盘输入待排序的字符:田III乙口!c*c/左A、卡土小、,廿4二上七/1✓夕正工;r L”,[口/日
二、二土归上日占将拓日二循环次I*\/u1H4A5:田rn工工口击CAi\/i,归匕*、二什夕二HE*;田中工工口l*X/U,日=、-+R4-出匕击七“土田日二夕日工7T u、h输」豆古甘曲,二工田U七匕七七七尢旦U的最大值Hi C+h/41n c4k就了个输出最小值—取,采用不断除以二并压入栈的方式得到数据的二进制表示,并输出J子程序有SRZH(输入转化)子程序,XS(显示)子程序,PAIXU(排序)子程序DSEG SEGMENT
四、程序清单与注释:SR DB40,,20DUP VARDW5DUP09•AVG DWMDW10P DW3D DW2SHURU DBQING SHURU SHU JUXS1DB ODH,OAH,YUAN SHISHUJU:,XS2DB ODII,OAH,PAI XUHOU SHUJU:,XS3DB ODH,OAH,ZUI DAZHI SHI:,XS4DB ODH,OAH,ZUI XIAOZHI SHI:,XS5DB ODH,OAH,PING JUNZHI SHI:,XS6DB ODH,OAH,ER JINZHI PINGJUN ZHIDSEGENDSSTACK SEGMENTDW100DUP STACKENDSCSEG SEGMENTASSUMECS:CSEG,DS:DSEG,SS:STACK,ES:DSEGSTART:MOVAX,DSEGMOV DS,AXMOV ES,AXMOV DX,OFFSET SHURU;显示输入的提示MOVAH,09HINT21HLEA DX,SRMOV AH,OAH;输入待排序的字符INT21HCLDMOV CX,5LEA SI,SRADD SI,2LEA DI,VARLOOPS:CALL SRZH;调用子程序SRZH进行转化LOOP LOOPS;循环5次MOVDX,OFFSET XS1;显示未排序的提示符MOVAH,09HINT21HMOV CX,5LEA SI,VARLOOP1:CALL XS;调用子程序XS进行未排序的数据显示。
个人认证
优秀文档
获得点赞 0