当前位置:文档之家› 微机原理与单片机实验报告

微机原理与单片机实验报告

北京联合大学信息学院实验报告课程名称:微型计算机原理学号:姓名:2012 年 6 月 9 日目录实验1 EMU8086模拟器的使用 (3)实验2 数据传送指令的使用 (5)实验3 多位十六进制加法运算实验 (9)实验5 循环程序实验 (11)实验6 由1 到100 求和实验 (13)实验7 求表中正数_负数_0 的个数实验 (14)实验8 数据排列实验(冒泡排序) (16)实验9 系统功能调用(大小写转换) (18)实验10 阶乘(递归运算) (20)实验11 ProteusIO工程文件的建立 (21)实验12 IO口读写实验(245、373) (22)实验13 8255 接口实验 (24)实验14 声光报警 (25)实验总结 (28)实验1 EMU8086模拟器的使用一实验要求利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的:熟悉EMU8086实验环境三EMU8086环境:1 模拟器编辑窗口2 模拟器调试窗口四实验内容实验内容1:新建文件。

运行emu80861. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码:MOV AX, 1020HMOV BX, 2030HMOV AX, BXADD AX, BXMOV [BX], AXMOV [2032H], AXHLT2. 编译:单击“编译”按钮,对程序段进行编译;3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。

4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。

5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。

6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。

7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序,8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序的关联。

10.将“存储器”中地址改为1000:0100,并将从其开始的连续10个单元的内容改为55H。

实验内容2:运行范例在模拟器编辑窗口中1.点击典型范例2.选择:hellow,word程序,编译,运行,观察结果。

修改程序(不要改原有DEMO程序),输出学号,姓名(汉语拼音或英文名)pare numbers程序,编译,运行,观察结果。

修改程序(不要改原有DEMO程序),将比较对象改为7,编译,运行,观察结果。

4.欣赏其它DEMO范例实验2 数据传送指令的使用一、实验要求编写程序代码指令,注释二、实验目的熟练掌握数据传送类指令的格式、功能和应用。

三、实验说明emu8086环境下自建工程文件。

五、参考程序1 运行以下3段程序,记录用到的4个通用寄存器的内容1.mov ax, 0abch dec axand ax, 00ffh mov cl, 4sal al, 1 mov cl, al add cl, 78h push axpop bxhlt2.mov sp, 2000h mov ax, 3000h mov bx, 5000h push axpush bxpop axhlt3.mov ax, 1234h mov bx, 5678h mov cx, 9abch push axpush bxpush cxpop dipop sipop dxhlt2 运行以下程序,记录AX寄存器的内容,逐条注释指令Mov [1000h], 5566hmov ax, [1000h]lea ax, [1000h]hlt六、编程,测试,记录程序运行结果。

实验3 多位十六进制加法运算实验一、实验要求编程实现多位十六进制数的加法运算。

二、实验目的1、熟悉实验系统的编程和使用。

2、掌握使用加法类运算指令编程及调试方法。

3、掌握加法类指令对状态标志位的影响。

三、实验说明由于本实验是三个十六位二制数相加运算,N4 为存放结果,其中N1 为1111H、N2 为2222H、N3 为3333H 所以结果应该为6666H四、实验程序流程图五、参考程序DATA SEGMENTNUM1 DW 1111H ;N1NUM2 DW 2222H ;N2NUM3 DW 3333H ;N3NUM4 DW 0000H ;N4 DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA BEG: MOV AX, DATAMOV DS, AXMOV SI, OFFSET NUM1MOV AX, 0ADD AX, [SI+0]ADD AX, [SI+2]ADD AX, [SI+4]MOV [SI+6], AXJMP $CODE ENDSEND BEG六、编程,测试,记录程序运行结果。

实验5 循环程序实验一、实验要求练习编程建立8086 的循环程序。

二、实验目的1、熟悉实验系统的编程和使用。

2、掌握使用LOOP 判断转移指令实验循环的方法。

3、掌握使用LOOP 与CX 的组合。

三、实验说明由于本实验是通过给CX 一个数值,再通过LOOP 作一个判断CX-1 是否为0 的转移,实现程序的循环,循环的内容是执行AX+1,所以结果应该为AX 最后大小为开始时给定CX 的大小。

