《计算机组成原理与接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理与接口技术实验报告.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、优质文本计算机组成原理与接口技术课程设计实验报告学院: 计算机科学与工程 专业: 计算机科学与技术 班级: 计科二班 学号: 姓名: 指导老师: 评分:2016年12月28日实验一 验证74LS181运算和逻辑功能1、实验目的(1) 掌握算术逻辑单元ALU的工作原理;(2) 熟悉简单运算器的数据传送通路;(3) 画出逻辑电路图及布出美观整齐的接线图;(4) 验证4位运算功能发生器(74LS181)组合功能。2、实验原理ALU能进行多种算术运算和逻辑运算。4位ALU-74LS181能进行16种算术运算和逻辑运算。74ls181芯片介绍:该芯片总共由22个引脚,其中包括8个数据输入端A0、A1、A
2、2、A3,B0、B1、B2、B3,其中八个输入端中A3和B3是高位,这八个都是低电平有效。还包括S0、S1、S2、S3这四个控制端,这四个控制端主要控制两个四位输入数据的运算,例如加、减、与、或。CN端处理进入芯片前进位值,M控制芯片的运算方式,包括算术运算和逻辑运算。F0、F1、F2、F3是四个二进制输出端,以一个四位二进制形式输出运算的结果。CN4记录运算后的进位。功能表如下:方式M = 1 逻辑运算M = 0算术运算S3 S2 S1 S0逻辑运算CN=1 (无进位)CN =0 (有进位)0 0 0 0F=/AF=AF=A加10 0 0 1F=/(A + B)F=A + BF=(A + B
3、) 加10 0 1 0F=(/A ) BF=A + /BF=( A + /B )加10 0 1 1F=0F=负1补码形式F=00 1 0 0F=/(A B)F=A加A ( / B)F=A加A / B加10 1 0 1F=/BF=(A + B) 加A / BF=(A + B)加A / B加10 1 1 0F=A BF=A减B减1F=A减B0 1 1 1F=A/BF=A (/ B)减1F=A (/ B) 1 0 0 0F=/A +BF=A加A BF=A加A B加11 0 0 1F=/( A B)F=A加 BF=A加B加11 0 1 0F=BF=( A + /B )加A BF=( A + /B )加
4、A B加11 0 1 1F=ABF=AB减1F=AB1 1 0 0F=1F=A加 AF=A加 A加11 1 0 1F=A + /BF=(A + B) 加 AF=(A + B) 加 A加11 1 1 0F=A + BF=(A + / B) 加 AF=(A + / B) 加 A加11 1 1 1F=AF=A 减1F=A (上表中的“/表示求反)ALU-74LS181引脚说明:M=1 逻辑运算,M=0算术运算。引 脚说 明M 状态控制端M=1 逻辑运算;M=0算术运算。S3 S3 S1 S1运算选择控制S3 S3 S1 S1决定电路执行哪一种算术A3 A2 A1 A1运算数1,引脚3为最高位B3 B
5、2 B1 B0运算数2,引脚3为最高位Cn 最低位进位输入Cn =0 有进位;Cn =1 无进位;Cn+4本片产生的进位信号Cn+4=0 有进位;Cn+4=1 无进位;F3 F2 F1 F0F3 F2 F1 F0运算结果,F3为最高位3、实验内容 实验电路图:验证74LS181型4位ALU的逻辑算术功能S3 S2 S1 S0数据1数据2算术运算M=0逻辑运算M=1CN=1 (无进位)CN =0 (有进位)0 0 0 0AH5HF=AHF=BHF=5H0 0 0 1AH5HF=FHF=0HF=0H0 0 1 0AH5HF=AHF=BHF=5H0 0 1 1AH5HF=FHF=0HF=0H0 1
6、0 0FH1HF=DHF=EHF=EH0 1 0 1FH1HF=DHF=EHF=EH0 1 1 0FH1HF=DHF=EHF=EH0 1 1 1FH1HF=DHF=EHF=EH1 0 0 0FHFHF=EHF=FHF=FH1 0 0 1FHFHF=EHF=FHF=FH1 0 1 0FHFHF=EHF=FHF=FH1 0 1 1FHFHF=EHF=FHF=FH1 1 0 05H5HF=AHF=BHF=FH1 1 0 15H5HF=AHF=BHF=FH1 1 1 05H5HF=4HF=5HF=5H1 1 1 15H5HF=4HF=5HF=5H4、总结及心得体会本实验通过一个设计一个简单的运算器,使
7、我熟悉了Multisim软件的一些根本操作方法,并掌握了一些简单的电路设计与分析的能力,并对我做下一个运算器的实验有一定的帮助。因为是之前实验课做过的实验,再次做起来过程比拟流畅,没有遇到什么大的问题,实验的测试结果与预期的一致。该芯片总共由22个引脚,其中包括8个数据输入端A0、A1、A2、A3,B0、B1、B2、B3,其中八个输入端中A3和B3是高位,这八个都是低电平有效。还包括S0、S1、S2、S3这四个控制端,这四个控制端主要控制两个四位输入数据的运算,例如加、减、与、或。CN端处理进入芯片前进位值,M控制芯片的运算方式,包括算术运算和逻辑运算。F0、F1、F2、F3是四个二进制输出端
8、,以一个四位二进制形式输出运算的结果。CN4记录运算后的进位。其中AEQB、P和G 这三个端口与本实验无关,所以这里不做额外介绍。实验二 运算器21、实验目的(1) 熟练掌握算术逻辑单元ALU的应用方法;(2) 进一步熟悉简单运算器的数据传送原理;(3) 画出逻辑电路图及布出美观整齐的接线图;(4) 熟练掌握有关数字元件的功能和使用方法。(5) 熟练掌握子电路的创立及使用。2、实验原理本实验仿真单总线结构的运算器,原理如图2-2所示。相应的电路如图2-3所示。电路图中,上右下三方的8条线模拟8位数据总线;K8产生所需数据;74244层次块为三态门电路,将部件与总线连接或断开,切记总线上只能有一
9、个输入;两个74273层次块作为暂存工作存放器DR1和DR2;两个74374层次块作为通用存放器组鉴于电路排列情况,只画出两个通用存放器GR1和GR2,如果可能的话可设计4个或8个通用存放器;众多的开关作为控制电平或打入脉冲;众多的8段代码管显示相应位置的数据信息;核心为8位ALU层次块。单总线结构的运算器示意图3、实验内容在Multisim画出电路图并仿真8BIT_ALU_BLOCK74244_BLOCK74ls273_BLOCK74374_BLOCKK8_BLOCK运算器示意图完成以下操作:(1) 说明整个电路工作原理。答:同上文实验原理。(2) 说明74LS244N的功能及其在电路中作用
10、,及输入信号G有何作用;答:74LS244为3态8位缓冲器,一般用作总线驱动器,没有锁存的功能,是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来。在电路中在部件与总线之间起开关作用,信号G为低电平有效。(3) 说明74LS273N的功能及其在电路中作用,及输入信号CLK有何作用;答:74LS273是一种带去除功能的8D触发器, 1D8D为数据输入端,1Q8Q为数据输出端,正脉冲触发,低电平去除,常用作数据锁存器,地址锁存器。在电路中作为数据锁存器,输入信号CLK上跳沿触发工作。(4) 说明74LS374N的功能及其在电路中作用,及输入信号CLK和OC有何作用;答:74LS374为具
11、有三态输出的八D边缘触发器。在电路中存放数据,CLK上跳沿触发工作,OC为低电平时连接,OC为高电平时断开。(5) K8产生任意数据存入通用存放器GR1。答:在运算器电路图中将左边的开关全置为1,右边X7的G信号也置为1,使所有模块断开。在K8层次块中通过调节开关在总线上产生数据,将与K8相连的X2的信号G置为0,使数据输出。将存放器GR1的OC端和CLK端置为0,再将CLK置为1,使总线上的数据存入通用存放器GR1。(6) K8产生任意数据存入通用存放器GR2。答:与5操作相同,将GR1的OC端和CLK端改为GR2的OC端和CLK端即可。(7) 完成GR1+GR2GR1。答:将X2的G信号置
12、为1,将X10和X6的G信号置为0,使GR1的数据存入暂存器X6,将X3的CLK端置0再置1,使数据存入锁存器X3存起来,并将X10和X6的G信号置1。用类似操作将GR2的数据存入锁存器X11存起来。再将X7的G端口置0,将S0S3置为1、0、0、1,M端置为0,CN端置为1,使X3和X11里面的数据相加存入X7。将X7的G信号置为0,使数据传入主线。将GR1的OC端置0,CLK端置0在置1,将总线上的数据传入GR1。(8) 完成GR1-GR2GR2。答:与7操作根本相同,将S0S3置为1、0、0、1,M端置为0,CN端置为1改为将S0S3置为0,1,1,0,M端和CN端也置为0。(9) 完成
13、GR1GR2GR1。答:与7操作根本相同,将S0S3置为1、0、0、1,M端置为0,CN端置为1改为将S0S3置为1,1,0,1,M端置为1。(10) 完成GR1GR2GR2。答:与7操作根本相同,将S0S3置为1、0、0、1,M端置为0,CN端置为1改为将S0S3置为0,1,1,1,M端置为1。(11) 完成GR1GR2GR1。答:与7操作根本相同,将S0S3置为1、0、0、1,M端置为0,CN端置为1改为将S0S3置为0,1,1,0,M端置为1。(12) GR1GR2。“表示逻辑非运算答:根本操作与上面相同,但只传GR1的数据。将S0S3置为1、0、0、1,M端置为0,CN端置为1改为将S
14、0S3置为0,0,0,0,M端置为1。使GR1传入X7,将X7的G信号置为0,使数据传入主线。将GR2的OC端置0,CLK端置0在置1,将总线上的数据传入GR2。(13) GR2GR1。答:与12操作根本相同,将GR1改为GR2即可。4、总结及心得体会通过本实验我学会了自定义各种层次模块,弄清楚了74LS244、74LS273、74LS374等数字元件的根本功能和使用方法。对于各种复杂的线路,能布出相对整齐地线路图,并根本弄清楚了整个电路的工作原理。本实验也锻炼了我的动手能力,让我学会了查资料,复习了计算机组成原理的知识,提高了我的知识能力。本实验的实验过程中也出现了一些问题。刚开始对各个模块
15、的功能不熟悉,G信号,OC端口和CLK端口也不会用,后面通过查资料和测试终于弄清楚了其工作原理。开始测试时各个数码管数据都乱七八糟,没有逻辑,后面发现是因为端口未关闭,总线上有多组数据导致。当S0S3为1、0、0、0时,进行算术运算结果不全为A+B,当S0S3为1、0、0、1时,进行算术运算结果为A+B,对于这个问题仍有疑问。实验四 查询式输出实验1、实验目的要求掌握查询式输出的工作原理。2、实验原理通过查询外设的状态信息决定是否输出数据。3、实验内容1运行“查询式输出装置,如图2-5所示。2读懂例如程序checkout.asm,以备测试老师询问。3编辑、调试、运行输出程序,将自己学号输出到实
16、验台右侧数据缓冲区框中。4、实验结果 1实验代码Data segmentBuffer db 1,5,0,5,0,1,0,2,0,8 port_data equ 43aH ;数据端口port_status equ 43bH ;状态端口s db Output 10 data with demand manner. Press any key to exit.,0dh,0ah,$ ;程序功能提示Data endsCode segment Assume cs:code,ds:data ;建立段存放器和段名之间关系,不具有赋值功能Go: mov ax,data Mov ds,ax ;这两句的作用就是使D
17、S的值为DATA.其中DATA为你定义的数据段,它的作用就是把数据段存放器DS的值赋为DATA,就是让数据段指向正确的位置. ;因为无法直接数据从内存移到DS,所以需要先把数据移到AX存放器,然后再移到Ds存放器。 mov dx,offset s ;显示提示,offset是取偏移地址 mov ah,9 ;调用DOS功能,显示ds:dx处地址 int 21h LEA si,buffer ;si存放器 MOV CX,10 ;将循环次数数据块长度送到CXL1: mov ah,0bh int 21h ;检测有无按键,返回AL=0FFh(有按键)或0(无按键) cmp al,0FFh ;比拟指令,得出各
18、个标志位的数据 jz Exit MOV DX,port_status IN AL,DX ;读状态端口 TEST AL,00000001B ;TEST逻辑与运算。如果AL右数第1位为1,jnz将会跳转(B表示二进制数) JNZ L1 Mov al,si ;将si所指向地址存储单元中的数据送给al MOV DX,port_data OUT DX,AL ;数据输出 INC si ;si地址加1 LOOP L1 LA: mov ah,0bh int 21h ;检测有无按键,返回AL=0FFh(有按键)或0(无按键) cmp al,0 jz LAexit: Mov ah,4ch ;结束当前正在执行的程序
19、,返回系统 Int 21hCode ends End go2实验运行结果5、总结及心得体会通过本次实验是我第一次接触汇编语言,第一次运用DOS操作台。刚开始的时候看汇编代码是完全看不懂的,然后对汇编代码一行一行的去百度查询并和同学讨论,对其中的各种指令、存放器等都一个个去查资料和讨论,慢慢对于汇编代码有了一定的了解,能看懂这个程序根本的汇编代码,也能对其进行一些满足自己要求的小修改。如out为数据输出函数。CX为计数存放器,和LOOP语句一起可以实现代码的循环,10个数的输出就是这样实现的。如JZ和JNZ的不同的判定跳转。又如ax存放器为累加器,所有的I/O指令都要使用ax与外设接口传递数据,
20、例bx、cx、dx。还有一些其它的等等。另外对于DOS操作台的编译、连接操作也能熟练的运用。本次实验虽然相对后续实验比拟简单,但却为我后面的实验打下了很好的根底,在后面的实验中我也会努力去学习更多的关于汇编语言的知识。实验五 LED显示实验1、实验目的要求掌握8255芯片的工作原理、初始化、编程应用。2、实验原理通过三个端口共24位二进制数据控制LED灯亮灭形成走马灯。3、实验内容1运行“LED显示实验台。2读懂例如程序led1.asm及led2.asm,以备测试老师询问。3编辑、调试、运行程序,让相邻两个LED顺时针学号末位奇数者或逆时针学号末位偶数者方向旋转亮起来形成走马灯。4、实验结果
21、1实验代码code segment assume cs:code,ds:datago: mov ax,data mov ds,ax mov dx,offset s ;显示提示 mov ah,9 int 21h mov dx,porta+3 mov al,80h Out dx,al ;三端口均初始化为方式0输出L0: mov si,24 mov bx,3H ;低16位初始值设为11两个灯亮 mov cl,0 ;高8位初始值设为0L1: mov ah,0bH Int 21h ;有无按键 Cmp al,0ffH Jz exit mov dx,porta ;输出24位数 mov al,bl Out d
22、x,al Inc dx mov al,bh Out dx,al Inc dx mov al,cl Out dx,al Call delay05 ;延时 SHL bx,1 ;低16位左移一位 Rcl cl,1 ;高8位左移一位 dec si jnz L1 Jmp L0 ;重新开始Exit: mov ah,4ch Int 21hdelay05 proc near ;循环延时子程序 push cx push bx mov cx,0000Hd1: mov bx,1200hd2: dec bx jnz d2 loop d1 pop bx pop cx retdelay05 endpCode ends E
23、nd go因源代码中本来就是逆时钟,循环控制处可不用改,只需将低16位置1改为11是开始有两个灯亮即可到达根本效果。2实验运行结果5、总结及心得体会通过本实验我对汇编语言有了更进一步的了解,对8255芯片的输入输出也有了一定的了解。如ax、bx、cx、dx四个存放器都是16位的,分为高8位ah、bh、ch、dh和低8位的al、bl、cl、dl,本实验就是用bx存放器的16位和cx存放器的低8位来表示24个灯,用上下电位即1和0表示亮和灭。本实验实现走马灯效果用的指令是SHL和RCL,这两个指令都用到了CF这样便将bx和cx两个不同存放器的之间的移位连接了起来,实现了24个灯的走马灯效果。本次实
24、验中第一次见到延时子程序,经过查资料和讨论也有了一定的了解,通过dec指令和jnz指令循环来控制代码的执行次数来控制时间的多少到达延时的目的。在做这个实验时我们尝试了许多不同地输出方式,如间隔,高8位和低16位单独输出,一个逆时钟,一个逆时钟,循环次数控制只亮局部灯等等。这些虽然不是实验的要求,但对我理解led灯的代码有很大的帮助,多动手实践才能更好地理解和编写代码。实验七 数码管显示实验1、实验目的要求掌握8255芯片的工作原理、初始化、编程应用。2、实验原理通过端口A和端口B的输出实现数字在数码管的显示。3、实验内容修改或自己编写程序将自己学号分三次、间隔1秒显示出来。4、实验结果 1实验
25、代码Data segmentPortA equ 404H ;8255的PA口地址 xz db 0f9h,92h,0c0h,92h,0c0h,0f9h,0c0h,0a4h,0c0h,80h s db Display a b c d at the same time. Press any key to exit.,0dh,0ah,$ ;程序功能提示Data endsCode segment assume cs:code,ds:dataStart:mov ax,data mov ds,ax mov dx,offset s ;显示提示 mov ah,9 int 21h mov dx, PortA+3
26、mov al,80H out dx,al ;PA、PB口初始化为根本输出方式 L0:lea si,xz L2:mov ah,08h ;置位选初值,从左边开始显示 L1:push ax mov al,si ;显示数字 mov dx,PortA out dx,al mov al,ah mov dx,PortA+1 out dx,al call de ;延时 mov ah,0bh int 21h ;检测有无按键,返回AL=0FFh(有按键)或0(无按键) cmp al,0FFh jz Exit inc si ;准备显示下一数字 pop ax shr ah,1 ;选择下一数码管 cmp si,0ah
27、;判断是否显示完10个学号 jnz l3 jmp l0 L3: cmp ah,0 ;判断是否显示完4位,数码管走完一轮 jnz l1 jmp l2 Exit:mov ah,4ch ;结束程序 int 21h de proc near ;循环延时子程序 push cx push mov cx,0000H d1: mov bx,9000h d2: dec bx jnz d2 loop d1 pop bx pop cx ret de endpCode endsend Start上面那个技巧性高些,但全部显示不好弄 下面这个应该是无技术白痴版本,但显示好弄Data segmentPortA equ 4
28、04H ; 8255的PA口地址 xz db 0f9h,92h,0c0h,92h,0ffh,0ffh,0ffh,0ffh,0c0h,0f9h,0c0h,0a4h,0ffh,0ffh,0ffh,0ffh,0c0h,80h,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;定义09的显示代码s db Display 09 . Press any key to exit .,0dh,0ah,$ ;程序功能提示Data endsCode segment assume cs:code,ds:dataStart:mov ax,data mov ds,ax mov dx,offset s ;显示
29、提示 mov ah,9 int 21h mov dx, PortA+3 mov al,80H out dx,al ;PA、PB口初始化为根本输出方式 L0:lea si,xz mov ah,08h L1:push ax mov al,si ;显示数字 ;mov ah,8h ;置位选初值,四个数码管同时显示 mov dx,PortA out dx,al mov al,ah mov dx,PortA+1 out dx,al call de ;延时 mov ah,0bh int 21h ; 检测有无按键,返回AL=0FFh(有按键)或0(无按键) cmp al,0FFh jz Exit inc si
30、 ;准备显示下一数字 pop ax ror ah,1 cmp si,18h ;判断是否显示完 jnz l1 jmp l0 Exit:mov ah,4ch ; 结束程序 int 21h de proc near ; 循环延时子程序 push cx push bx mov cx,3000H d1: mov bx,0 d2: dec bx jnz d2 loop d1 pop bx pop cx ret de endpCode ends end Start 2实验运行结果 5、总结及心得体会通过本次实验我对汇编语言的理解更加深入,基于前几次实验的根底,本次实验看懂不是非常困难,但自己单独修改代码做到
31、数码管单独显示仍不简单。自己探索学会了一些根本的循环、跳转和判断指令的运用,与同学积极讨论,再借助smg3文件里的一些代码做参考将程序修改成功。本次实验在两个跳转处经常会发生矛盾,将其中一个判断跳转写为L3: cmp ah,0 ;判断是否显示完4位,数码管走完一轮 jnz l1 jmp l2作为另一个的跳转条件才终于将其解决,使程序无错误。只有去尝试并犯错再改正错误才能使自己取得最大的进步和最牢固的记忆。 实验六 小键盘实验1、实验目的要求掌握8255芯片的工作原理、初始化、编程应用。2、实验原理通过端口A的输出和端口B的输入实现按键的判断。3、实验内容1运行“LED显示实验台。2读懂例如程序
32、key.asm,以备测试老师询问。3借助实验原理图,说明判断某键被按下的方法。4解释程序怎样将按键操作转换为DOS命令窗口显示字符的?5为什么会将一个字符显示数百次?6能否每次按键只显示一次?说出设想,不一定编程实现 答:3当键被按下时,某个A端口和B端口就连接起来,用cx和bx两个循环来一行一行在电路上找到这个按键。4通过disp子程序用xlat指令在table里找按键所代表的到偏移的地址,输出地址里的值,显示在DOS操作台上。5因为按键按下去会有一定的持续时间,而cpu读代码的速度非常快,在这段持续时间内cpu对这段代码运行许屡次,所以一个字符显示数百次。6可以,在代码读按键后加一个延时子
33、程序,让按键在延时时间内断开,使cpu只读一次代码,即可只显示一次字符。4、实验结果1实验代码Data segmentPortA equ 408H ; 8255的PA口地址table db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46hs db Watch and test the keyboard on experiment platform. Press any key to end.,0dh,0ah,$ ;程序功能提示Data endsCode segment assume cs:code,ds:dataSt
34、art:mov ax,data mov ds,ax mov dx,offset s ;显示提示 mov ah,9 int 21h mov dx, PortA+3 mov al,82H ; PA输出 PB输入 out dx,al ; l0:mov si,0 mov al,0feh ; mov bx,04h l1:mov dx,PortA out dx,al push ax mov dx,portA+1 in al,dx Call delay05 mov cx,04h mov di,0 l2:shr al,1 jc l3 call disp l3:inc di loop l2 pop ax rol
35、 al,1 inc si dec bx jnz l1 mov ah,0bh int 21h ; 检测有无按键,返回AL=0FFh(有按键)或0(无按键) cmp al,0FFh jnz l0 mov ah,4ch int 21hdisp proc near push bx push si push di push ax push dx lea bx,table add si,si add si,si add di,si mov ax,di xlat mov dl,al mov ah,02h int 21h pop dx pop ax pop di pop si pop bx retdisp e
36、ndpdelay05 proc near ; 循环延时子程序 push cx push bx mov cx,0000Hd1: mov bx,0650hd2: dec bx jnz d2 loop d1 pop bx pop cx retdelay05 endpCode ends end Start2实验运行结果5、总结及心得体会 通过本次实验,我对汇编语言的理解进一步加深,对计算机硬件如cpu与汇编语言的联系关系也有了一定的了解。本次实验开始因为未关注电路图而单纯只看代码感觉很困难,后面结合电路图并在纸上写每步的运行结果,才终于弄清楚按键的查找方式,怎么将按键所代表的数字输入到DOS操作台上等程序的运行方式。了解了一些新的汇编指令,如xlat使al得到表中的值,rol,shr等各种位移指令的用法等。也了解了要学会将代码和电路图结合起来看问题,有相辅相成的作用,能让自己更好的理解程序,理解电路。也了解了问题不一定全在程序,计算机的硬件运行也会对实验结果有影响如本实验的延时问题。