西安交通大学微机原理第一次实验报告
西电 机电微机原理实验报告

微机原理实验报告姓名:学号:实验一8259中断实验一、实验目的1.掌握PC机中断处理系统的基本原理。
2.掌握外部扩展中断源的设计方法。
3.学会编写中断服务程序。
二、实验原理PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。
中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。
三、实验内容实验要求实现8259控制器的IR1、IR3两路中断都可以通过IRQ向PC机发起中断请求,用SP1、SP2单次脉冲模拟两个中断源。
IR1中断时,在它的中断服务程序中编程显示“IR1 OK AND EXIT!”;IR3中断时,在它的中断服务程序中编程显示“IR3 OK AND EXIT!”。
采用查询方式完成。
图1-1 扩展中断电路四、实验步骤1、连接线路SP1和SP2分别接到IR1和IR3,IR1和IR3与L0和L1指示灯相连,8259CS 接到Y0上,最后将/RD、/WR、INT分别与IOR、IOW、IRQ相连接,连接好后打开电源。
2、编写程序3、汇编、编译、连接及运行五、实验程序DATA SEGMENTIOPORT EQU 0FF00H-0280HMY8259_ICW1 EQU IOPORT +280H ;实验系统中8259的ICW1端口地址MY8259_ICW2 EQU IOPORT +281H ;实验系统中8259的ICW2端口地址MY8259_ICW3 EQU IOPORT +281H ;实验系统中8259的ICW3端口地址MY8259_ICW4 EQU IOPORT +281H ;实验系统中8259的ICW4端口地址MY8259_OCW1 EQU IOPORT +281H ;实验系统中8259的OCW1端口地址MY8259_OCW2 EQU IOPORT +280H ;实验系统中8259的OCW2端口地址MY8259_OCW3 EQU IOPORT +280H ;实验系统中8259的OCW3端口地址MSG1 DB 0DH,0AH,'DVCC PCI CARD INTERRUPT',0DH,0AH,'$'MSG2 DB 0DH,0AH,'PRESS ANY KEY TO EXIT!',0DH,0AH,'$'MSG3 DB 0DH,0AH,'IR1 OK AND EXIT!',0DH,0AH,'$'MSG4 DB 0DH,0AH,'IR3 OK AND EXIT!',0DH,0AH,'$'DATA ENDSSTACKS SEGMENTDB 100 DUP (?)STACKS ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKS,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXMOV AX,DATAMOV DS,AXMOV DX,OFFSET MSG1MOV AH,09HINT 21HMOV DX,OFFSET MSG2MOV AH,09HINT 21HSTART1: MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1 MOV AL,13H ;边沿触发、单片8259、需要ICW4OUT DX,ALMOV DX,MY8259_ICW2 ;初始化实验系统中8259的ICW2MOV AL,08HOUT DX,ALMOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4MOV AL,01H ;非自动结束EOIOUT DX,ALMOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1MOV AL,0F5H ;打开IR1和IR3的屏蔽位OUT DX,ALQUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令MOV AL,0CHOUT DX,ALNOPNOPNOPMOV DX,MY8259_OCW3IN AL,DX ;读出查询字TEST AL,80H ;判断中断是否已响应JZ QUERY ;没有响应则继续查询AND AL,07HCMP AL,01HJE IR1ISR ;若为IR1请求,跳到IR1处理程序CMP AL,03HJE IR3ISR ;若为IR1请求,跳到IR1处理程序JMP EOIQUERY1: MOV DL,0FFHMOV AH,06HINT 21HJZ START1MOV AH,4CHINT 21HIR1ISR: MOV DX,OFFSET MSG3 ;IR1处理,显示字符串'IR1 OK AND EXIT'MOV AH,09HINT 21HJMP EOIIR3ISR: MOV DX,OFFSET MSG4 ;IR1处理,显示字符串'IR3 OK AND EXIT'MOV AH,09HINT 21HEOI: MOV DX,MY8259_OCW2 ;向实验系统中8259发送中断结束命令MOV AL,20HOUT DXMOV AL,20H ;SEND EOIOUT 0A0H,ALOUT 20H,ALPOP DSPOP DXPOP AXJMP START1CODE ENDSEND START六、实验结果接好电路,编好程序,打开电源后,两个LED指示L0和L1灯都熄灭;编译、链接、运行程序,8259控制器的IR1、IR3两路中断可通过IRQ向PC机发起中断请求,按下SP1,IR1中断,指示灯L0亮,电脑屏幕上显示“IR1 OK AND EXIT!”;按下SP2, IR3中断,指示灯L1亮,电脑屏幕上显示“IR3 OK AND EXIT!”七、实验中遇到的问题及解决方法最初认为要按照原理图把所有线都接上,后来知道了直接用排线连接就好,同时还能降低短路的可能性。
微机原理实验报告(1)