四、实验程序流程图五、参考程序CODE SEGMENTASSUME CS:CODECON_A EQU 25CON_B EQU 12 START: MOV AX,0MOV CX,5INC_AX: NOPINC AXLOOP INC_AXJMP $CODE ENDSEND START六、编程,测试,记录程序运行结果。

实验6 由1 到100 求和实验一、实验要求编程实现1 到100 求和运算。

二、实验目的1、熟悉实验系统的编程和使用。

2、掌握使用加法类运算指令编程及调试方法。

3、掌握使用循环类指令编程及调试方法。

三、实验说明由于本实验是1 到100 的100 个数想加,1+2+3+4+……+97+98+99+100=? 求和四、实验程序流程图五、参考程序DATA SEGMENTtotal DW 0000H ;DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATABEG: MOV AX, DATAMOV DS, AXMOV SI, OFFSET totalMOV CX, 100MOV AX, 0MOV BX, 1add_100: ADD AX, BXINC BXLOOP add_100MOV [SI], AXJMP $CODE ENDSEND BEG六、编程,测试,记录程序运行结果。

total=1+2+3+4........+99+100 = 5050 =13BA H(16 进制) 验证结果是否正确实验7 求表中正数_负数_0 的个数实验一、实验要求程序中定义数组,编程实现统计数组中正数、负数与0 的个数。

二、实验目的1、熟悉实验系统的编程和使用。

2、掌握查表方法。

三、实验说明由于本实验是先在表中存放数据,其它有正数、负数和0,通过程序对表的查询,统计表中包含正数、负数和0 的个数。

四、实验程序流程图五、参考程序DATA SEGMENTDBUF DB 1,2,-3,-4,-5,1,2,3,4,5,'#' ;7正3负,#为结束标志PLUS DB 1 ;正数个数MINS DB 1 ;负数个数DATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS: DATA,SS: STACK,CS: CODESTART: MOV AX, DATAMOV DS, AXMOV PLUS, 0 ;初始化MOV MINS, 0MOV DI, 0BG: CMP DBUF[DI], '#'JE EN ;遇到#结束INC DICMP DBUF[DI], 0 ;和0比较JG L1 ;大于JL L2 ;小于L1: INC PLUS ;正数个数加1JMP BG ;继续循环L2: INC MINS ;负数个数加1JMP BGEN: MOV AH, 4CHINT 21H六、编程,测试,记录程序运行结果。

实验8 数据排列实验(冒泡排序)一、实验要求1 利用PROTEUS 平台,编程实现8086 的由小到大的数据排列。

2 利用系统功能调用实现需要排序数据的输入和排序结果显示。

二、实验目的1、熟悉实验系统的编程和使用。

2、了解排列的简单算法。

3、了解“冒泡排序”法。

三、实验说明有序的数列更有利于查找。

本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有数比较一遍后,最大的数就会在数列的最后面。

再进行下一轮比较,找出第二大数据,如此下去,直到全部数据由小到大排列完成。

四、实验程序流程图五、参考程序DATA SEGMENTARRAY DB 25,46,3,75,5,30COUNT EQU $-ARRAY DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 60 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX, DATAMOV DS, AXMOV DX, COUNT-1MOV BL, 0FFHAGAINO: CMP BL, 0JE DONEXOR BL, BLMOV CX, DXMOV SI, COUNT-1 AGAIN1: MOV AL, ARRAY[SI]CMP AL, ARRAY[SI-1]JAE UNCHEXCH: XCHG ARRAY[SI-1],ALMOV ARRAY[SI],ALMOV BL, 0FFHUNCH: DEC SILOOP AGAIN1DEC DXJNZ AGAINODONE: JMP $CODE ENDSEND START六、编程,测试,记录程序运行结果。

由于在0040H 单元开始的6 个字节25,46,3,75,5,30 = 19H,2EH,03H,4BH,05H,1EH所以由小到大排列后为:03H,05H,19H,1EH,2EH,4BH实验9 系统功能调用(大小写转换)实验目的:1、掌握DOS调用的输入输出功能2、掌握分支程序设计的方法实验内容:1、每次从屏幕输入一个大写字母,并将其转换为相应的小写字母输出显示到屏幕上,然后继续输入下一个字母;2、此转换一直进行到输入“#”号为止;3、若输入过程中输入了除大写字母和“#”以外的其他字符,则在屏幕上给出错误提示信息:“ERROR!”,并继续进行下一个大写字母的输入。

相关主题