北邮微机原理实验报告
北京邮电大学微机原理软件实验报告
北京邮电大学微机原理软件实验报告信息与通信工程学院微机原理软件实验报告班级:姓名:学号:班内序号:时间:微机原理软件实验·报告实验一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 命令作单步跟踪调试。
比较每条指令执行后的结果和原来的理解是否一致,得出程序运行的结果:它们是写在什么单元,具体内容是什么;并判断结果是否正确。
北京邮电大学微机原理硬件实验报告
北京邮电大学微机原理硬件实验报告实验报告一:I/0地址译码和简单并行接口——实验一&实验二一、实验目的掌握I/O地址译码电路的工作原理;掌握简单并行接口的工作原理及使用方法。
二、实验原理及内容a) I/0地址译码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灯)或逻辑笔b) 简单并行接口1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。
74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。
2、编程从键盘输入一个字符或数字,将其ASCⅡ码经过这个输出接口输出,根据8个发光二极管发光情况验证正确性。
3、按下面图4-2-2简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。
74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。
4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。
北邮微机原理硬件实验报告
北邮微机原理硬件实验报告实验目的本次实验主要是通过对微机原理的学习,掌握多种硬件器件的基本使用,包括程序寄存器(PRG)、数据寄存器(DR)、累加器(AC)等,也希望能够初步了解微机系统的结构和工作原理。
实验内容1. 按以下程序编写汇编程序ORG 0HLOOP: MOV A,NUMADD BINC R5MOV MEM,R5SJMP LOOPENDNUM: DB 50HB: DB 35HR5: EQU 25HMEM: DS 1编写程序后,运行该程序,观察程序在8051微处理器上执行的情况。
2. 制作简易流水灯电路使用LED等元器件,制作一个简单的流水灯电路。
同时,编写相应的汇编程序,实现流水灯的基本效果。
3. 实现双向流水灯效果在完成流水灯电路的基础上,通过改变程序实现双向流水灯的效果。
在这个过程中,需要仔细分析程序的实现方式,并且结合8615芯片的具体情况,理解程序在底层机器中的工作方式。
4. 实现用数码管显示数字的功能使用7段数码管,将程序输出的结果显示在数码管上。
在这个过程中,我们需要灵活处理I/O端口和存储器的读写,以及处理各类中断信号。
实验过程1. 编写并调试汇编程序我们首先使用Keil软件编写了相应的汇编程序,并在8051单片机上运行。
在运行过程中发现,程序能够成功地对NUM与B进行加法运算,并将结果存储在MEM中。
2. 制作流水灯电路我们使用LED、电阻等元器件,制作了一个简单的流水灯电路,并测试了该电路的基本工作情况。
由于电路较为简单,因此没有出现特别明显的问题。
3. 实现双向流水灯效果为了实现双向流水灯效果,我们对程序进行了修改。
在这个过程中,初步出现了一些问题,包括倒计时初始值不正确、程序中断启动终止不及时等。
经过反复调试,我们成功地实现了这一功能。
4. 实现用数码管显示数字的功能最后,我们将流水灯程序变更为用数码管显示数字的程序。
在这个过程中,我们主要用到了表格查找和存储器读写等基本操作,成功将结果在数码管上显示。
北邮 微机原理硬件实验报告
微机原理硬件实验报告实验一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输出一个负脉冲结束DATA SEGMENTDATA ENDS ; 数据段STACK SEGMENT STACK'STACK'DB 100H DUP(?)STACK ENDS ;堆栈段CODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACK ;说明寄存器与段名之间的对应关系DELAY PROC NEAR ;延时子程序,类型为本段内调用 PUSH CX ;保存进入时的CX值MOV BX,0FFFFHLOOP1:MOV CX,0100HLOOP2:LOOP LOOP2 ;LOOP循环指令格式:LOOP OPR测试件:(CX)<>0DEC BXJNZ LOOP1POPCX ;恢复进入时的CX值RET ;返回被调用处DELAY ENDP ;过程结束START:PUSH DSXOR AX,AXPUSH AX ;程序开始时,DS:0执行的是一条返回DOS的指令:INT 20HMOV AX,DATAMOV DS,AX ;将数据段的数据放入DS中MOV CX,200HAGAIN:MOV DX,2A0H ;L7亮OUT DX,ALCALL DELAYMOV DX,2A8H ;L7灭OUT DX,ALCALL DELAYLOOP AGAIN ;循环闪烁MOV AX,4C00H ;返回DOSINT 21HCODE ENDSEND START五、实验结果LED7灯亮灭交替闪烁。
北邮微机原理软件实验报告(精)
北邮微机原理软件实验报告(精)微机原理软件实验报告实验二分支、循环程序设计一.实验目的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在屏幕上显示出来?。
北邮微机原理实验报告
北邮微机原理实验报告微原软件实验报告班级:序号:学号:姓名:实验⼆分⽀,循环程序设计⼀.实验⽬的:1.开始独⽴进⾏汇编语⾔程序设计;2.掌握基本分⽀,循环程序设计;3.掌握最简单的DOS 功能调⽤.⼆.实验内容:1.安排⼀个数据区(数据段),内存有若⼲个正数,负数和零.每类数的个数都不超过9.2.编写⼀个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显⽰.三.预习题:1.⼗进制数0 -- 9 所对应的ASCII 码是什么? 如何将⼗进制数0 -- 9 在屏幕上显⽰出来?答:0—9对应的ASCII码是30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,将⼗进制数转换成相应的ASCII码并调⽤字符显⽰功能即能实现⼗进制数在屏幕上的显⽰。
2.如何检验⼀个数为正,为负或为零? 你能举出多少种不同的⽅法?答:将该数与0字符(ASCII码为30H)⽐较,根据⽐较的结果转⼊不同的分⽀。
四.流程图:开始初始化CX,BX,AH,DH,DL[BX] 0?[BX]=0?DH++DH 记录等于零的个数BX++BX++CX--AH++AH 记录⼩于零的个数DL++DL 记录⼤于零的个数CX 0?将AH,DH,DL 中的数转成ASCII 码并存储显⽰结束YES YES NOYESNO NO CX 是待处理的数的个数,BX 是这串数的⾸地址五.代码:六.运⾏结果:七.总结:第⼀次在DOS窗⼝下⽤汇编编程,⼀些基本的操作和以前的⾼级语⾔迥然不同,如建⽴⽂件,编译,链接,调试,这些操作都是要在DOS窗⼝中键⼊语⾔指令来完成的,不像⾼级语⾔的编译器只要按下相关的键就好了,⽤语⾔指令能更加明⽩编译,调试这些操作真正的含义。
更重要的是调试指令,通过这些指令,可以直接看到寄存器,内存中真真切切的变化,对硬件的⼯作机制特别是cpu的指令运⾏,内存的数据存储与读取,整个程序运⾏的本质过程有了更加透彻的了解和认识。
北邮微机原理硬件实验 实验报告
微机原理与接口技术硬件实验报告姓名:曹爽学号:2013210640班级:20132111242016年1月10日目录实验一:熟悉实验环境及IO的使用 (3)一、实验目的 (3)二、实验内容及要求 (3)三、实验步骤 (3)四、程序流程图 (4)五、源代码 (4)六、思考题 (5)七、实验结果和心得体会 (6)实验二:8255A并行接口应用 (7)一、实验目的 (7)二、实验内容及要求 (7)三、实验步骤 (8)四、程序流程图 (9)五、源代码 (10)六、实验结果和心得体会 (14)实验三:8253计数器/定时器的应用 (15)一、实验目的 (15)二、实验内容及要求 (15)三、8253定时器 (15)四、电路的调试与连接 (16)五、实验连接图 (16)六、程序流程图 (18)七、源代码 (19)八、思考题 (21)九、实验结果和心得体会 (21)实验一:熟悉实验环境及IO的使用一、实验目的1.通过实验了解和熟悉实验台的结构、功能及使用方法。
2.通过实验掌握直接使用Debug 的I、O命令来读写IO 端口。
3.学会Debug 的使用及编写汇编程序。
二、实验内容及要求1.学习使用Debug命令,并用I、O命令直接对端口进行读写操作。
2.用汇编语言编写跑马灯程序。
(使用EDIT编辑工具)实现功能。
A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等)。
B.通过输出端口控制灯的工作状态(低电平灯亮)。
注意:电源打开时不得插拔电缆及各种器件。
连接电路时一定要在断电的情况下连接,否则可能会烧坏整个实验系统。
三、实验步骤这里仅简要叙述利用EDIT工具编写汇编写跑马灯程序的步骤。
编写:C>EDIT 文件名.asm编译:C>MASM 文件名.asm连接:C>LINK 文件名.obj运行:C>文件名.exe或用Debug进行调试。
四、程序流程图图1.4.1 程序流程图五、源代码CODE SEGMENTASSUME CS:CODESTART: MOV AH,0FEH ;将初始灯设为右起第1灯亮LOOP0: MOV DX,0EEE0H ;将I/O端口地址设为EEE0IN AL,DX ;从端口读入数据,提取拨码开关右起第3位状态AND AL,20HCMP AL,20HJNZ STOP ;若状态为‘0’,则保持位置不变,暂停IN AL,DX ;提取拨码开关右起第2位状态AND AL,40HCMP AL,40HJNZ FAN ;若状态为‘0’,则右移亮灯位置ROL AH,1 ;左移亮灯位置STOP: JMP DISPFAN: ROR AH,1DISP: MOV AL,AHOUT DX,AL ;输出到端口,亮灯MOV CX,8000H ;外循环次数MOV BX,8000H ;内循环次数LOOP1: DEC BXJNZ LOOP1 ;内循环,BX减少到0MOV BH,80H ;重设内循环次数80H次IN AL,DXAND AL,10HCMP AL,10H ;提取拨码开关右起第4位状态JNZ S ;若为‘1’,则设置内循环次数为10H次MOV BH,10HS:LOOP LOOP1 ;外循环,CX减少到0IN AL,DXAND AL,80HCMP AL,80H ;提取拨码开关右起第1位状态JNZ LOOP0 ;若为‘0’,则继续显示,否则结束程序MOV AH,4CHINT 21HCODE ENDSEND START六、思考题通过实验说明用debug中的a命令录入实验中给出的小程序中,有些语句可以不写出“h”字符的原因。
北邮微机原理软件实验报告
实验一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,将二进制转化为十进制,再显示出来。
北邮微机原理软件部分报告
微机原理与接口技术软件部分实验报告实验B 分支、循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS功能调用。
二、实验任务及内容1.安排一个数据区,内存有若干个正数,负数和零。
每类数的个数都不超过9。
2.编写一个程序统计数据区中正数,负数和零的个数。
3.将统计结果在屏幕上显示。
4. 选作题:统计出正奇数,正偶数,负奇数,负偶数以及零的个数.四、源程序DISPSTR MACRO STR ;打出字符串(属于DOS功能调用)MOV AH,9MOV DX,SEG STRMOV DS,DXMOV DX,OFFSET STRINT 21HENDMDISPNUM MACRO NUM ;打出数字(属于DOS功能调用)MOV AH,2MOV DL,NUMADD DL,30H ;加30H变为ASCII码INT 21HENDMDATA SEGMENTNUM DB 1,3,5,0,0,0,-5,-4,0COUNT EQU $-NUM ;统计数据个数ZEROS DB 0 ;各类数初值均为0PLUSES DB 0MINUSES DB 0EVENMINUSES DB 0ODDMINUSES DB 0EVENPLUSES DB 0ODDPLUSES DB 0ZEROSTR DB 0DH,0AH,'ZERO:$' ;待输出字符串PLUSSTR DB 0DH,0AH,'PLUS:$'MINUSSTR DB 0DH,0AH,'MINUS:$'EVENMINUSSTR DB 0DH,0AH,'EVENMINUS:$'ODDMINUSSTR DB 0DH,0AH,'ODDMINUS:$'EVENPLUSSTR DB 0DH,0AH,'EVENPLUS:$'ODDPLUSSTR DB 0DH,0AH,'ODDPLUS:$'DATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART PROC FARPUSH DS ;初始化MOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,COUNT ;CX控制循环次数MOV SI,OFFSET NUM ;SI指向数据的偏移地址LOOP1: CMP BYTE PTR[SI],0 ;将SI指向的内容与0比较大小JZ ZERO ;等于0跳转JG PLUS ;大于0跳转INC MINUSES ;负数加一SHR BYTE PTR[SI],1 ;判断是负奇数还是负偶数JNC EVENMINUS ;是负偶数跳转INC SI ;SI指针后移INC ODDMINUSES ;负奇数加一RETURN: LOOP LOOP1 ;循环直至CX=0JMP DISP ;循环结束后跳转至打出结果ZERO: INC ZEROSINC SIJMP RETURN ;返回循环体PLUS: INC PLUSESSHR BYTE PTR[SI],1JNC EVENPLUSINC SIINC ODDPLUSESJMP RETURNEVENPLUS: INC SIINC EVENPLUSESJMP RETURNEVENMINUS: INC SIINC EVENMINUSESJMP RETURNDISP: DISPSTR ZEROSTR ;打出结果DISPNUM ZEROSDISPSTR PLUSSTRDISPNUM PLUSESDISPSTR MINUSSTRDISPNUM MINUSESDISPSTR EVENPLUSSTRDISPNUM EVENPLUSESDISPSTR ODDPLUSSTRDISPNUM ODDPLUSESDISPSTR EVENMINUSSTRDISPNUM EVENMINUSESDISPSTR ODDMINUSSTRDISPNUM ODDMINUSESRETSTART ENDPCODE ENDSEND STARTend start五、程序运行结果进行统计的数据为1,3,5,0,0,0,-5,-4,0。
北京邮电大学实验报告实验三微机
北京邮电大学实验报告题目:微机原理软件实验三班级: 2010211127专业:信息工程姓名:付莹学号:10210759实验五:中断实验1. 实验类设计型实验:编程实现时钟的显示。
2. 实验目的掌握计数器/定时器8253的工作原理和编程方法;掌握中断控制器8259的工作原理;掌握中断处理程序的编写。
3. 实验条件硬件条件:PC机一台。
软件条件:DOS操作系统;任意一种编辑程序,如EDIT;宏汇编程序MASM;连接程序LINK;调试程序DEBUG。
可借用该程序中的中断服务程序以及8253的初始化程序段(口地址为40H、41H、42H、43H,控制字为36H=00110110B,时间常数TC=11932:1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms)。
4. 实验内容及步骤编一程序,在显示器上显示时、分、秒。
借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。
在中断服务程序中管理刷新时、分、秒Current time is: xx:xx:xx (时分秒键盘输入)回车后时、分、秒开始计时,时钟不停的刷新。
当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。
5. 实验报告(1)画出程序流程图。
开始等待回车键按下(08H 中断调用)取原8H 中断的中断矢量并压栈保护建立数据段的可寻址性 装载现在的中断服务程序8253初始化产生10ms 方波,10ms 中断一次重写IMR ,只开放时钟和键盘中断开中断监测键盘(06H 中断调用)是Ctrl+C ? 关中断 恢复IMR重置8253,,55ms 中断一次恢复原中断开中断返回DOS ,结束Yes有键按下?显示时间值(09H 中断调用)取消秒Yes 计数达到100次(1秒)?NoYesNoNo实现等待计时功能实现循环,秒值变化则返回继续执行程序显示“Current time is :” 读入键盘输入(2)提交调试好的汇编语言源程序(.asm)。
北邮微机原理硬件实验报告及代码
北京邮电大学微机原理硬件实验报告实验1:熟悉实验环境及IO的使用实验2:8255A并行接口应用实验3:8253计数器/定时器的应用目录实验一熟悉实验环境及IO的使用 (2)一、实验目的 (2)二、实验内容及要求 (2)三、实验结果 (2)1、程序说明 (2)2、流程图 (4)3、源代码 (6)四、实验总结 (9)实验二8255A并行接口应用 (9)一、实验目的 (9)二、实验任务及内容 (9)1、6 位数码管静态显示 (10)2、6 位数码管动态显示 (10)3、扩展部分 (10)三、实验结果1(6位数码管静态显示) (10)1、程序说明 (10)2、流程图 (11)3、源代码 (11)四、实验结果2(6位数码管动态显示) (13)1、程序说明 (13)2、流程图 (14)3、源代码 (15)五、实验结果(扩展部分) (17)1、程序说明 (17)2、流程图 (18)3、源代码 (18)六、实验总结 (22)实验三8253计数器/定时器的应用 (22)一、实验目的 (22)二、实验任务及内容 (22)1.音乐发生器 (22)2.扩展部分 (23)三、实验结果1(音乐发生器) (23)1、程序说明 (23)2、流程图 (23)3、源代码 (24)四、实验结果2(扩展部分) (29)1、程序说明 (29)2、流程图 (29)3、源代码 (30)五、实验总结 (34)实验一熟悉实验环境及IO的使用一、实验目的1 .通过实验了解和熟悉实验台的结构,功能及使用方法。
2 .通过实验掌握直接使用Debug 的I、O 命令来读写IO端口。
3 .学会Debug 的使用及编写汇编程序二、实验内容及要求1 .学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2 .用汇编语言编写跑马灯程序。
(使用EDIT编辑工具)实现功能A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等)。
B.通过输出端口控制灯的工作状态(低电平灯亮三、实验结果1、程序说明跑马灯程序共实现:16种灯型、4种速度、暂停、退出等功能。
北邮 微机原理实验报告
北邮微机原理实验报告一、实验目的本实验旨在通过对微机原理的实际操作,加深对计算机内部结构和工作原理的理解,并通过实验验证理论知识的正确性。
二、实验设备和材料•计算机硬件设备:PC机一台、示波器一台、数字信号发生器一台。
•软件工具:TASM、MASM汇编语言编译器。
三、实验内容本实验分为以下几个步骤:1. 准备工作•将PC机与示波器、数字信号发生器连接。
•打开PC机,进入实验环境。
2. 实验一:简单指令的执行•编写一个简单的汇编程序,实现两个数相加并将结果存储到指定寄存器中。
•使用TASM或MASM编译器对汇编程序进行编译,生成可执行文件。
•运行可执行文件,在示波器上观察到相加过程的波形。
3. 实验二:数据传输操作•编写一个汇编程序,实现数据在不同寄存器和内存之间的传输。
•编译并运行程序,通过观察PC机上的输出结果,验证数据传输的正确性。
4. 实验三:逻辑运算和移位操作•编写程序,实现逻辑运算和移位操作,并观察运算结果。
•通过数字信号发生器产生相应的输入信号,验证程序的正确性。
5. 实验四:中断处理•编写一个汇编程序,实现对中断请求的响应和处理。
•通过示波器观察中断请求和处理的波形,验证程序的正确性。
6. 实验五:串行通信操作•编写程序,实现串行通信的发送和接收操作。
•通过示波器观察串行通信的波形,验证程序的正确性。
四、实验结果和分析•对每个实验步骤进行记录,并详细分析实验结果。
•比较实验结果与理论预期是否一致,并给出原因分析。
五、实验心得通过本次实验,我深刻理解了微机原理的实际应用和操作过程。
通过实际操作,我对计算机内部结构和工作原理有了更深入的了解,并通过实验验证了理论知识的正确性。
同时,我也意识到在实际操作中的一些细节和注意事项,这对我今后的学习和工作都有很大的帮助。
六、实验总结通过本次实验,我不仅掌握了微机原理的实际应用技能,还深化了对计算机内部结构和工作原理的理解。
实验过程中,我遇到了一些问题,但通过思考和实践,逐步解决了这些问题,并取得了满意的实验结果。
北邮微机原理实验报告
微机原理软件实验报告学院:信息与通信工程学院班级:2012211123班内序号:学生姓名:学号:实验二分支,循环程序设计一、实验目的1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用.二、实验任务及内容1.安排一个数据区,内存有若干个正数,负数和零。
每类数的个数都不超过9。
2.编写一个程序统计数据区中正数,负数和零的个数。
3.将统计结果在屏幕上显示。
4.(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。
三、画出程序流程图Y四、给出源程序(要求加注释)data segmentbuff dw 1, 2, 0, 0 ,-1 ;数据段,初始化数据count equ $-buffplus db ? ;定义三种数的存储位置zero db ?minus db ?string1 db 'plus number:','$'string2 db 'zero number:','$'string3 db 'minus number:','$'data endsstack segment stack 'stack'db 100 dup(?)stack endscode segmentassume cs:code,ds:data,es:data,ss:stackbegin:mov ax,datamov ds,axmov cx,countshr cx,1mov dx,0mov ah,0lea bx,buffagain: cmp word ptr[bx],0 ;首先和0比较jge pluinc ah ;小于零MINUS+1jmp nextplu: jz zer ;判断是否等于零,等于零ZERO+1 inc dl ;不等于零PLUS+1jmp nextzer: inc dhnext: inc bx ;下一个数inc bxloop againadd dl,48mov plus,dladd dh,48mov zero,dhadd ah,48mov minus,ahshow:sub dx,dx ;显示模块mov dx,offset string1mov ax,0900h ;送显示指令int 21hmov dl,[plus]mov ax,0200hint 21hmov dl,0dhint 21hmov dl,0ahint 21hmov dx,offset string2mov ax,0900hint 21hmov dl,[zero]mov ax,0200hint 21hmov dl,0dhint 21hmov dl,0ahint 21hmov dx,offset string3mov ax,0900hint 21hmov ax,0200hmov dl,[minus]int 21hmov ax,4c00h ;结束程序int 21hcode endsend begin五、给出程序运行结果(运行结果抓屏保存)data segment 中存入1,2, 0, 0,-1显示有2个0、2个大于0的数、1个小于0的数,结果正确六、预习题1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -9 在屏幕上显示出来? 答:对应的ASCII码是30H~39H,把0-9加上30H即可得到对应的ASCII,送给DL,再执行INT 21H即可显示。
北邮 微机原理实验报告
北邮微机原理实验报告北邮微机原理实验报告引言:微机原理是计算机科学与技术专业的一门重要课程,通过学习和实践,我们可以深入了解计算机的组成结构和工作原理。
本次实验旨在通过对北邮微机原理实验的探索,加深对计算机硬件和软件的理解,并提升我们的实践能力。
一、实验目的本次实验的目的是熟悉计算机的硬件组成和工作原理,并通过实践操作加深对微机原理的理解。
具体包括以下几个方面:1. 熟悉计算机的硬件组成,包括中央处理器(CPU)、内存、硬盘等;2. 掌握计算机的启动过程和操作系统的加载;3. 理解计算机的指令集和指令执行过程;4. 学习计算机的输入输出设备和外部接口。
二、实验过程1. 实验一:计算机硬件的组装与连接在本实验中,我们需要将计算机的各个硬件组件进行正确的连接和组装。
首先,我们需要将主板与CPU、内存、显卡等硬件设备进行连接。
其次,我们需要将硬盘、光驱等存储设备与主板进行连接。
最后,我们需要将键盘、鼠标、显示器等外部设备与计算机进行连接。
通过这一步骤,我们可以了解计算机硬件的组成结构,并掌握正确的连接方式。
2. 实验二:计算机的启动过程和操作系统的加载在本实验中,我们需要了解计算机的启动过程和操作系统的加载过程。
首先,我们需要按下电源按钮,启动计算机。
然后,计算机会进行自检和硬件初始化,并加载操作系统。
在这个过程中,我们可以观察到计算机的启动画面和加载过程。
通过这一步骤,我们可以深入了解计算机的启动过程和操作系统的加载机制。
3. 实验三:计算机的指令集和指令执行过程在本实验中,我们需要学习计算机的指令集和指令执行过程。
首先,我们需要了解不同类型的指令,包括算术指令、逻辑指令、数据传输指令等。
然后,我们需要通过编写简单的汇编语言程序,来实现对数据的处理和操作。
在这个过程中,我们可以观察到指令的执行过程和结果。
通过这一步骤,我们可以深入理解计算机的指令集和指令执行过程。
4. 实验四:计算机的输入输出设备和外部接口在本实验中,我们需要学习计算机的输入输出设备和外部接口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微原软件实验报告班级:序号:学号:姓名:实验二分支,循环程序设计一.实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用.二.实验内容:1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.三.预习题:1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?答:0—9对应的ASCII码是30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,将十进制数转换成相应的ASCII码并调用字符显示功能即能实现十进制数在屏幕上的显示。
2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:将该数与0字符(ASCII码为30H)比较,根据比较的结果转入不同的分支。
四.流程图:开始初始化CX,BX,AH,DH,DL[BX] 0?[BX]=0?DH++DH 记录等于零的个数BX++BX++CX--AH++AH 记录小于零的个数DL++DL 记录大于零的个数CX 0?将AH,DH,DL 中的数转成ASCII 码并存储显示结束YES YES NOYESNO NO CX 是待处理的数的个数,BX 是这串数的首地址五.代码:六.运行结果:七.总结:第一次在DOS窗口下用汇编编程,一些基本的操作和以前的高级语言迥然不同,如建立文件,编译,链接,调试,这些操作都是要在DOS窗口中键入语言指令来完成的,不像高级语言的编译器只要按下相关的键就好了,用语言指令能更加明白编译,调试这些操作真正的含义。
更重要的是调试指令,通过这些指令,可以直接看到寄存器,内存中真真切切的变化,对硬件的工作机制特别是cpu的指令运行,内存的数据存储与读取,整个程序运行的本质过程有了更加透彻的了解和认识。
在本次实验中,主要对顺序结构,分支结构以及循环结构有了初步的运用,程序编写的关键是流程图,当对题目有了分析并且设计出了条理清晰,步骤较为详细的流程图之后,只要对照图写就很快:顺序执行下来的地方用顺序结构,有判断的地方用分支结构,有循环执行的地方用循环结构,整个程序的框架就构建完成,剩下的就是变量、寄存器以及内存空间的读写了。
实验三代码转换程序设计一.实验目的:1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计.二.实验内容:1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.三.预习题:1.如何将输入的两个字符(0 -- 9)变为十进制或二进制数?答:因为输入的字符是以ASCCII码(8位二进制)表示的,所以分别对两个字符做减30H 的操作,再将先输入的字符作为十位,后输入的字符为个位即可得到相应十进制的二位数。
2.如何将选出的最小值(二进制或十进制)变为ASCII 码再进行显示?答:将选出的十进制最小值加上30H即变成了对应的ASCII码,将这个值的十位和个位先后存储在DL中,先后两次使用AH=02H功能输出整个两位十进制数。
但是其实在数的存储和输出时不需要进行ASCII码与十进制数的转换,直接对ASII码的大小比较即可。
3.你觉得采用二进制运算还是十进制运算更适合于这个实验?答:正如上面题中所说,直接用二进制运算对于这个实验来说更加方便和简单。
四.流程图:开始输入二位数的十位将键盘输入的数存入BH 是否在0~9?YES输入二位数的个位是否在0~9?将键盘输入的数存入BL 按下回车?比较最后输入的二位数与MIN 的大小BX MIN?将MIN 中的数打印显示NO更新MIN 的值即MIN=BX结束NO提示输入错误NO按下空格?比较BX 与MIN 的大小BX MIN ?更新MIN 的值即MIN=BXNONOYESNOYESYESYESYES五.模块层次图:输入模块检验模块显示模块比较模块主程序循环七.运行结果:结果说明:第一次运行,输入正确,按下回车就会显示输入数字中的最小值。
第二次运行,输入了不是0~9的字符$则提示输入错误,重新输入,再次输入时输入了一个三位数,又会提示输入错误。
八.总结:本次实验和上个实验一样还是要比较数之间的大小关系,只不过这次要求更高:待比较的对象都是从键盘输入,且每次的比较的两个对象不是固定的,比较完成后需要将比较的两个对象之一写入固定的变量中。
分析完程序要求后还是写流程图,写的过程中就会发现功能其实是要多次调用的,如输入模块,检验模块。
比较大小及更新最小值的部分在一次循环中只需要执行一次,可以不用子程序的形式,不过为了程序看起来更加有层次感和模块化,我将比较和显示也分别写成了子程序的形式,这样主程序看起来就更加简洁明了。
这次对子程序的使用让我更加清楚了子程序的实质,其实它就是一段在别处封装好的具有一定功能实现的代码段,当call它的时候就转到子程序所在的地址执行,遇到RET时再返回到调用的断点处,这是与转移指令有本质区别的地方,转移指令是“一去不回”,而子程序是“有去有回”。
实验四子程序设计一.实验目的:1.进一步掌握子程序设计方法;2.进一步掌握基本的DOS 功能调用.二.实验内容:1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入.2.统计检查每个学生的名次.3.将统计结果在屏幕上显示.4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽可能考虑美观.5.输入要有检错手段.三.预习题:1.如何确定一个学生在这门科目中的名次?答:对输入的成绩进行排序,并且较大数存在低地址,较小的数存在高地址。
2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单?答:在对成绩进行排序和改变其在内存中的存储位置的同时将每个成绩对应的序号用同样的方法改变序号在内存中的存储位置,这样将排序后的序号连续读出来就能得到所有序号对应学生在这门科目中的名次。
3.准备好模块层次图.输入模块检验模块存储模块冒泡排序模显示模块块4.给出输出显示的形式.排名:1 2 3 4 5 …..序号:(与下面的成绩对应)成绩:(从高到低排列)四.流程图:开始输入十位0~9?存储在高位输入个位YES0~9?YES存储在低位输入回车?输入空格?NO错误提示YESCL=0[SI+DL*2] [SI+DL*2+2]?YES CL++CL=COUNT1?YESCOUNT1--COUNT1>0?NO显示名次显示序号显示成绩结束NO NOCL 是内循环的计数器SI 指向成绩序列的首地址,DL=CL 内循环计数器加一[SI+DL*2]与[SI+DL*2+2]交换[SI+DL]与[SI+DL+2]交换SI 指向成绩序列首地址,DL=CLSI 指向序号序列首地址,DL=CLCOUNT1是每次内循环需要进行的内循环的次数NO YESYES六.总结:本次实验可以分为三大块,一是输入及存储,二是排序,三是显示,在第一部分中很多是上个实验已经实现的功能,唯一不同的地方是这次需要将每次输入的数据有序的存在一段连续的内存中,以便输入结束后能对这段内存中的数进行排序。
排序模块需要对排序算法有较为透彻的理解,这里采用冒泡排序,减小时间复杂度,和高级语言中的冒泡排序不同的是,这里要对数据所在的地址有非常清晰的认识,这样才能有序的进行两数的比较以及比较完毕可能会有的数据交换。
显示部分相对来说就比较简单了,用地址加的方式对相应字符串中的字节进行显示即可。
在这次实验中,让我最受益匪浅的是,在算法设计及数据读写的过程中数据所在地址的变化,这经常让我转晕了,所以就得在纸上画出内存及其地址的示意图来帮助我。
整个程序下来对硬件中内存地址的分配和数据的存储有了更加清晰的认识。
实验五中断程序设计一.实验目的:1.初步掌握中断程序的设计方法:2.初步掌握修改DOS 系统中断,以适应实际使用的方法.二.实验内容:1.编写一个32 位二进制数除以16 位二进制数的除法程序.观察当除数为0,或超过相应寄存器范围时,程序执行的结果.2.修改零号中断服务程序,使它具有以下功能:(1)判断除数是否为0,当除数为0 时,显示相应的结果;(2)当除数不为0 时,采用适当的方法完成商超过16 位的二进制数的除法运算.3.注意必须保护原有中断服务程序的入口地址,并在程序完毕前加以恢复.三.预习题:1.如何保护原有中断向量表中的中断服务程序的入口地址?答:在主程序一开始就将原终端服务程序的入口地址压栈保存。
2.如何将你的中断服务程序入口地址置入中断向量表?答:用直接写入的方法,将我的中断服务子程序的段地址和偏移地址赋给ES:[0002H]和ES:[0000H]四.选作题:1.用二进制将结果在屏幕上显示.2.从键盘输入二进制数.五.流程图:开始键盘输入将键盘的输入转化成二进制存储做除法溢出?YES进入0号中断除数等于零?NO扩展除法结果显示结束YES Error,退出dosNO六.代码:七:运行结果:(a)(a)图是当除数为零的时候报错,并退出DOS。
(b)(b)图是当商没有超过16位时,但是程序有问题,商的计算完全正确,但是余数却是错误的,仔细检查了ASCII码和16二进制的相互转换,并没有发现问题,而且商和余数是调用的同一个转换子程序,如果转换有问题那么商也会出错。
光看代码找不出错误后我开始调试,想看看没有溢出的时候除法计算后的商和余数是否正确,先用u命令查看了DIV BX 的地址,然后用g=0000 00d3将程序执行到DIV BX处,如下图(c)所示,当执行完DIV BX 后,AX=8000(存储商),DX=0000(存储余数),计算结果完全正确,但是继续往下实行到下图(d)中所示的红线时,出现了一条我并没有编写的程序JZ,遗憾的是当我想继续跟踪执行的时候调试出问题了,g命令和t命令都不能正常使用了,所以目前只能进行到这一步了,不过在验收之前我还会继续调试,努力找出问题所在的。
(c)(d)(e)图(e)是商超过16位时的扩展32位除法,商高16位是正确的,低16为和余数不对,而且余数和图(b)中的一样,我试过很多数,大多数情况下的余数都是这个值,肯定是哪里程序对正确的余数改动了我却不知道。
八.总结:这个程序主要是练习中断向量表的写和读,关键的就是原向量表的保存和恢复以及新向量表中的中断子程序地址的写入。
书上介绍了两种方法:直接写入法和用DOS提供的功能号完成,我个人比较喜欢前者,因为更加直观和直接。