微机原理与接口技术实验报告学院:计算机科学与工程学院专业:计算机科学与技术班级:计算机四班学号:姓名:指导老师:宋芳2011年12月1日调试程序DEBUG的使用练习一、实验目的:1.学习DEBUG常用命令的使用2.熟悉8086的寄存器3.了解程序运行的过程二、实验内容:分别用DEBUG程序的命令实现对PC机RAM单元、CPU寄存器等的内容修改及简单程序的跟踪运行;三、具体实验过程Debug的R命令查看、改变CPU寄存器的内容Debug的D命令查看内存中的内容Debug的E命令改写内存中的内容Debug的U命令将内存中的机器指令翻译成汇编指令Debug的T命令执行一条机器指令当指令是修改段寄存器SS时,修改SP的指令也一下执行了。
也可以跳到指定代码段执行:-t=0B39:0106Debug的A命令以汇编指令的格式在内存中写入一条机器指令用G是断点执行,用-g=100 106 10D,默认为段地址是CS。
2、在debug中,遇到loop循环指令时,可以用p跳过;实验十八写文件实验一.实验要求编写程序,将内存区域中用DEBUG程序设置好的一连串数据,以ASCII码1AH为结束符作为一个文件,存入磁盘,文件名为DATA.AAA.二.实验目的掌握写文件的DOS功能调用方法。
三.实验说明1.对于文件的读写操作,DOS提供了两种手段,第一种手段使用FCB进行存取,第二种手段是文件代号法进行存取。
文件代号法支持目寻路径,并且对错误采用了更统一的办法处理,是DOS推荐的存取方法。
2.使用文件代号法,要求文件名(含路径)用ASCII串表示,所谓ASCII串,就是以空字符00H结尾的一串ASCII字符。
3.文件代号法存取时出现错误,则功能调用返回时,要将CF标志位置1,同时在AX寄存器中返回统一的出错代码。
程序中要用JC指令进行错误判定,确认出错后再将错误代码显示出来,以便分析出错原因。
四.实验代码DATA SEGMENTBUFFER DB 'my name is tang zhi quan,my number is 0905010215' COUNT EQU $-BUFFER ;the count of ASCII for bufferDA DB 'please enter the file absolute path and file name:$' ADDRESS DB 40,?,40 DUP (?)BUILD_FAIT DB OFFSET AX3,OFFSET AX4,OFFSET AX5AX3 DB 'path cannot find$'AX4 DB 'open file too much$'AX5 DB 'access method is wrong$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA DX,DA ;Prompt for the file absolute pathMOV AH,9INT 21HLEA DX,ADDRESS ;set file pathMOV AH,0AHINT 21HMOV AH,2 ;put crlfMOV DL,0AHINT 21HMOV DL,0DHINT 21HMOV AL,ADDRESS+1 ;the number of path to SI MOV AH,0MOV SI,AXMOV DX,OFFSET ADDRESS+2 ;the first address for file path MOV BX,DXMOV BYTE PTR [BX+SI],'$' ;the end add 'S' to mark the end MOV CX,00H ;file propertyMOV AH,3CH ;create a file,the absolute path is "ADDRESS" INT 21HJNC NEXT ;sign create file succesWRONG_SHOW: MOV BX,OFFSET BUILD_FAIT;show the reason for file establish SUB AX,3 ;fail code of ax is 3,4,5ADD BX,AX ;ds:dx is the wrong information's first address MOV DL,[BX]MOV DH,0MOV AH,9INT 21HNEXT: MOV BX,AX ;ax is the number of file handlesMOV CX,COUNT ;the number of bufferLEA DX,BUFFER ;ds:dx point the first address of buffer MOV AH,40HINT 21HINT 21H ;endMOV AX,4C00HINT 21HCODE ENDSEND STAR开始初始化用int 21H的9号调用显示提示输入文件的绝对路径用int21H的0AH号调用输入并回显在屏幕上,并存入变量ADDRESS中,在后面加入'$'结束符输出换行回车用int21H的3CH号调用创建文件DATA.AAA,属性为默认读写CF=1YN创建文件失败,显示错误信息用int21H中的40H调用将buffer中的数据写入文件用int21H的3EH调用关闭文件结束实验三 8255输出实验一.实验要求编写程序,一8255作为输出口,控制8个单色LED灯。
微机原理实验-顺序实验

