北京邮电大学微机原理与接口技术软件件实验报告
微机原理与接口技术软件实验报告
第一篇软件实验实验一存储器块操作实验一、实验目的1. 熟悉KEIL集成调试环境和汇编程序的调试方法。
2. 掌握存储器读写方法;3. 了解内存块的移动方法;二、实验说明实验1 指定某存储器的其实地址和长度,要求能将其内容赋值。
通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。
块移动是单片机常用操作之一,多用于大量的数据复制和图像操作。
例程2给出起始地址,用地址加1方法移动块,将指定源地址和长度的存储块移到指定目标为起始地址的单元中去。
移动3000H起始的256个字节到4000H起始的256个字节。
三、实验内容1. 试编程将片内RAM中的数据依次复制到片外RAM。
假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。
流程图:程序:运行结果:Memory显示,片内RAM中40H开始数据为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明测试数据已经成功输入片内RAM。
从片外RAM中1000H位置开始记录为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明片内RAM从40H开始的数据已经成功复制到片外从1000H开始的地址。
2. 两个16位无符号二进制数分别存放在片外RAM首址为2000H和2002H单元内,将它们相加,结果存入RAM 30H(低8位)、31H(高8位)。
程序(以0506H+CDEFH为例):0506H和CDEFH已存入片外单元,运算结果D2F5已存入30H和31H中。
四、思考题1. 如何将存储块的内容置成某固定值(例全填充为0FFH)?请用户修改程序,完成此操作。
答:将源程序中的MOV A, #01H 改为MOV A,#0FFH即可。
2. 若源块地址和目标地址有重叠,该如何避免?答:先执行一次数据转移操作将源块地址中的数据先暂存入一块地址与目标地址和源块地址均不重叠的存储区,再执行一次数据转移操作将暂存区的数据移入目标地址区域。
北京邮电大学微机原理软件实验报告
北京邮电大学微机原理软件实验报告信息与通信工程学院微机原理软件实验报告班级:姓名:学号:班内序号:时间:微机原理软件实验·报告实验一DEBUG 的使用一、实验目的1.掌握汇编程序的编辑,编译,连接和执行的全过程;2.学习和掌握用DEBUG 调试程序的方法。
二、实验内容1. 用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20 ;(自定)B DB 15 ;(自定)Y DB 3 DUP (0)Z DB 0, 0DAT ENDSSTA SEGMENT STACKDW 50 DUP (?)STA ENDSCOD SEGMENTASSUME CS: COD, DS: DATSTAR PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATMOV DS, AXMOV AX, STAMOV SS, AXMOV AL, AMOV Z, ALMOV Z+1, ALCALL SUB1MOV AL,B微机原理软件实验·报告MOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL, ZMOV AH, Z+1MUL AHADD WORD PTR Y, AXADC BYTE PTR[Y+2], 0RETSUB1 ENDPCOD ENDSEND STAR2. 通过编译,连接形成可执行文件。
3. 用DEBUG 将可执行文件调入,并进行调试。
1) 用D 命令观察数据区在内存中的具体内容,记录单元A 和B 的具体地址。
2) 用U 命令对目标代码反汇编,观察反汇编后的结果。
注意发现源程序的起始位置,并记录这个起始地址。
3) 用T 命令作单步跟踪调试。
比较每条指令执行后的结果和原来的理解是否一致,得出程序运行的结果:它们是写在什么单元,具体内容是什么;并判断结果是否正确。
北京邮电大学-微机原理硬件实验报告
微机原理与接口技术硬件实验报告学院:信息与通信工程学院班级:201******学生姓名:****** ******学号:201******* 201*******班内序号:** **实验一熟悉实验环境及IO的使用一、实验目的:1. 通过实验了解和熟悉实验台的结构,功能及使用方法。
2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。
3. 学会Debug 的使用及编写汇编程序二、实验内容:1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2.用汇编语言编写跑马灯程序。
(使用EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。
B.通过输出端口控制灯的工作状态(低电平灯亮)三、实验步骤:1.实验板的IO 端口地址为0E8E0H在Debug 下,I 是读命令。
(即读输入端口的状态---拨码开关的状态)O 是写命令。
(即向端口输出数据---通过发光管来查看)进入Debug 后,读端口拨动实验台上八位拨码开关输入I 端口地址回车屏幕显示 xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口输入 O 端口地址xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。
2. 在Debug 环境下,用a 命令录入程序,用g 命令运行C>Debug -amov dx, 端口地址mov al,输出内容out dx, almov ah, 0bhint 21hor al, aljz 0100int 20h-g运行查看结果,修改输出内容再运行查看结果分析mov ah, 0bhint 21hor al, aljz 0100int 20h该段程序的作用:检测键盘有没有按键,有则返回DOS。
没有继续执行3.利用EDIT 工具编写汇编写跑马灯程序程序实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。
北邮微机原理软件实验报告(精)
北邮微机原理软件实验报告(精)微机原理软件实验报告实验二分支、循环程序设计一.实验目的1.启动独立的汇编语言编程。
2.掌握基本分支和循环编程。
3.掌握最简单的DOS函数调用。
二、实验内容1.安排一个数据区,内存有若干个正数,负数和零。
每类数的个数都不超过9。
2.编写一个程序统计数据区中正数,负数和零的个数。
3.将统计结果在屏幕上显示。
三.流程图IV源代码datasegmentzdw0;数据adw0中的零数;大于0 bdw0的数据数;数据中小于0的数量numdw9,8,0,-7,6,-5,-4,3,2,-1,0,-8,-1,9,0,0,1;设定的一组数据,其中4个0,7个正数,6个负数,符合题目要求NDW($-num/2);此组中的数据数量为类型0DB0DH,0ah,‘零的数量:$’类型1DB0DH,0ah,‘格雷特的数量:$'type2db0dh,0ah,'numberoflessthan0:$'locatedwtype0,type1,type2dataendsstacksegmentstackdw128dup(?stackendscodesegmentassumeds:data,ss:stack,cs:codestart:movax,datamovds,axmovax,stack莫夫斯,斧头;初始化DS和Ss以指向stamovbx,offsetnum;将num中第一个数字的地址送入bxmovcx,n;将n中数字个数送入cxloop1:movax[bx];取出num中的第一个数字cmpax,0;与零相比jzifz;判断结果为是0,跳转到ifz处继续执行salax,1jcifl;如果判断结果小于0,跳转到IFLincwordptra;否则,a自加,然后继续执行程序jmpcontinueifl:incwordptrb;B计数加上1jmpcontinueifz:incz;Z计数加1继续:addbx,2;指针+2,继续送入下一数字looploop1;循环cx次判断movcx,3;共显示3个字符串xorbx,bxdisp:movdx,定位[bx]movah,09h;dos09号功能调用,显示字符串int21hmovdx,z[bx]adddx,'0';转换为ASCII码movah,02h;dos02号功能调用,显示字符int21haddbx,2;指针+2(DW)loopdispmovax,4c00hint21h;返回dos系统codeendsendstart五.运行结果Vi预览问题1.十进制数0--9所对应的ascii码是什么?如何将十进制数0--9在屏幕上显示出来?。
微机原理与接口技术实验报告
微机原理与接口技术实验报告
本次实验是关于微机原理与接口技术的实验报告,通过本次实验,我们将深入
了解微机原理与接口技术的相关知识,并通过实际操作来加深对这些知识的理解和掌握。
实验一,微机原理。
在本次实验中,我们首先学习了微机的基本原理,包括微机的组成结构、工作
原理和基本功能。
通过实际操作,我们了解了微机的主要组成部分,如中央处理器(CPU)、内存、输入输出设备等,并学习了它们之间的工作原理和相互配合关系。
同时,我们还学习了微机的基本指令系统和数据传输方式,加深了对微机工作原理的理解。
实验二,接口技术。
在接口技术的实验中,我们学习了微机与外部设备之间的接口技术,包括并行
接口、串行接口和通用接口等。
我们通过实际操作,了解了这些接口技术的工作原理和应用场景,学会了如何通过接口技术实现微机与外部设备的数据交换和通信。
实验三,实验综合。
在本次实验的最后,我们进行了一个综合实验,通过实际操作来综合运用微机
原理和接口技术的知识,实现一个具体的功能。
通过这个实验,我们加深了对微机原理与接口技术的理解,掌握了如何将理论知识应用到实际操作中。
总结。
通过本次实验,我们深入学习了微机原理与接口技术的相关知识,并通过实际
操作加深了对这些知识的理解和掌握。
微机原理与接口技术作为计算机科学与技术的基础知识,对我们今后的学习和工作都具有重要意义。
希望通过这次实验,能够对大家的学习和工作有所帮助,并为今后的学习打下坚实的基础。
以上就是本次实验的实验报告,希望对大家有所帮助。
感谢大家的阅读!。
微机原理与接口技术实验报告
微机原理与接口技术实验报告实验目的:本次实验旨在熟悉并掌握微机原理与接口技术的相关知识,通过实例操作和分析实验数据,加深对微机原理与接口技术的理解。
一、实验器材与软件1. 硬件器材:计算机主机、外设设备2. 软件工具:操作系统、编程软件二、实验步骤及结果分析1. 实验1:计算机开机自检在实验中,通过开机启动计算机,观察计算机进行自检的过程。
根据显示屏上的自检信息,可以判断计算机硬件的工作状态。
2. 实验2:串口通信测试在本实验中,通过串口通信实现计算机与外设设备之间的数据传输。
首先,将串口接口连接到计算机主机,然后进行相应的设置,包括波特率、数据位、停止位和校验位等。
在实验中,通过编写相应的程序,实现计算机与外设设备之间的数据交互。
通过观察实验结果,判断串口通信是否正常。
3. 实验3:并口通信测试本实验旨在通过并行口通信实现计算机与外设设备之间的数据传输。
首先,将并行口接口连接到计算机主机。
然后,根据实验要求进行相应的设置,包括数据总线的宽度、传输模式等。
通过编写程序,实现计算机与外设设备之间的数据交互。
观察实验结果,判断并口通信是否正常。
4. 实验4:USB接口测试在本实验中,通过USB接口实现计算机与外设设备之间的数据传输。
首先,将USB接口连接到计算机主机。
然后,在计算机中安装相应的驱动程序。
通过编写程序,实现计算机与外设设备之间的数据交互。
观察实验结果,判断USB接口是否正常工作。
5. 实验5:网络接口测试本实验旨在通过网络接口实现计算机之间的数据传输。
首先,将计算机连接到局域网中的其他计算机。
然后,进行相应的设置,包括IP地址、子网掩码等。
通过编写程序,实现计算机之间的数据交互。
观察实验结果,判断网络接口是否正常工作。
三、实验总结通过本次实验,我对微机原理与接口技术有了更深入的了解,掌握了串口、并口、USB接口和网络接口等常用接口的使用方法。
通过实验的操作和分析,我对接口通信的原理和实现方式有了更详细的了解,对计算机与外设设备之间的数据传输有了更清楚的认识。
北京邮电大学微机原理软件
微机原理软件实验报告班级:姓名:学号:班内序号:指导老师:实验二分支、循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.二、实验内容1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过 9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.4.(选作)统计出正奇数,正偶数,负奇数,负偶数以及零的个数.三、实验设计四、源代码DATA SEGMENTARRAY DB -1,-2,-3,-4,-5,-6,0,1,2,3,5,4,5,6,0COUNT EQU $-ARRAYPOSI DB 0 ;正数NEGA DB 0 ;负数ZERO DB 0 ;零ODDPOS DB 0 ;正奇数EVENPOS DB 0 ;正偶数ODDNEG DB 0 ;负奇数EVENNEG DB 0 ;负偶数STRING1 DB '正数个数:','$' ;把最后的统计结果显示在屏幕上STRING2 DB '负数个数:','$' ;下同STRING3 DB '零的个数:','$'STRING4 DB '正奇数个数:','$'STRING5 DB '正偶数个数:','$'STRING6 DB '负奇数个数:','$'STRING7 DB '负偶数个数:','$'DATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV CX,COUNTLEA BX,ARRAY ;把数据段的偏移地址给BXLOOP1: CMP BYTE PTR [BX],0JGE POSINC NEGA ;统计负数TEST BYTE PTR [BX],01H ;利用奇数的二进制表示式最后一位必为1的特JZ ENEG ;点来判断奇偶INC ODDNEG ;统计负奇数JMP NEXTENEG: INC EVENNEG ;统计负偶数JMP NEXTPOS: JZ ZERINC POSI ;统计正数TEST BYTE PTR [BX],01HJZ EPOSINC ODDPOS ;统计正奇数JMP NEXTEPOS: INC EVENPOS ;统计正偶数JMP NEXTZER: INC ZERO ;统计零NEXT: INC BXLOOP LOOP1MOV AH,09H ;显示正数MOV DX,SEG STRING1MOV DS,DXLEA DX,STRING1INT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV DL,0AH ;显示空格INT 21H ;显示回车MOV DL,0DHINT 21HMOV AH,09H ;显示负数MOV DX,SEG STRING2MOV DS,DXLEA DX,STRING2INT 21HMOV AH,02HMOV DL,NEGAADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示零MOV DX,SEG STRING3MOV DS,DXLEA DX,STRING3INT 21HMOV AH,02HMOV DL,ZEROADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示正奇数MOV DX,SEG STRING4MOV DS,DXLEA DX,STRING4INT 21HMOV AH,02HMOV DL,ODDPOSADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示正偶数MOV DX,SEG STRING5MOV DS,DXLEA DX,STRING5INT 21HMOV AH,02HMOV DL,EVENPOSADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示负奇数MOV DX,SEG STRING6MOV DS,DXLEA DX,STRING6INT 21HMOV AH,02HMOV DL,ODDNEGADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AH,09H ;显示负偶数MOV DX,SEG STRING7MOV DS,DXLEA DX,STRING7INT 21HMOV AH,02HMOV DL,EVENNEGADD DL,30HINT 21HMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AX,4C00HINT 21HCODE ENDSEND START五、程序运行结果六、预习题1.十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:十进制数0—9对应的ASCII码是30H—31H。
北邮微机原理软件实验报告
实验一1.实验要求:编一程序,将地址偏移量为100H单元开始的256个单元分别写入00H,01H,……,FFH数据;统计写入的数据块的0元素、正元素、负元素的个数,并分别将统计结果送入上述数据块后的三个单元中;用DOS功能调用显示上面数据快各单元(包括统计结果)内容,要求每行显示16个数据,两个数据之间用空格隔开。
程序设计思路:分配256个单元存放数据00H,01H,……,FFH,3个单元存放统计结果。
约定:DH存放0的个数,BH存放负数的个数,BL存放正数的个数,然后进行将256个数据一一与0进行比较,得到 DH、BH、BL。
将DH、BH、BL 存入SI的最后三个单元。
最后在以高、低4位,依次将每个单元的数据输出。
2. 程序流程:4.子程序:DISP PROC NEAR ;Show number MOV DL,AL MOV AH,2 INT 21H RET DISP ENDP开始初始化;SI 前256个单元存放00 H……FFH;CX=256;DH=0;BX=0;CMP AL ,0;MOV AL ,[SI] CX=0?将DH ,BX 存入SI ;INC SI ;CX=259;YESINC DH ;INC BHINC BL显示高4位显示低4位; 添加空格; INC SI ;BH=0??BH=16;CX=0?SF=ELSZF=1N ONO YE SN O终止YE实验二1.实验要求:编一程序,把键入的十六进制数转换成十进制,要求:(1)在屏幕上显示转换的十进制数,键入的最大值为FFFFH;(2)若键入非16进制的数,则提示错误;(3)程序中至少用一个子程序和宏命令。
2.程序设计思路:首先判断键入的字符是否为合法的十六进制字符,若是十六进制,将其转化成二进制数值,放入BX中,然后接收下一个字符,并将上一个字符左移4位,再讲此时的BX与接收到的BX相加,直到键入回车,停止接收。
然后通过除以10000,依次将余数除以1000、100、10、1,将二进制转化为十进制,再显示出来。
微机原理与接口技术实验报告
微机原理与接口技术实验报告实验一,微机原理实验。
1. 实验目的。
本实验旨在通过对微机原理的实验,加深学生对微机原理相关知识的理解,提高学生的动手能力和实验技能。
2. 实验内容。
本实验主要包括微机原理的基本知识、微处理器的结构和功能、微机系统的总线结构、存储器与I/O接口。
3. 实验步骤。
(1)了解微机原理的基本知识,包括微处理器的分类、功能和工作原理。
(2)学习微机系统的总线结构,掌握总线的分类、功能和工作原理。
(3)了解存储器与I/O接口的基本概念和工作原理。
(4)进行实际操作,通过实验板进行微机原理实验,加深对微机原理知识的理解。
4. 实验结果。
通过本次实验,我深刻理解了微机原理的基本知识,掌握了微处理器的结构和功能,了解了微机系统的总线结构,以及存储器与I/O接口的工作原理。
通过实际操作,我对微机原理有了更深入的认识,提高了自己的动手能力和实验技能。
实验二,接口技术实验。
1. 实验目的。
本实验旨在通过对接口技术的实验,加深学生对接口技术相关知识的理解,提高学生的动手能力和实验技能。
2. 实验内容。
本实验主要包括接口技术的基本知识、接口电路的设计与调试、接口技术在实际应用中的作用。
3. 实验步骤。
(1)了解接口技术的基本知识,包括接口的分类、功能和设计原则。
(2)学习接口电路的设计与调试,掌握接口电路设计的基本方法和调试技巧。
(3)了解接口技术在实际应用中的作用,包括各种接口的应用场景和实际案例。
(4)进行实际操作,通过实验板进行接口技术实验,加深对接口技术知识的理解。
4. 实验结果。
通过本次实验,我深刻理解了接口技术的基本知识,掌握了接口电路的设计与调试方法,了解了接口技术在实际应用中的作用。
通过实际操作,我对接口技术有了更深入的认识,提高了自己的动手能力和实验技能。
总结。
通过微机原理与接口技术的实验,我对微机原理和接口技术有了更深入的理解,提高了自己的动手能力和实验技能。
希望通过今后的学习和实践,能够更加深入地掌握微机原理与接口技术的知识,为将来的工作和研究打下坚实的基础。
北邮微机原理 第二次软件实验报告
微机原理与接口技术中断实验与编程报告姓名学院信息与通信工程学院专业班级学号班内序号目录一、实验目的 (2)二、实验任务及内容 (2)1设计思路 (2)2流程图 (3)3源代码 (4)4子程序清单 (9)三、实验结果 (10)四、实验总结 (12)一、实验目的编一程序,在显示器上显示时、分、秒。
借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。
在中断服务程序中管理刷新时、分、秒。
要求:输入文件名,(如CLK)后,清屏后显示:Current time is xx:xx:xx(时分秒键盘输入)打回车,时、分、秒开始计时。
时钟不停的刷新。
当键入ctrl+c时,停止计时,返回系统,且系统正常运行不死机。
二、实验任务及内容1设计思路1)定义数据段和堆栈段。
数据段存放中断次数count100,输入的时间信息(8位字符),用于提示的字符串信息。
堆栈段存放256个空字符。
2)宏名check的定义。
判断输入的字符是否超出允许输入的范围,若超出范围,报错后返回程序开始处。
3)主程序。
初始化寄存器。
清屏。
(执行过程见注释部分)显示字符串str1。
用于说明输入格式(xx:xx:xx)和输入后开始计时的方式(按回车键开始)将输入的8个字符存入数据段。
使用DOS功能调用01H,通过DI,把存放在AL 中的键入字符存入以tenhour为开始的数据段,并使用宏指令check判断输入字符是否超过范围。
键入回车,开始计时。
使用DOS 功能调用01H ,把键入的键与回车键对应码0DH进行比较。
若键入其他键,报错,返回程序开始。
将原来08H 中断号设置的入口地址换成本程序中timer 的起始地址,保证在发生08H 中断时,程序自动进入timer 过程。
为时钟计时器置初值。
43H 端口是指8253三通道定时器中的命令寄存器,所使用的命令字36H 表示选用0通道定时器,以3号方式(产生方波)计数等。
北邮-通信工程-微机原理与接口技术-硬件实验-实验报告
北邮-通信工程-微机原理与接口技术-硬件实验-实验报告实验一I/O地址译码一、实验目的掌握I/O地址译码电路的工作原理。
二、实验原理和内容1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O 地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… ,当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
例如:执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲;执行下面两条指令MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲。
利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
2、接线:Y4/IO地址接CLK/D触发器Y5/IO地址接CD/D触发器D/D触发器接SD/D角发器接+5VQ/D触发器接L7(LED灯)或逻辑笔三、硬件接线图与软件程序流程图1、硬件接线图2、软件程序流程图开始Y4输出一个负脉冲调用延时子程序Y5输出一个负脉冲调用延时子程序否CX-1=0?是结束,返回DOS四、源程序DATA SEGMENTDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKDELAY1 P ROC NEAR ;延时子程序MOV BX,500HPUSH CXLOOP2: MOV CX,0FFFHWAIT1: LOOP WAIT1DEC BXJNZ LOOP2POP CXRETDELAY1 E NDP;L7闪烁START: MOV CX,0FFFFH ;最大可循环次数LOOP1: MOV DX,2A0H ;灯亮OUT DX,ALCALL DELAY1MOV DX,2A8H ;灯灭OUT DX,ALCALL DELAY1LOOP LOOP1 ;循环闪烁CODE ENDSEND START五、实验结果灯L7闪烁,一段时间后停止。
微机原理及接口技术实验报告
微机原理及接口技术实验报告一、实验目的本实验旨在通过掌握微机原理和接口技术的实验操作,实践相关理论知识,加深对微机原理和接口技术的理解。
二、实验设备和材料1.计算机主机2.操作系统3.接口卡4.编程软件三、实验原理微机原理是指通过学习微机的结构、功能和工作原理,从硬件层面掌握微机的基本知识。
接口技术是指连接不同设备之间的通信和数据交换技术,通过学习接口技术可以实现设备的互联和数据的传输。
四、实验步骤1.将接口卡插入计算机主机的扩展槽中。
2.启动计算机,并加载操作系统。
3.打开编程软件,编写实验程序。
4.将编写好的程序烧录到接口卡中。
5.连接外部设备和接口卡,并确认连接正确无误。
6.运行程序,并观察外部设备和接口卡之间的数据交互情况。
7.分析实验结果,并记录实验数据。
8.关闭程序和计算机。
五、实验结果及分析通过实验我们成功连接了外部设备和接口卡,并实现了数据的传输和交互。
在程序运行过程中,我们观察到外部设备正常工作,并且与接口卡之间的通信稳定可靠。
根据实验数据分析,我们可以得出接口卡的性能良好,并且能够满足实际应用需求。
六、实验心得通过这次实验,我对微机原理和接口技术有了更深入的理解。
实践操作让我加深了对硬件设备和软件编程的认识,掌握了实现设备互联和数据传输的基本方法。
在实验过程中,我遇到了一些问题,如接口卡的插入和连接问题,但通过查阅资料和请教老师同学,最终成功解决了这些问题。
我发现实验不仅帮助我巩固了理论知识,也提高了我的实践能力和解决问题的能力。
总结起来,微机原理和接口技术是计算机相关专业的基础课程之一,通过实验的方式学习可以更好地将理论知识与实际应用相结合。
我相信通过不断的实践和学习,我会在微机原理和接口技术方面有进一步的提高和发展。
北邮 微机原理实验报告
北邮微机原理实验报告一、实验目的本实验旨在通过对微机原理的实际操作,加深对计算机内部结构和工作原理的理解,并通过实验验证理论知识的正确性。
二、实验设备和材料•计算机硬件设备:PC机一台、示波器一台、数字信号发生器一台。
•软件工具:TASM、MASM汇编语言编译器。
三、实验内容本实验分为以下几个步骤:1. 准备工作•将PC机与示波器、数字信号发生器连接。
•打开PC机,进入实验环境。
2. 实验一:简单指令的执行•编写一个简单的汇编程序,实现两个数相加并将结果存储到指定寄存器中。
•使用TASM或MASM编译器对汇编程序进行编译,生成可执行文件。
•运行可执行文件,在示波器上观察到相加过程的波形。
3. 实验二:数据传输操作•编写一个汇编程序,实现数据在不同寄存器和内存之间的传输。
•编译并运行程序,通过观察PC机上的输出结果,验证数据传输的正确性。
4. 实验三:逻辑运算和移位操作•编写程序,实现逻辑运算和移位操作,并观察运算结果。
•通过数字信号发生器产生相应的输入信号,验证程序的正确性。
5. 实验四:中断处理•编写一个汇编程序,实现对中断请求的响应和处理。
•通过示波器观察中断请求和处理的波形,验证程序的正确性。
6. 实验五:串行通信操作•编写程序,实现串行通信的发送和接收操作。
•通过示波器观察串行通信的波形,验证程序的正确性。
四、实验结果和分析•对每个实验步骤进行记录,并详细分析实验结果。
•比较实验结果与理论预期是否一致,并给出原因分析。
五、实验心得通过本次实验,我深刻理解了微机原理的实际应用和操作过程。
通过实际操作,我对计算机内部结构和工作原理有了更深入的了解,并通过实验验证了理论知识的正确性。
同时,我也意识到在实际操作中的一些细节和注意事项,这对我今后的学习和工作都有很大的帮助。
六、实验总结通过本次实验,我不仅掌握了微机原理的实际应用技能,还深化了对计算机内部结构和工作原理的理解。
实验过程中,我遇到了一些问题,但通过思考和实践,逐步解决了这些问题,并取得了满意的实验结果。
微机原理与接口技术软件试验报告
微机原理与接口技术软件试验报告一. 目的1. 进一步掌握子程序的设计2. 进一步掌握分支程序的设计3. 掌握循环程序的设计;4. 掌握中断程序设计方法;5. 练习数据格式的转换;6. 使用DEBUG 调试复杂程序;3. 掌握使用DOS 系统功能调用进行输入/输出.二. 内容设计一个除法器。
被除数可以为任意一个16位带符号十进制数,除数可为任意一个8位带符号十进制数.三. 作业要求1. 利用DOS 1号功能调用,顺序从键盘输入被除数、除运算符“/”及除数与回车. 要求:✓ 输入的数若为负数,则前面应冠以“-”号, 如-65;✓ 输入时若出现以下任一种情况,则显示“Input error!” (之后程序须提示重新输入):⏹ 输入的被除数在范围]32767,32768[-之外. ⏹ 被除数之后紧跟的不是除运算符“/”.⏹ 输入的除数在范围]127,128[-之外. 2. 若正确输入,则屏幕应显示除法运算的结果, 即商及余数. 例如若输入: 56/9则屏幕下一行应显示: 56/9=6, remainder=2.此时, 如果所输入的除数值为(你所在班级的最后两位数字 + 你在该班内的班内序号), 则程序显示完运算结果后结束并返回DOS. 否则,如果程序开始运行以来已连续5次进行了正确的输入并给出结果,则程序结束并返回DOS; 否则程序继续提示输入.3. 如果被除数为0,则显示错误信息: “Divided by 0!”,之后立即返回DOS.4.除法运算操作须使用除法指令IDIV (除数为0时可以例外), 当结果(商)超出范围[ 时, 显示错误信息: “Overflow!”, 之后立即返回DOS.,128]127***注: 应通过是否引起0号中断来判断除法运算是否溢出, 且0号除法溢出中断服务程序必须放在代码段偏移地址为0100H开始的地方.5.显示运算结果的商或余数前,必须先进行带符号补码表示的数到对应的十进制ASCII码数字串的转换. 该转换工作必须写成一个子程序, 且该子程序有如下要求:; 子程序功能:将一个(字节)带符号补码表示的数转换成对应的十进制ASCII码数字串,并以'$'结束; 入口参数: AL = 待转换的带符号数(一个字节长,最高位为符号位); 出口参数: DI = 存放相应结果ASCII码串的首地址; 例如: 若入口参数AL = 93H, 则子程序返回时,DS:DI所指处将存有如下字符串: '-109$'.注: 该作业必须最迟在实验验收前一周上交.四.实验要求(现场演示, 程序编辑除外)1.编辑前述作业三完成的8086汇编源程序,然后进行汇编及连接以生成可执行文件.2.执行程序, 演示如下各种输入情况:(a)被除数与除数均为正数(b)被除数与除数均为负数(c)被除数与除数的符号位不同(d)输入如下特殊情况: -128/1; 12345/11; 23/0; 1134/127; 1145/128;32768/12345; -32769/126.(e)输入的除数值为: 你所在班级的最后两位数字+ 你在该班内的班内序号.3.调用DEBUG软件对该可执行文件进行调试,并顺序完成如下所提要求或回答相关问题:(a)设置相关断点,在输入完被除数并转换成等效的带符号二进制数后停下,指出所输入的被除数存放位置.(b)设置相关断点,在输入完除数并转换成等效的带符号二进制数后停下,指出所输入的除数存放位置.(c)设置相关断点, 在执行除法运算指令IDIV 之前停下,解释当前堆栈内容.(d)输入合适的被除数与除数以便能引起0号除法溢出中断, 在执行到溢出中断服务程序的第一条指令前停下,检查并解释当前堆栈内容. DATA SEGMENTinput1 DB 50 DUP(?)input2 DB 50 DUP(?)COUNT1 DB ? ;计算被除数负号输入次数COUNT2 DB ? ;计算除数负号输入次数COUNT DB ? ;计算/输入次数C5 DB ? ;5次SUM1 DW ? ;存放被除数的大小SUM2 DB ? ;存放除数的大小cbei DW ? ;被除数位数cchu DW ? ;除数位数f1 DB ? ;beif2 DB ? ;-f3 DB ? ;chuYICHU DB ? ;溢出标志位CZ DB ? ;位数SEGDATA DW ?OFFDATA DW ?STRING1 DB 'Input error!',0DH,0AH,'$'STRING2 DB 0DH,0AH,'Divided by 0!',0DH,0AH,'$' STRING3 DB 0DH,0AH,'Overflow!',0DH,0AH,'$' STRING4 DB 'Please input again!',0DH,0AH,'$' STRING5 DB 0DH,0AH,'OVER',0DH,0AH,'$' STRSHOW DB 40 DUP('$')STRIN DB 50 DUP('$')STRHELP DB 0DH,0AH,'$' ;换行STRHELP1 DB ',remainder=','$'STR5 D B 'Times=5','$'DATA ENDSSTACK SEGMENT STACK 'STACK'DB 1000 DUP (0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA ORG 100HINT00 PROC FARPOP CXADD CX,2PUSH CXMOV SEGDATA,SEG STRING3MOV OFFDATA,OFFSET STRING3CALL F AR PTR DISPMOV YICHU,1IRETINT00 ENDPDISP PROC FAR ;显示子程序PUSH AXPUSH DXPUSH DSMOV AH,09H ;显示字符串MOV DX,SEGDATAMOV DS,DXMOV DX,OFFDATAINT 21HPOP DSPOP DXPOP AXRETDISP ENDPSHOW PROC FARMOV CZ,0MOV DI,OFFSET STRSHOWCMP A L,0BJ1: JS BJ3JNS BJ4BJ3: JNO FU ;最高位是1,次高位是1 JO ZHENG ;最高位是1,次高位是0BJ4: JO FU ;最高位是0,次高位是1 JMP ZHENG ;最高位是0,次高位是0 FU: NEG AL ;负数的绝对值PUSH DXMOV DL,2DH ;-号MOV [DI],DLPOP DXINC DIZHENG: MOV AH,0MOV BL,0AHDIV BL ;AL...AHMOV DH,AHMOV DL,0ADD DH,30HPUSH DXINC CZCMP A L,0 ;若商为不零,继续重复JNZ ZHENGMOV CL,CZMOV CH,0LOOP10: POP DXMOV [DI],DHINC DILOOP LOOP10PUSH DXMOV DL,24HMOV [DI],DLPOP DXRETSHOW ENDPSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV C5,5HLOOPA: MOV COUNT1,1MOV COUNT2,1MOV COUNT,1MOV SUM1,0MOV SUM2,0MOV f1,1 ;beiMOV f2,1 ;-MOV f3,1 ;chuMOV SI,OFFSET input1MOV DI,OFFSET input2MOV cbei,0MOV cchu,0MOV YICHU,0MOV BX,OFFSET STRININPUT: MOV AH,1INT 21HCMP A L,1BH ;检测是否按下ESC退出键JNZ A1JMP OUTALL2A1: CMP AL,2DH ;若不是-号,跳到A JNZ A;-号的处理CMP f1,1JZ GCMP f2,0JZ DE: MOV SEGDATA,SEG STRHELPMOV OFFDATA,OFFSET STRHELPCALL D ISPMOV SEGDATA,SEG STRING1 MOV OFFDATA,OFFSET STRING1CALL D ISPMOV SEGDATA,SEG STRING4MOV OFFDATA,OFFSET STRING4CALL D ISPJMP STARTG: CMP C OUNT1,1 ;被除数是否只有一个- JNZ EDEC COUNT1MOV [BX],ALINC BXJMP INPUTD: CMP f3,1JNZ ECMP C OUNT2,1 ;000JNZ EDEC COUNT2MOV [BX],ALINC BXJMP INPUTE3: JMP EA: CMP A L,2FH ;若不是/号,跳到B JNZ B;/的处理CMP f1,0JNZ E3CMP f2,1JNZ E3CMP f3,1JNZ E3CMP C OUNT,1JNZ E3DEC COUNTDEC f2MOV [BX],ALINC B XJMP INPUTB: CMP A L,0DH ;若不是回车,跳到F JNZ F;回车的处理CMP f1,0JNZ E2CMP f2,0JNZ E2CMP f3,0JNZ E2PUSH DXMOV DL,3DH ;=号MOV [BX],DLINC BXMOV DL,24H ;$MOV [BX],DLPOP DXJMP OUT1F: CMP A L,30H ;判断输入的是不是数字JL E2CMP A L,39HJG E2CMP f2,1JNZ chushubeichu: MOV f1,0MOV [SI],ALINC SIMOV [BX],AL;INC BXINC cbeiJMP INPUTchushu: MOV f3,0MOV [DI],ALINC DIMOV [BX],ALINC BXINC cchuJMP INPUT;JMP OUT1E2: JMP E3OUT1: CMP c bei,5JG E2JL I ;被除数小于5位,在合理范围内,跳到IH: MOV SI,OFFSET input1 ;输入的被除数是5位MOV AL,[SI]SUB AL,30HCMP A L,3 ;判断5位被除数是否超出范围JG E2JL IMOV AL,[SI+1]SUB AL,30HCMP A L,2JG E2JL IMOV AL,[SI+2]SUB AL,30HCMP A L,7JG E2JL IMOV AL,[SI+3]SUB AL,30HCMP A L,6JG E2JL IMOV AL,[SI+4]SUB AL,30HCMP A L,7JLE ICMP A L,8JG E2CMP C OUNT1,0JNZ E2I: CMP c chu,3JG E1JL J ;除数小于3位,在合理范围内,跳到JMOV DI,OFFSET input2 ;输入的除数是3位MOV AL,[DI]SUB AL,30HCMP A L,1 ;判断3位除数是否超出范围JG E1JL JMOV AL,[DI+1]SUB AL,30HCMP A L,2JG E1JL JMOV AL,[DI+2]SUB AL,30HCMP A L,7JLE JCMP A L,8JG E1CMP C OUNT2,0JNZ E1JZ JE1: JMP E2J: MOV CX,cbeiMOV SI,OFFSET input1LOOP1: MOV BL,[SI] ;求出输入被除数的值SUB BL,30HMOV BH,0MOV AX,SUM1PUSH CXMOV CL,3SHL AX,CLSHL SUM1,1ADD SUM1,AXADD SUM1,BXPOP CXINC SILOOP LOOP1;CMP SUM1,0;JZ OUT0MOV CX,cchuMOV DI,OFFSET input2LOOP2: MOV BL,[DI] ;求出输入除数的值SUB BL,30HMOV AH,SUM2PUSH CXMOV CL,3SHL AH,CLSHL SUM2,1ADD SUM2,AHADD SUM2,BLPOP CXINC DILOOP LOOP2CMP S UM2,0 ;除数为零时,显示“Divided by 0!”JZ OUT0JMP OUTDOSOUT0: MOV SEGDATA,SEG STRING2MOV OFFDATA,OFFSET STRING2CALL D ISPJMP OUTALLOUTDOS: CMP C OUNT1,0JNZ K ;被除数为正数NEG SUM1 ;被除数为负数,求补K: CMP C OUNT2,0JNZ L ;除数为正数NEG SUM2 ;除数为负数,求补L: STI ;允许中断MOV AL,0MOV AH,35HINT 21HPUSH ESPUSH BXPUSH DSMOV AX,SEG INT00MOV DS,AXMOV DX,OFFSET INT00MOV AL,0MOV AH,25HINT 21HPOP DSMOV AX,SUM1 ;计算出商和余数MOV BL,SUM2IDIV BL ;AL???AHPOP DXPOP CXPUSH DSPUSH AXMOV DS,CXMOV AL,0MOV AH,25HINT 21HPOP AXPOP DSCMP Y ICHU,1JZ OUTALL1MOV SEGDATA,SEG STRHELPMOV OFFDATA,OFFSET STRHELPCALL D ISPMOV SEGDATA,SEG STRINMOV OFFDATA,OFFSET STRINCALL D ISPPUSH AX ;显示商CALL S HOWPOP AXMOV SEGDATA,SEG STRSHOWMOV OFFDATA,OFFSET STRSHOWCALL D ISPMOV SEGDATA,SEG STRHELP1MOV OFFDATA,OFFSET STRHELP1CALL D ISPPUSH AXMOV AL,AH ;显示余数CALL S HOWPOP AXJMP YOUTALL1:JMP OUTALLY: MOV SEGDATA,SEG STRSHOWMOV OFFDATA,OFFSET STRSHOWCALL D ISPCMP S UM2,32H ;若输入的除数为50,则返回DOS JZ OUTALLMOV SEGDATA,SEG STRHELPMOV OFFDATA,OFFSET STRHELPCALL D ISPDEC C5CMP C5,0JZ T5JMP LOOPAT5: MOV SEGDATA,SEG STR5MOV OFFDATA,OFFSET STR5CALL D ISPJMP OUTALLOUTALL2:MOV S EGDATA,SEG STRING5MOV OFFDATA,OFFSET STRING5CALL D ISPOUTALL: MOV AH,4CHINT 21HCODE ENDSEND START。
北邮—微机原理与接口技术(3)
微机原理与接口技术硬件实验报告目录3.实验三8253计数器/定时器的应用 (3)3.1.实验目的 (3)3.2.实验内容 (3)3.2.1.连接电路并测试 (3)3.2.2.音乐播放 (6)3.2.3.弹琴 (17)3.3.思考题 (27)3.4.心得体会 (27)参考资料 (28)声明与致谢 (28)3.实验三8253计数器/定时器的应用3.1.实验目的学习掌握8253用作定时器的编程原理。
3.2.实验内容3.2.1.连接电路并测试8253的CS接译码器输出Y1(其地址为E820-E827H);8253的OUT接蜂鸣器的BELL端;8253的门控信号GATE接+5V;8253的CLK端接Q7(32KHz);清零复位电路中的T/C端接地(或接RESET端)。
图13电路连接示意(局部)图14线路连接在本实验中,只采用定时器0,方式3,只用低字节初始化,故初始化控制字为00010110B,即16H。
它发往控制口E803H。
初值赋给端口E800H。
利用下表,在debug模式下,测试8253与蜂鸣器工作状况。
表4不同音高对应分频数(基频32KHz)音名分频数(十六进制)低音中音高音更高音甚高音Do80402010Re72391C0EMi663319Fa603018So552B15La4D2613Si87442211 CODE(debug mode)MOV DX,E823MOV AL,16OUT DX,ALMOV DX,E820MOV AL,80OUT DX,AL经检验,蜂鸣器发声正常。
3.2.2.音乐播放完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。
程序设计:音乐为巴赫的小步舞曲,只放一遍。
放音乐时,在最左边的数码管上显示播放的音符。
放完音乐或用户敲击键盘时退出程序返回DOS。
返回DOS 前,数码管全灭,蜂鸣器静音。
流程图如下:图15音乐播放流程图程序源代码:CODE(minuet.asm);FILENAME:minuet.asm;AUTHOR:XIAO,Zhiqing(No.13,Cl.07105);DATE:20091223;DESCRIPTION:play music;=============macro=============;macro:myOut(WARNING:it may change the value of AL);it's strongly recommended that data be ALmyOut MACRO portAddr,dataPUSH DXMOV DX,portAddrMOV AL,dataOUT DX,ALPOP DXENDM;macro:myLutOut(WARNING:it may change the value of AL);it's strongly recommended that data be ALmyLutOut MACRO portAddr,lut,dataPUSH DXPUSH BXMOV BX,OFFSET lutMOV AL,dataXLAT lutMOV DX,portAddrOUT DX,ALPOP BXPOP DXENDM;macro:myIn(WARNING:it may change the value of AL);it's strongly recommended that data be ALmyIn MACRO portAddr,dataPUSH DXMOV DX,portAddrIN AL,DXMOV data,ALPOP DXENDM;=============data segment=============Data SEGMENT;Segments Lookup TableSegLut DB0EDH,21H,0F4H,0F1H,39H;"01234"DB0D9H,0DDH,61H,0FDH,0F9H;"56789"DB7DH,9DH,0CCH,0B5H,0DCH,5CH; "ABCDEF"DB3DH,8CH;'H'(10H)'L'(11H)DB00H,10H;''(12H)'-'(13H)space EQU12Hbar EQU13H;Content index array to printContent DB12H,12H,12H,12H,12H,12H;Voice to playFreq DB0H;freqsiF EQU87H;32k/240;0do0EQU80H;32k/256;1re0EQU72H;32k/288;2mi0EQU66H;32k/320;3fa0EQU60H;32k/341;4so0EQU55H;32k/384;5la0EQU4DH;32k/427;6si0EQU44H;32k/480;7do1EQU40H;32k/512;8re1EQU39H;32k/576;9mi1EQU33H;32k/640;Afa1EQU30H;32k/682;Bso1EQU2BH;32k/768;Cla1EQU26H;32k/853;Dsi1EQU22H;32k/960;Edo2EQU20H;32k/1024;Fre2EQU1CH;mi2EQU19H;fa2EQU18H;so2EQU15H;la2EQU13H;si2EQU11H;do3EQU10H;re3EQU0EH;;music freq lookup tableFreqLut DB siF; (00H)DB do0,re0,mi0,fa0,so0,la0,si0;(01H-07H)DB do1,re1,mi1,fa1,so1,la1,si1;(08H-0EH)DB do2;(0FH)DB re2,mi2,fa2,so2,la2,si2DB do3,re3;music display lookup tableTubeLut DB 61H;(00H)DB21H,0F4H,0F1H,39H,0D9H,0DDH,61H; (01H-07H)DB21H,0F4H,0F1H,39H,0D9H,0DDH,61H; (08H-0EH)DB21H;(0FH)DB0F4H,0F1H,39H,0D9H,0DDH,61HDB21H,0F4H,0F1H,39H,0D9H,0DDH,61H ;button matrixbuttonPressed DB0;0FFH for pressed,00H for not.buttonRow DB0buttonCol DB0buttonIndex DB0buttonEnable DW0000Hlab EQU1;1stand for Xue9,0stand for Jiao2IF lab;Xue9PortSw EQU0E8E0H;8255PortA EQU0E800HPortB EQU0E801HPortC EQU0E802HPortControl EQU0E803H;8253Timer0EQU0E820HTimer1EQU0E821HTimer2EQU0E822HTimerControl EQU0E823HELSE;Jiao2PortSw EQU0EEE0H;8255PortA EQU0EE00HPortB EQU0EE01HPortC EQU0EE02HPortControl EQU0EE03H;8253Timer0EQU0EE20HTimer1EQU0EE21HTimer2EQU0EE22HTimerControl EQU0EE23HENDIFNotes DB07H+5,07H+1,07H+2,07H+3,07H+4,07H+5, 07H+1,07H+1DB07H+6,07H+4,07H+5,07H+6,07H+7,0EH+1, 07H+1,07H+1DB07H+4,07H+5,07H+4,07H+3,07H+2,07H+3, 07H+4,07H+3,07H+2,07H+1DB00H+7,07H+1,07H+2,07H+3,07H+1,07H+2DB07H+5,07H+1,07H+2,07H+3,07H+4,07H+5, 07H+1,07H+1DB07H+6,07H+4,07H+5,07H+6,07H+7,0EH+1, 07H+1,07H+1DB07H+4,07H+5,07H+4,07H+3,07H+2,07H+3, 07H+4,07H+3,07H+2,07H+1DB07H+2,07H+3,07H+2,07H+1,00H+7,07H+1DB0EH+1,07H+7,07H+6,07H+7,07H+3,07H+3DB07H+6,00H+6,00H+7,07H+1,07H+2,07H+3, 07H+3,07H+2,07H+3DB07H+4,07H+5,07H+4,07H+3,07H+2,07H+3, 07H+4,07H+3,07H+2,07H+1DB07H+2,07H+3,07H+2,07H+1,07H+2,00H+7DB0EH+1,07H+7,07H+6,07H+7,07H+3,07H+3DB07H+6,00H+6,00H+7,07H+1,07H+2,07H+3, 07H+3,07H+2,07H+3DB07H+4,07H+5,07H+4,07H+3,07H+2,07H+3, 07H+4,07H+3,07H+2,07H+1DB07H+2,07H+3,07H+2,07H+1,00H+7,07H+1 LengthOfSong EQU$-NotesDuration DB4,2,2,2,2,4,4,4DB4,2,2,2,2,4,4,4DB4,2,2,2,2,4,2,2,2,2DB4,2,2,2,2,12DB4,2,2,2,2,4,4,4DB4,2,2,2,2,4,4,4DB4,2,2,2,2,4,2,2,2,2DB4,2,2,2,2,12DB4,4,4,4,4,4DB4,2,2,2,2,4,2,2,4DB4,2,2,2,2,4,2,2,2,2DB4,2,2,2,2,12DB4,4,4,4,4,4DB4,2,2,2,2,4,2,2,4DB4,2,2,2,2,4,2,2,2,2DB4,2,2,2,2,12Data ENDS;=============stack segment============= Stack SEGMENT STACK'STACK'DB100H DUP(?)Stack ENDS;=============code segment============= Code SEGMENTASSUME CS:Code,DS:Data,SS:StackMain PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DataMOV DS,AXmyOut PortControl,80H;8255:10000000B means:;A--mode0,output;B--mode0,output;C High--output(it will change during running);C Low--output(it will change during running)myOut PortB,01H;show the left most digitCALL PlaymyOut PortB,00HRETMain ENDPPlay PROCPUSH SIXOR SI,SInextTune:CALL ShowTubeCALL PlayNoteCALL NoteDurationCALL PlayHushCALL HushDurationCALL CheckExitINC SICMP SI,LengthOfSongJB nextTunePOP SIRETPlay ENDPShowTube PROCPUSH AXPUSH BXPUSH SIMOV BX,OFFSET NotesMOV AX,SIXLAT NotesmyLutOut PortA,TubeLut,ALPOP SIPOP BXPOP AXRETShowTube ENDPPlayNote PROCPUSH AXPUSH BXPUSH SIMOV BX,OFFSET NotesMOV AX,SIXLAT NotesPUSH AXmyOut TimerControl,16HPOP AXmyLutOut Timer0,FreqLut,ALPOP SIPOP BXPOP AXRETPlayNote ENDPNoteDuration PROCPUSH AXPUSH BXPUSH CXPUSH SIMOV BX,OFFSET DurationMOV AX,SIXLAT DurationXOR AH,AH;useless instruct indeed,since high byte of SI is zeroMOV CX,0100HMUL CXSUB CX,10HnextSubNoteDelay:CALL BasicDelayDEC AXJNZ nextSubNoteDelayPOP SIPOP CXPOP BXPOP AXRETNoteDuration ENDPPlayHush PROCPUSH AXPUSH BXPUSH SImyOut TimerControl,16H;00:Timer0;01:Lower Byte only;011:Mode3;0:Binary CountingmyOut Timer0,1POP SIPOP BXPOP AXRETPlayHush ENDP HushDuration PROCPUSH AXPUSH BXPUSH CXPUSH SIMOV CX,10H nextSubHushDelay:CALL BasicDelayJNZ nextSubHushDelayPOP SIPOP CXPOP BXPOP AXRETHushDuration ENDP BasicDelay PROCPUSH CXMOV CX,0080H myLoopLabel:PUSH CXMOV CX,1000H myLoopLabel2:DEC CXJNZ myLoopLabel2POP CXDEC CXJNZ myLoopLabelPOP CXRETBasicDelay ENDPCheckExit PROCPUSH AXMOV AH,0BH;check whether user input something from keyboardINT21HOR AL,AL;if he does,then return to DosJZ exitCheckAndQuitmyOut PortA,00HmyOut PortB,00HCALL PlayHushMOV AX,4C00HINT21HexitCheckAndQuit:POP AXRETCheckExit ENDPCode ENDSEND Main;=============end of file=============经过测验,程序运行正常。
北邮 微机原理实验报告
北邮微机原理实验报告北邮微机原理实验报告引言:微机原理是计算机科学与技术专业的一门重要课程,通过学习和实践,我们可以深入了解计算机的组成结构和工作原理。
本次实验旨在通过对北邮微机原理实验的探索,加深对计算机硬件和软件的理解,并提升我们的实践能力。
一、实验目的本次实验的目的是熟悉计算机的硬件组成和工作原理,并通过实践操作加深对微机原理的理解。
具体包括以下几个方面:1. 熟悉计算机的硬件组成,包括中央处理器(CPU)、内存、硬盘等;2. 掌握计算机的启动过程和操作系统的加载;3. 理解计算机的指令集和指令执行过程;4. 学习计算机的输入输出设备和外部接口。
二、实验过程1. 实验一:计算机硬件的组装与连接在本实验中,我们需要将计算机的各个硬件组件进行正确的连接和组装。
首先,我们需要将主板与CPU、内存、显卡等硬件设备进行连接。
其次,我们需要将硬盘、光驱等存储设备与主板进行连接。
最后,我们需要将键盘、鼠标、显示器等外部设备与计算机进行连接。
通过这一步骤,我们可以了解计算机硬件的组成结构,并掌握正确的连接方式。
2. 实验二:计算机的启动过程和操作系统的加载在本实验中,我们需要了解计算机的启动过程和操作系统的加载过程。
首先,我们需要按下电源按钮,启动计算机。
然后,计算机会进行自检和硬件初始化,并加载操作系统。
在这个过程中,我们可以观察到计算机的启动画面和加载过程。
通过这一步骤,我们可以深入了解计算机的启动过程和操作系统的加载机制。
3. 实验三:计算机的指令集和指令执行过程在本实验中,我们需要学习计算机的指令集和指令执行过程。
首先,我们需要了解不同类型的指令,包括算术指令、逻辑指令、数据传输指令等。
然后,我们需要通过编写简单的汇编语言程序,来实现对数据的处理和操作。
在这个过程中,我们可以观察到指令的执行过程和结果。
通过这一步骤,我们可以深入理解计算机的指令集和指令执行过程。
4. 实验四:计算机的输入输出设备和外部接口在本实验中,我们需要学习计算机的输入输出设备和外部接口。
北邮—微机原理与接口技术
北邮—微机原理与接口技术(1)(总12页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--微机原理与接口技术硬件实验报告目录1.实验一微机实验平台介绍及IO的使用 (4)1.1.实验目的 (4)1.2.实验内容及要求 (4)1.3.实验环境及背景 (4)1.4.实验步骤 (5)1.4.1.使用debug的I、O命令读写端口 (5)1.4.2.使用文本编辑器edit和编译器masm (6)1.5.思考题 (11)1.6.心得体会 (11)参考资料 (12)声明与致谢 (12)1.实验一微机实验平台介绍及IO的使用1.1.实验目的1.1.1通过实验了解和熟悉实验台的结构,功能及使用方法;1.1.2通过实验掌握直接使用debug的I、O命令来读写IO端口;1.1.3学会debug的使用及编写汇编程序。
1.2.实验内容及要求1.2.1学习使用debug命令,并用I、O命令直接对端口进行读写操作,1.2.2用汇编语言编写跑马灯程序。
(可以使用EDIT编辑工具。
)要求实现以下两个功能:A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等);B.通过输出端口控制灯的工作状态(低电平灯亮)。
1.2.3使用时要注意,电源打开时不得插拔电缆及各种器件,一定要在断电的情况下连接电路,否则可能会烧坏整个实验系统。
1.3.实验环境及背景我们使用PCI_IDE50扁平电缆将PC机与实验扩展模块连接起来。
在扩展实验平台上,有八个发光二极管、八个拨码开关。
读取拨码开关和写发光二极管的端口地址已经被做成了0E8E0h。
连接的PC机上安装有DOS操作系统,并有MASM5开发工具。
图1扩展实验模块1.4.实验步骤1.4.1.使用debug的I、O命令读写端口进入DOS,在命令行模式下输入命令debug,用-a选项写入下列程序:CODE (debug mode)MOV DX, E8E0MOV AL, FEOUT DX, ALMOV AH, 0BINT 21OR AL, ALJZ 0100INT 20输入结束后,直接输入回车即可推出-a。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息与通信工程学院微机原理软件实验报告班级:学号:姓名:序号:时间:2015-11-6——2015-11-29实验二分支,循环程序设计一、实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.二、实验内容:1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过 9。
2.编写一个程序统计数据区中正数,负数和零的个数。
3.将统计结果在屏幕上显示。
4.(选做)统计出正奇数,正偶数,负奇数,负偶数以及零的个数。
三、预习题:1、十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:十进制数0——9对应的二进制数为30H——39H。
要屏显0-9的数码,只需将AH 置成02H(DOS功能调用),然后将要显示的数码的ASCII码存进DL里,然后执行INT 21H 就可以打印字符。
或者,若这些数码是以字符串的格式存储,则可以将AH置成09H,(最后以’$’字符结束,)然后将串首地址传给DS,然后执行INT 21H就可以打印字符串。
2、如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:可以将待检验数与0比较(使用CMP指令后用JZ指令判断ZF是否为零),也可以将待检验数与80H相与,判断ZF的值。
二是和0相比是否相等,然后用该数(假设为8位)和10000000相与,取出符号位判断,可区分正负。
本次试验中我使用的方法是与0比较,所有判决方法的核心思想要么是直接和0相比,要么使用逻辑或移位运算,取出符号进行判断。
四、实验过程:流程图:代码:DATA SEGMENT ;数据段BUFF DW 4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22 ;待判断数据COUNT EQU $-BUFF ;COUNT的值为BUFF所占的字节数POSI DB ? ;正数ZERO DB ? ;负数NEGT DB ? ;0POSIEVEN DB 0 ;正偶数POSIODD DB ? ;正奇数NEGTEVEN DB 0 ;负偶数NEGTODD DB ? ;负奇数POSICHAR DB 'Positive: $' ;用于打印提示的字符串定义NEGTCHAR DB 'Negtive: $'ZEROCHAR DB 'Zero: $'EVENCHAR DB ' Even: $'ODDCHAR DB ' Odd: $'CR DB 0DH,0AH,'$' ; 回车换行的ASCII码DATA ENDSSTACK SEGMENT STACK 'STACK' ;堆栈段DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN:PUSH DSXOR AX,AXPUSH AX ;返回DOSMOV AX,DATAMOV DS,AX ;给DS真正赋值MOV CX,COUNTSHR CX,1 ;相当于除2, 正好为BUFF中的数据个数MOV DX,0 ;设定初值:DH及DL分别为等于、大于零的个数MOV AH,0 ;设定初值:AH为小于零的个数LEA BX,BUFF ;把BUFF中的第一个数存到BXAGAIN: CMP WORD PTR [BX],0 ;BUFF中的第一个数与0进行比较JGE POSITIVE ;大于等于0时转POSITIVEINC AH ;统计小于零的个数ADD WORD PTR [BX],1AND NEGTEVEN,[BX] ;和1与之后的结果加到负偶数中JMP NEXTPOSITIVE: JZ ZERO ;等于0时转ZEROINC DL ;统计大于零的个数ADD WORD PTR [BX],1AND POSIEVEN,[BX] ;和1与之后的结果加到正偶数中JMP NEXTZERO: INC DH ;统计等于零的个数NEXT INC BX ;修改地址指针INC BXLOOP AGAIN ;循环判断CX不为0MOV POSI,DL ;保存结果,正数MOV ZERO,DH ;0MOV NEGT,AH ;负数MOV AH,POSIMOV AL,POSIEVENSUB AH,AL ;计算正奇数个数MOV POSIODD,AHMOV AH,NEGTMOV AL,NEGTEVENSUB AH,ALMOV NEGTODD,AH ;计算负奇数个数PRINT: ;打印正数提示符和正数(奇偶)个数MOV AH,09HMOV DX,OFFSET POSICHARINT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,POSIEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,POSIODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09H;打印负数提示符和负数(奇偶)个数MOV AH,09HMOV DX,OFFSET NEGTCHARINT 21HMOV AH,02HMOV DL,NEGTADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,NEGTEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,NEGTODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET ZEROCHARMOV AH,02HMOV DL,ZEROADD DL,30H INT 21HCODEENDS END BEGIN ;代码段结束结果分析:数据区待统计的数据为:4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22实验结果如下图所示:本实验意在练习基本的分支、循环结构。
关键的点在于和0比较,区分正负和零,然后在正数和负数中判断奇偶,这里巧妙地使用了和1与之后结果加和到偶数中,最后利用统计的数的个数减去偶数得奇数的方法。
使得程序更加流畅和简洁,思路也更清晰。
五、实验总结汇编程序同高级语言一样,在写代码前都要对实验做分析,设计好思路,这样写代码时思路才比较清晰,代码也比较容易写和查找错误。
此次实验主要是循环和分支,也是用汇编语言编写的第一个程序,让我熟悉了汇编语言的基本写法,对很多理论课学到的知识都有了更深的了解。
了解了怎样利用判别条件在不同的分支中跳转,循环的判别及循环过程。
总而言之,此次实验收获还是很多的,不仅加深了对这两种结构的了解,提升了自己设计程序的能力,并且也提升了自己排除bug 的能力,进一步熟悉了第一个实验的整个流程。
实验三代码转换程序设计一、实验目的:1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计.二、实验内容:1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.三、预习题:1.如何将输入的两个字符(0 -- 9)变为十进制或二进制数?答:两字符减去0的ASCII码(30H)后,高位数乘以十加上低位数,即变为十进制数。
2.如何将选出的最小值(二进制或十进制)变为 ASCII 码再进行显示?答:本次实验是直接读入并存储数字的ASCII码,比较其大小,然后直接输出ASCII 码。
3.你觉得采用二进制运算还是十进制运算更适合于这个实验?答:相比二进制,采用十进制运算更简洁,但需要和ASCII码进行转换。
可直接使用数字对应的ASCII比较,分别比较十位和个位,最后直接输出字符即可。
四、实验过程:模块层次图:流程图:代码:DATA SEGMENT ;数据段INPUT DB 100 DUP(?)MINTMP DB '9'-30H,'9'-30H ; 置最小值的初始值为99COUNT DB 0DIFERROR DB 0D; 用于判断调用输入子程序是否有错WELCOME DB 'Please input numbers:','$' ;提示信息字符串 OUTTIP DB 'Minimum is :','$'CR DB 0DH,0AH,'$'; 回车换行ERROR1 DB 'ERROR:Character is not valid!','$';各种错误输入提示 ERROR2 DB 'ERROR:Number must contains two digits!','$'ERROR3 DB 'ERROR:Number is empty!','$'ERROR4 DB 'ERROR:Need separate char!','$'DATA ENDSSTACK SEGMENT STACK 'STACK' ;堆栈段DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA BEGIN PROC FARPUSH DS ;返回DOSXOR AX,AXPUSH AXMOV AX,DATA ;真正给DS赋值MOV DS,AXMOV DX,OFFSET WELCOME; 调用欢迎提示CALL PRINT ;调用子程序MOV DX,OFFSET CR; 回车换行CALL PRINTCALL MAIN; 获取用户输入CMP IFERROR,0; 判断输入过程是否有错JNZ BACK; 错误则直接返回DOSMOV DX,OFFSET CR; 回车换行CALL PRINTCALL FINDMIN; 查找最小数MOV DX,OFFSET OUTTIP; 调用输出提示CALL PRINTMOV AH,02HMOV DL,MINTMP; 输出最小值的十位ADD DL,30HINT 21HMOV AH,02HMOV DL,MINTMP[1]; 输出最小值的个位ADD DL,30HINT 21HBEGIN ENDP;获取输入,出口参数为IFERROR,表示是否有错MAIN PROCPUSH AX; 保存现场PUSH BXPUSH CXPUSH DXPUSH DIMOV DI,0; 数组偏移地址MOV CX,0; 标识数字的位数GETLOOP:MOV AH,01H; 从键盘读取一个字符INT 21HCMP AL,0DH; 和回车比较JE EXIT1; 是回车则结束输入CMP CX,0; 数字位数为空JE CMPSPACE0CMP CX,1; 数字位数为1JE CMPSPACE1CMP CX,2; 数字位数为2JE CMPSPACE2CMPSPACE0: CMP AL,20HJE GETLOOP; 数字位数为0且输入空格则忽略,继续输入JMP ASCBIN; 不是空格就读取该字符CMPSPACE1: CMP AL,20HJE ERR2; 数字位数为1且输入空格则位数不是两位数出错JMP ASCBIN; 否则读取该字符CMPSPACE2: CMP AL,20HJNE ERR4; 数字位数为2后,不输入空格则分隔符错误XOR CX,CX; 输入空格则清零重新计数JMP GETLOOPASCBIN: SUB AL,30H; 化为二进制数字JL ERR1; 小于则无效字符CMP AL,9; 和9比较JG ERR1; 大于9则是无效字符MOV INPUT[DI],AL; 保存输入的数INC COUNT; 统计输入的数字个数,为判断是否输入为两位数INC DI; 向后移动数组INC CXJMP GETLOOPERR1: MOV IFERROR,1; 输出错误1MOV DX,OFFSET ERROR1CALL PRINTJMP RETURNERR2: MOV IFERROR,1; 输出错误2MOV DX,OFFSET ERROR2CALL PRINTJMP RETURNERR3: MOV IFERROR,1; 输出错误3MOV DX,OFFSET ERROR3CALL PRINTJMP RETURNERR4: MOV IFERROR,1; 输出错误4MOV DX,OFFSET ERROR4CALL PRINTJMP RETURNEXIT1: MOV BL,COUNT; 判断输入数的个数是否为零CMP BL,0JE ERR3;输入数目为0则输出错误并退出AND BL,01H; 判断数字是否为两位数CMP BL,0JNE ERR2;输入数字个数为奇数则出错RETURN: POP DI; 恢复现场POP DXPOP CXPOP BXPOP AXRETMAIN ENDP;回车换行输出字符串,入口参数为DXPRINT PROCPUSH AXMOV AH,09HINT 21HPOP AXRETPRINT ENDP;查找最小的数子程序FINDMIN PROCPUSH DI; 保护现场PUSH AXPUSH CXMOV DI,-2; 数组下标MOV CL,COUNT; 把数组长度移入CXMOV AL,CLCBWMOV CX,AXLOP: ADD DI,2CMP CX,DI; 是否已经比较完毕JE EXIT2; 如果比较完毕所有数则退出MOV AH,INPUT[DI];否则接着比较,移入十位数MOV AL,INPUT[DI+1]; 移入个位数CMP AH,MINTMP; 比较十位数,MINTMP低地址为十位JA LOP ;如果MINTMP小,则直接比较下一个数JE HIGHEQU;如果十位数相等,比较个位数,再否则十位大就直接存储STOMIN: MOV MINTMP,AHMOV MINTMP[1],ALJMP LOPHIGHEQU: CMP AL,MINTMP[1]; 比较个位数JNB LOP; 个位数比MINTMP大则跳到下一个数JMP STOMIN; 否则将当前数写入为MINTMPEXIT2: POP CXPOP AXPOP DIRETFINDMIN ENDPCODE ENDSEND BEGIN结果分析:实验以空格为分隔符,空格的个数不限制,以回车为输入结束标志符。