西安交通大学实验报告课程:微机原理与接口技术实验实验名称:顺序程序设计第 1页共页系别:理学院应用物理系实验日期 2016年11月19日专业班级:应物42班组别____________ 实验报告日期 2016年月日姓名:茹世浩学号: 2140903034 报告退发 ( 订正、重做) 1.实验目的学习8086汇编语言程序的基本结构和顺序程序设计的基本方法。
2.实验设备微型电脑、、、3.实验原理顺序程序是控制流仅有一个走向的程序,它主要用于解决一些无需进行判断分支,也无需循环执行的简单问题。
本节的实验内容与乘法和除法运算有关。
无符号数乘法运算使用MUL指令,有符号数乘法运算使用IMUL指令。
乘法运算属于隐含操作数的运算,因此在使用乘法指令前,需要先将乘数放入AL〔8位乘法〕或AX〔16位乘法〕中。
乘法指令执行后,乘积在AX〔8位乘法〕或DX:AX〔16位乘法〕中。
无符号数除法运算使用DIV指令,有符号数除法运算使用IDIV 指令。
除法运算属于隐含操作数的运算,因此在使用除法指令前,需要先将被除数放入AX 〔8位除法〕或DX:AX〔16位除法〕中。
当除数为8位时,被除数应为16位;除数为16位时,被除数应为32位。
对无符号数除法,当被除数字长不够时,高位部分可直接补0;而对有符号数除法,当被除数字长不够时,必须使用符号扩展指令进行扩展。
除法运算执行后,结果在AX〔8位除法〕或DX:AX〔16位除法〕,其中AL〔8位除法〕或AX〔16位除法〕中是商,AH〔8位除法〕或DX〔16位除法〕中是余数。
4.实验内容在NUM变量中定义了5个有符号数〔字节类型〕,分别是U= 09H,V=16H,W=04H,X=17H,Y=05H,计算〔U+V-W*X〕/Y,将结果显示在屏幕上。
程序流程图如图错误!文档中没有指定样式的文字。
-1。
开始[NUM]=U,[NUM+1]=V,[NUM+2]=W,[NUM+3]=X,[NUM+4]=Y第一步:计算W*X1. [NUM+2]→AL〔数据W送AL〕2. AL*[NUM+3]→AL〔W*X乘积送AL〕→BL〔乘积备份到BL〕第二步:计算U+V-W*X1. [NUM]→AL〔数据U送AL〕2. AL+[NUM+1]→AL〔U+V之和送到AL〕3. AL-BL→AL〔U+V-W*X,结果送到AL〕第三步:计算〔U+V-W*X〕/Y1. AL符号扩展到AX2. AX / [NUM+4]→AX 〔〔U+V-W*X〕/Y,商在AL中〕第四步:显示结果的高4位1. AL中的结果暂存到BL2. AL逻辑右移4位〔取高4位〕3. AL的内容转换成ASCII码4. 显示第五步:显示结果的低4位1. BL中暂存的结果送到AL2. 保留AL中低4位,高4位清03. AL的内容转换成ASCII码4. 显示返回DOS图错误!文档中没有指定样式的文字。
西安交大微机原理实验报告1

实验一数据传送、算术运算、循环程序结构实验目的:1 •熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇编、 连接、执行的过程,并利用 Turbo Debugger 调试汇编程序。
2. 熟悉8086指令系统的数据传送指令,掌握寻址方式。
3. 熟悉8086指令系统的算术运算指令。
掌握循环结构汇编语言程序的编制。
实验内容:1、P121 14 题程序框图:DW 128 DUP ⑺STACKS ENDSDATAS SEGMENT;数据DATA SEGMENTORG 1000HBCD1 DD 90000010H,12345678HORG 2000HBCD2 DD 90000020H,23456789H;堆栈段 源代码:STACKS SEGMENT STACKDATA ENDSCODES SEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART: MOVAX,DATAS;初始化MOV DS,AXMOV CX,8 ;循环次数 MOV BX,0 ;指针 CLCJ进位清零L00P1: MOVAL,[BX+1000H];BCD1 ADCAL,[BX+2000H];BCD1+BCD2AAA J分离修正MOV [BX+2000H],AL;移到要求的位置INC BX ;指针指向下一个子节LOOPLOOP1MOV AX,4C00H ;退出程INT 21HCODES ENDSSTART结果:2、P121 15 题程序框图: 源代码:STACKS SEGMENT STACK;堆栈段DW 128 DUP ⑺STACKS ENDS DATAS SEGMENT;数据段ENDORGDB2000H 80H,81H,82H,83H,00H,01H,02H,03H,84H,85H DATAS ENDSCODES SEGMENT ;代码段 START: L1:LODSBL2:LOOP L1 ASSUMECS:CODES,DS:DATASMOVAX,DATAS;初始化 MOV DS,AX MOVSI,2000H J MOV CX,10 ;字节数 MOV DL,0FFH ;最小的有符- CMP AL,DLJNG L2MOV DL,ALMOV DS:[2000H],DL MOV AX,4C00H ;退出程序 INT 21H ;最大数存入2000h 单号字节数据CODES ENDS END START 3、P195 6 题 程序框图源代码:STACKS SEGMENTDWSTACK128 DUP(?);堆栈段JSTACKS ENDSDATAS SEGMENT;数据段ORG1000HN1DW1111HN2DW2222HN3DW3333HM1DW0M2DW0M3DW0DATAS ENDSCODES SEGMENT;代码段ASSUME CS:CODES,DS:DATAS START:MOV AX,DATAS;初始化MOV DS,AXMOV AX,N2MUL N3;B*CMOV M3,AXMOV M2,DXMOV AX,N3MUL N1;A*CADD M2,AXADC M1,DXMOV AX,4C00H;退出程序INT 21HCODES ENDSEND START结果:醪DOSBox DJ4h Cpu speedt 3000 cycles. Frames kip 0, Program: DEBUGS Trace Irrterrupt-tAX-1CBS BX=O900 CX=1137 »S=1C 庐ES=1C35 SS=1CA5 1DB6:00G5 A1GZ10Trftce Interruptkd ds:1000 DX=O0OO SP=G10O BP=0900 SI=G0OO DI=0OQO CS=1DB6 IP=O00g MU UF DI PL NZ NA FO NC MOU AX^ElOOgJ1CB5: IODO 11 11 E乙祝33 33 1CB5:1010 BB B5 1C BE D8 fit 1CB5:1020 16 G6;10 Al 04 10 1CB5: 1G30 66 10 B8 60 处CD 1CB5:1CHQ e© 00 00 00 00 00 ***Dup1icate Line(s)*** 1CB5:10?0 GO 0© 00 00 QG 00rogram terminated BC = 0 M lcbS:ICG©1CB5:1600 11 11 22 22 33 33 1CB5:10101C 8E D6 Al1C跖:1G2O 16 66 10 Al CH 10 1CB5: 1G30 66 10 B8 D0 4C CD 1CB5:164Q ©0 Q0 00 00 00 GO k**Duplicate Linets)*** 1CB5:1670 GO 00 00 GO GO 00 kx 00 00-00 00 00 00 00 GE 10-F?昂€4 10 A3F7 Z6-00 10 61 06 6821 GG-00 GO eo oe 0000 00-00 00 60 00 0000 <30-00 0069 GG-36GEF7Z10010-F726-00O0-0GGO-00D0261000004、P196 12 题程序框图36eA&81&&©'01OOw■ n i_r P ■■■■■:RS*,X? *,w®,...?..u&.....8.LM!……00C6€40100GO921006000000A3080000载囹己臭制在QQ或者wo胡文档中右■■ U ■ X J H Ta ■ BI ■ A ■■00 00-00 00 G0 00 00 G0 00 00 ......................................源代码:STACKS SEGMENT STACK ;堆栈段DW 128 DUP⑺;STACKS ENDSDATAS SEGMENT ;数据段STRING1 DB'AAAA'STRING2 DB'AAAa'DATAS ENDSCODES SEGMENT ;代码段ASSUME CS:CODES,DS:DATASAXQATAS ;初始化DS,AX AX,DS ES,AX SI,STRING1 DI,STRING2 CX,4STRING1,STRING2 LABNE AL,'Y' EXIT AL,'N'AX,4C00H ;退出程序 21H结果:[>0: ■ J ir ] IPLL L J59H 是N 的ascII 码实验中出现的问题及解决:总体来说,实验中最大的阻碍是 64位系统不能使用masm 或者轻松汇编等软件,造成了许多困难,解决办法是在网上下载了dosbox ,输入命令 mount ch:\study\masm, h:\study\masm 是我电脑中masm.exe 所在的位置,不知道什么原因masm611用不了这个方法,在网上重新下载了 masm5,和debug32至此,算是 解决了“非编程困难”。
微机原理与应用第一次实验报告

微机原理与应用实验一、实验二实验报告电92 雷云泽2009010941 实验一简单计算机系统基本模块设计1一、实验目的1.掌握简单计算机系统的指令系统2.掌握简单计算机基本模块的设计方法3.巩固EDA电路仿真和调试的方法二、实验任务包括练习指令编码设计寄存器组模块、设计RAM模块、设计I/O端口及其映射模块、设计和检测ROM模块1.练习指令编码阅读项目任务书的简单计算机指令系统,理解其中的7条R型指令AND、OR、ADD、SUB、ADDC、SUBC、SLT,和2条I型指令的LW、SW。
写出表1-1指令的编码和功能说明。
表1-1 指令编码练习2.设计寄存器组模块(1)任务要求在R类型指令中有3个操作数,其中2个操作数来自寄存器组,作为算术逻辑模块ALU的输入,另1个操作数是ALU 的输出,需写回寄存器组中。
所以,寄存器组模块需要1个写通道、2个读通道。
在寄存器组读操作时,需给出要读寄存器的寄存器号,寄存器组将该寄存器号对应的内容从输出端口输出;在寄存器组写操作中,需给出要写入寄存器的寄存器号和要写入的数据,寄存器组模块将在控制信号的作用下把数据写到指定的寄存器中。
寄存器组模块的封装图见1-1,包含2个异步读通道、1个同步写通道,内部包含4个8位寄存器(分别称为R0、R1、R2、R3,对应的二进制编号分别为00、01、10、11),1个2-4译码器和2个8位4选1多路选择器,其中每个寄存器都是带时钟使能和异步复位端口的8位D 触发器。
可利用QuartusII的MegaWizard下LMP_FF、LMP_DECODE、LPM_MUX进行设计。
寄存器组模块信号说明:输入信号:N1[1..0]:读通道1的寄存器号N2[1..0]:读通道2的寄存器号ND[1..0]:写通道的寄存器号DI[7..0]:写通道的输入数据CLK:时钟脉冲信号,上升沿有效REG_WE:写允许,为1时,在CLK上升沿,将数据DI写入ND指定的寄存器;为“0”时,禁止对寄存器阵列进行写操作。
微机原理与接口技术实验报告一

微机原理与接口技术实验报告(一)实验内容一:1、实验目的: 考察对内存寻址方式、8086指令的理解内存中的数据排列如上表所示,各寄存器内容如下DS=2100H ES=2111H SS=2000H BX=106H CX=3H SI=106H DI=12H BP=1100H SP=1100HFR=3402H (FR 标志寄存器,FR 中的DF -字符串操作方向位为1)在执行下列指令后,写出寄存器AX中的内容 0) pop ax; AX= 1) mov ax,bx; AX= 2) mov ax,[bx];AX= 3) mov ax,102H;AX= 4) mov ax,[102H];AX= 5) mov ax,6[SI];AX= 6) lea ax,6[BX][DI];AX= 7) mov ax,[BP+DI];AX= 8) rep lodsw;AX= , 还需写出SI=2、实验内容: (1)开始菜单下选择运行,输入cmd 回车,在开启的窗口中输入debug 后回车,进入程序输入环境(2)利用r 指令显示当前各寄存器储值并按照上文中的寄存器值进行修改 结果如下:物理地址 内容(字节) 物理地址 内容(字节)21100H BEH 21110H 99H 21101H 02H 21111H 00H 21102H 01H 21112H E8H 21103H 8BH 21113H 7EH 21104H 44H 21114H E0H 21105H 02H 21115H 74H 21106H 29H 21116H 06H 21107H 44H 21117H E8H 21108H 04H 21118H 17H 21109H 9CH 21119H 01H 2110AH 50H 2111AH ACH 2110BH E6H 2111BH EBH 2110CH 99H 2111CH 34H 2110DH C6H 2111DH 00H 2110EH 06H 2111EH 30H 2110FHE8H2111FH0BH(3)d指令查看21100H——2111FH内存单元的内容(4)e指令对该段内存单元进行赋值(5)a指令按顺序输入要求中列出的指令(6)u指令进行反汇编(7)t指令(跟踪命令)逐条运行指令,观察记录指令运行结果3、实验结果0) pop ax; AX=02be1) mov ax,bx; AX=01062) mov ax,[bx];AX=44293) mov ax,102H;AX=01024) mov ax,[102H];AX=8b015) mov ax,6[SI];AX=c6996) lea ax,6[BX][DI];AX=011e7) mov ax,[BP+DI];AX=7ee88) rep lodsw;AX=4429, SI=0108实验内容二:1、实验目的:熟悉masm for windows 软件的应用,体会汇编程序的编写、编译、执行及调试等各个环节。
微机原理实验报告

微机原理实验报告概述:微机原理是计算机科学与技术专业中的一门重要课程,通过实验学习,可以加深对计算机内部运行原理的理解,提高软硬件的开发和调试能力。
本实验报告将介绍我对微机原理实验的学习和思考。
实验一:二进制转换实验在这个实验中,我首先了解了二进制数的概念以及其和十进制数的转换方法。
通过实际操作,我加深了对计算机内部数据表示方式的理解。
这对于后续学习计算机系统结构和编程语言至关重要。
实验二:逻辑门电路实验逻辑门电路是计算机硬件的基础组成部分,通过实验,我学会了使用逻辑门芯片构建各种逻辑电路,并能够通过真值表分析和验证逻辑电路的正确性。
这对于理解计算机内部的数据处理和控制逻辑有着直接的帮助。
实验三:运算器设计实验在这个实验中,我通过学习和设计算术逻辑单元(ALU),了解了计算机的算术操作过程,并能够通过运算器实现基本算术运算。
这对于理解计算机内部数据的处理和计算机指令的执行有着重要的意义。
实验四:存储器与外设实验存储器是计算机系统的重要组成部分,通过实验,我深入了解了存储器的类型、组织结构和访问方式,并通过外设与存储器的交互,实践了计算机系统的输入和输出过程。
实验五:微处理器实验微处理器是计算机系统中最核心的部件,通过实验,我学习了微处理器的基本运行原理,能够通过汇编语言编写程序,并通过微处理器执行程序实现特定的功能。
这个实验为我今后学习计算机体系结构和操作系统打下了坚实的基础。
实验总结:通过这几个实验,我深入了解了微机原理课程的实践内容和相关知识。
实验的过程中,我不仅学会了使用仪器设备和工具,还培养了自己的动手能力和团队合作精神。
通过不断的实践,我对计算机内部结构和运行原理有了更深刻的理解,也提高了我的问题解决能力和创新思维。
未来展望:微机原理实验的学习只是计算机科学与技术专业中的一小部分。
我希望在今后的学习过程中能加深对计算机体系结构、操作系统、编程语言等方面的学习,并不断深入钻研,成为一名优秀的计算机科学与技术专业人才。
微机原理的实验报告

一、实验目的1. 理解微机的基本组成和各部件的功能;2. 掌握微机的工作原理和指令系统;3. 熟悉汇编语言程序设计的基本方法;4. 提高动手能力和实际操作技能。
二、实验内容1. 微机系统组成实验(1)实验目的:了解微机的基本组成和各部件的功能。
(2)实验内容:观察并记录微机系统的各个部件,如CPU、内存、硬盘、主板等,并了解它们的功能。
(3)实验步骤:①观察微机系统各个部件的连接情况;②了解各个部件的功能和作用;③分析微机系统的整体结构。
2. 微机工作原理实验(1)实验目的:掌握微机的工作原理。
(2)实验内容:观察并记录微机工作过程中的各个阶段,如指令的取指、译码、执行等。
(3)实验步骤:①观察微机工作过程中的各个阶段;②了解各个阶段的功能和作用;③分析微机工作原理。
3. 指令系统实验(1)实验目的:熟悉汇编语言指令系统。
(2)实验内容:学习汇编语言的基本指令,如数据传送指令、算术运算指令、逻辑运算指令等。
(3)实验步骤:①学习汇编语言的基本指令;②编写简单的汇编语言程序,实现数据传送、算术运算、逻辑运算等功能;③调试程序,观察程序运行结果。
4. 汇编语言程序设计实验(1)实验目的:提高汇编语言程序设计能力。
(2)实验内容:编写一个汇编语言程序,实现以下功能:①计算两个数的和;②判断一个数是否为偶数;③输出程序运行结果。
(3)实验步骤:①编写汇编语言程序,实现上述功能;②调试程序,观察程序运行结果;③分析程序运行过程,确保程序正确性。
三、实验结果与分析1. 微机系统组成实验:通过观察和记录微机系统的各个部件,了解了微机的基本组成和各部件的功能。
2. 微机工作原理实验:通过观察微机工作过程中的各个阶段,掌握了微机的工作原理。
3. 指令系统实验:通过学习汇编语言的基本指令,熟悉了汇编语言指令系统。
4. 汇编语言程序设计实验:通过编写汇编语言程序,提高了汇编语言程序设计能力。
四、实验心得通过本次微机原理实验,我对微机的基本组成、工作原理和指令系统有了更深入的了解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微型计算机原理与接口技术第一次实验报告实验者姓名:实验者学号:所在班级:报告完成日期:20年月日实验二分支程序的设计一、实验目的1.学习提示信息的显示及键盘输入字符的方法。
2.掌握分支程序的设计方法。
二、实验内容在提示信息下,从键盘输入原码表示的二位十六进制有符号数。
当此数大于0时,屏幕显示此数为正数;当此数小于0时,屏幕显示此数为负数;当此数等于0时,屏幕显示此数为零。
三、实验调试过程利用-u命令进行反汇编,结果如下。
三个CMP语句运行完的地址如图所示,第一个CMP运行完的是29H输出结果的地址如下图所示:首先对输入为负数时进行验证:输入FFH,设置一个断点在29H,利用-t命令观察跳转,结果如图:可以看到,程序最终正确的转入输出负的分支。
再输入正数11H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出正的分支。
最后输入00H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出0的分支。
四、实验框图及程序代码实验框图:程序代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENT;定义结果信息MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DA TABUF DB 3 ;定义最大可输入字符长度ACTLEN DB ? ;实际输入字符长度STRING DB 3 DUP(?) ;输入字符缓冲区DA TA ENDSSSEG SEGMENT PARA STACK 'STACK'DB 50 DUP(0)SSEG ENDSCODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV AX,SSEGMOV SS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET DATABUFINT 21HCRLFMOV AL,STRINGCMP AL,38HJAE ISNEGCMP AL,30HJNZ ISPOSMOV AL,[STRING+1]CMP AL,30HJNZ ISPOSJMP ISZEROISPOS:MOV DX,OFFSET MESS2MOV AH,09HINT 21HJMP DONEISNEG:MOV DX,OFFSET MESS3MOV AH,09HINT 21HJMP DONEISZERO:MOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP DONEDONE:MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果及分析编写的汇编程序EX2.ASM经过汇编MASM与链接LINK生成可执行文件EX2.EXE,测试如下:可见,程序能够正确判断输入数据的正、负、零情况。
六、实验中遇到的问题及解决方法测试程序时,曾经输入0,结果输出“THIS DATA IS +”,出现错误。
后来查NG 发现是输入语句遇到换行即停止。
这样的输入方式导致第二位存的是换行符的ASCII码,导致结果出错!对程序开头的MACRO宏段的作用比较好奇,尝试在输入数据段将CRLF语句注释掉,发现数据输入后被下一句输出语句掩盖。
原来CRLF实现的是回车(换到行头)、换行(跳到下一行)。
七、思考题1.在DEBUG跟踪某条分支时,断点应该下在什么位置?如何查看标志位的变化情况?答:断点应该下在标志位或数值寄存器的值发生变化前后,比如这段程序就可以将断点设置在CMP语句的后一句语句之前,观察标志位的变化。
使用-r指令可以查看标志位的情况。
2.从键盘输入的数字在键盘缓冲区是怎么样分布的?用图简单地示意,用哪几条相关的DEBUG命令查看?答:调用NG查0AH功能号。
缓冲区第一字节存放它能够保存的最大字符数(即程序中的DATABUF),第二个字节存放实际输入的字符数(即程序中的ACTLEN),从第三字节开始存放键盘输入字符,最后一个字节将用来存放回车符。
所以,实际只能输入DATABUF-1个字符。
例如,对本次实验,输入的是两位16进制数,键盘缓存区如下:查看时,可以先用-u命令反汇编,找出缓冲区的偏移地址,利用-t、-p、-g等命令输入数据后,再用-d命令查看。
3.若输入的是非法字符而不是十六进制数,此程序会得到什么结果?如何改进?答:此程序只根据输入字符的ASCII码数值大小进行判断,因此若输入的非法字符高位大于或等于38H会显示为负,小于38H会显示为正。
改进时,需要增加判断语句,首先判断输入的数是否合法,即输入的数是否大于等于30H且小于等于39H或大于等于41H小于等于46H。
若不满足条件,直接跳转输出“输入数据不合法”;若满足条件,说明输入的数字合法,再按照原本的程序进行判断即可。
八、心得体会本次实验学习了汇编语言的分支程序设计,同时学习了键盘输入的相关知识。
以往学习C++语言时,输入可能只是一个cin或者scanf语句,没有关注过键盘输入的数据实际是怎样存储的。
这次实验才了解到输入的数据原来是这样存储,很有收获。
同时,以往简单的if语句,原来是背后的各种跳转指令实现的:这让我感受到,汇编语言比高级语言更加接近程序框图描述的方式,一个个箭头就是一个个Jxx的跳转指令,而判断语句块则对应着各种F标志位。
总之,本次实验让我在第一个顺序程序设计的基础上对汇编语言更加熟悉,对其程序编写、DEBUG调试、以及NG查命令都更加了解!实验三循环程序的设计一、实验目的1.掌握提示信息的使用方法和从键盘键入信息的用法;2.掌握循环程序的设计方法。
二、实验内容编写程序,从键盘分别键入两个字符串,进行比较,若相同,则显示“MATCH”,否则,显示“NO MATCH”。
三、实验调试过程首先利用-u命令进行反汇编,结果如下:第一个比较语句运行结束的地址为4DH,第一个断点设置为4DH,比较两个字符串的长度。
首先验证两个不同长度的字符串,输入两个不同长度的字符串在4DH断点处利用-t命令观察跳转情况:代码地址直接跳转至67H,即不匹配输出块,输出“NO MATCH”,程序运行正确。
之后对两个相同的字符串调试:第一次的比较不进行跳转,即长度相等。
在下次比较开始循环跳转,直到CL减为0之前都会进行循环。
CL为0,跳出循环判断为相等,显示“MATCH”。
而在两个不相同的两个字符串比较时,在比较不相等时会立即跳出循环,跳转至不匹配块,显示“NO MATCH”,程序调试完成。
四、实验框图及程序代码五、实验框图:程序代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENTMESS1 DB 'INPUT STRING1:',0DH,0AH,'$'MESS2 DB 'INPUT STRING2:',0DH,0AH,'$'MESS3 DB 'NO MA TCH',0DH,0AH,'$'MESS4 DB 'MATCH',0DH,0AH,'$'MAXLEN1 DB 81 ;定义字符串1允许最大长度80(最后一位用来存enter)ACTLEN1 DB ? ;字符串1实际输入长度单元STRING1 DB 81 DUP(?) ;字符缓冲区MAXLEN2 DB 81 ;定义字符串1允许最大长度80(最后一位用来存enter)ACTLEN2 DB ? ;字符串1实际输入长度单元STRING2 DB 81 DUP(?) ;字符缓冲区DA TA ENDSSTACK SEGMENT PARA STACK 'STACK'STA DB 50 DUP(?)TOP EQU LENGTH STA ;原来堆栈段的段基址是在栈顶!STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX ;数据段段寄存器赋值MOV ES,AX ;附加段段寄存器赋值?????MOV AX,STACKMOV SS,AX ;堆栈段段寄存器赋值MOV SP,TOPMOV AH,09HMOV DX,OFFSET MESS1 ;显示提示信息1INT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN1 ;接收字符串1INT 21HCRLFMOV AH,09HMOV DX,OFFSET MESS2 ;显示提示信息2INT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN2 ;接收字符串2INT 21HCRLF;自行编写部分MOV SI,OFFSET ACTLEN1MOV BX,OFFSET ACTLEN2MOV AL,[SI]CMP AL,[BX]JNZ NOMA ;长度不等,表明不匹配,直接跳转MOV CL,ALLOOPER: ;循环部分INC SIINC BXMOV AL,[SI]CMP AL,[BX]JNZ NOMADEC CL;CMP CX,00HJNZ LOOPERMOV AH,09HMOV DX,OFFSET MESS4INT 21H ;显示'MATCH'JMP DEND ;结束NOMA: MOV AH,09HMOV DX,OFFSET MESS3INT 21H ;显示'NO MA TCH'DEND: MOV AX,4C00HINT 21HCODE ENDSEND START六、实验结果及分析编写的汇编程序EX2.ASM经过汇编MASM与链接LINK生成可执行文件EX2.EXE,测试如下:可见,程序可以正确比较两字符串的异同。
七、实验中遇到的问题及解决方法实验中曾出现比较结果不正确的情况,经过调试,发现是给循环次数赋值时用了MOV CX,AL。
此时AL=[SI],由于CX为16位,AL为8位,程序自动将[SI]和[SI+1]赋给了CX,出现错误!另外,删去附加段段寄存器赋值语句MOV ES,AX,程序结果没有区别,该语句的意义不明。