您的当前位置:首页计算机组成原理实验报告-西北农林科技大学

计算机组成原理实验报告-西北农林科技大学

2022-11-13 来源:爱问旅游网


西北农林科技大学

信息工程学院

计算机组成原理实习报告

班级 信息管理与信息系统 年级 11级2班 姓名 刘 佳 学号 2011013316

实验一 基础汇编语言程序设计

实验目的

1.学习和了解TEC-XP教学实验系统监控命令的用法; 2.学习和了解TEC-XP教学实验系统的指令系统; 3.学习简单的TEC-XP教学实验系统汇编程序设计。

实验内容

1.学习联机使用TEC-XP教学实验系统和仿真终端软件PCEC。

2.使用监控程序R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容;

3.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。

实验步骤

1.用R命令查看寄存器内容或修改寄存器的内容 1)在命令行提示符状态下输入:

R↙ ;显示寄存器的内容

注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙ ;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格,也可有—个或数个空格 主机显示: 寄存器原值:_

在后面输入新的值0036

再用R命令显示寄存器内容,则R0的内容变为0036。

2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙

会显示从2000H地址开始的连续128个字的内容;

连续使用不带参数的D命令,起始地址会自动加128(即80H)。

3.用E命令修改存储器内容 在命令行提示符状态下输入: E 2000↙ 屏幕显示:

2000 地址单元的原有内容:光标在此闪烁等待输入 输入0000

依次改变地址单元2001~2005的内容为:1111 2222 3333 4444 5555

注意:用E命令连续修改内存单元的值时,每修改完—个,按一下空格键,系统会自动给出下一个内存单元的值,等待修改;按回车键则退出E命令。

4.用D命令显示这几个单元的内容 D 2000↙

可以看到这六个地址单元的内容变为0000 1111 2222 3333 4444 5555。

5.用A命令键入一段汇编源程序,主要是向累加器送入数据和进行运算,执行程序并观察运行结果。

1)在命令行提示符状态下输入:

A 2000↙ ;表示该程序从2000H(内存RAM区的起始地址)地址开始 屏幕将显示: 2000:

输入如下形式的程序:

2000:MVRD R0,AAAA ;MVRD与R0之间只有一个空格,其他指令相同 2002:MVRD R1,5555 2004:ADD R0,R1 2005:AND R0,R1

2006:RET ;程序的最后一个语句,必须为RET指令

2007:↙ (直接敲回车键,结束A命令输入程序的操作过程)

若输入有误,系统会给出提示并显示出错地址,用户只需在该地址重新输入正确的指令即可。

2)用U命令反汇编刚输入的程序

在命令行提示符状态下输入: U 2000↙

在相应的地址会得到输入的指令及其操作码。

注:连续使用不带参数的U命令时,将接着从上一次反汇编的最后一条语句之后继续反汇编。

3)用G命令运行前面刚键入的源程序 G 2000↙

程序运行结束后,观察程序的运行结果,屏幕显示各寄存器的值,其中R0和R1的值均为5555H,说明程序运行正确。

4)用P或T命令,单步执行这段程序,观察指令执行结果

在命令行提示符状态下输入: T 2000↙ T↙ T↙ T↙

用P命令执行过程同上。

注:T总是执行单条指令,但执行P命令时,则把每一个CALL语句连同被调用的子程序一次执行完成。T、P命令每次执行后均显示所有通用寄存器及状态寄存器的内容,并反汇编出下一条将要执行的指令。

6.举例编写汇编程序,用“A”命令输入,运行并观察结果

1)例1:设计一个小程序,从键盘上接收一个字符并在屏幕上输出显示该字符。

<1>在命令行提示符状态下输入:

A 2000↙ 屏幕将显示: 2000:

输入如下形式的程序: 2000:IN 81 2001:SHR R0 2002:SHR R0

2003:JRNC 2000 2004:IN 80 2005:OUT 80 2006:RET 2007:↙

为81H。

;判断键盘上是否按了一个键

;即串行口是否有了输入的字符 ;未输入完则循环测试 ;接收该字符

;在屏幕上输出该字符

;每个用户程序都必须用RET指令结束 ;(按回车键即结束输入过程)

注:在十六位机中,基本I/0接口的地址是确定的,数据口的地址为80H,状态口的地址

<2>用“G”命令运行程序

在命令行提示符状态下输入: G 2000↙

执行上面输入的程序。

光标闪烁等待输入,用户从键盘键入字符后,屏幕会显示该字符。

该例建立了一个从主存2000H地址开始的小程序。在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符H。每个用户程序的最后一个语句一定为RET汇编语句。因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。

2)例2:设计一个小程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。

<1>在命令行提示符状态下输入:

A 2020↙ 屏幕将显示: 2020:

从地址2020H开始输入下列程序:

2020:MVRD R2,000A ;送入输出字符个数 2022:MVRD R0,0030 ;“0”字符的ASCII码送寄存器R0 2024:OUT 80 ;输出保存在R0低位字节的字符 2025:DEC R2 ;输出字符个数减1

2026:JRZ 202E ;判10个字符输出完否,已完,则转到程序结束处 2027:PUSH R0 ;未完,保存R0的值到堆栈中 2028:IN 81 ;查询接口状态,判字符串行输出完成否, 2029:SHR R0 ; 202A:JRNC 2028 ;未完成,则循环等待

202B:POP R0 ;已完成,准备输出下一字符并从堆栈恢复R0的值 202C:INC R0 ;得到下一个要输出的字符 202D:JR 2024 ;转去输出字符 202E:RET 202F:↙

该程序的执行码放在2020H起始的连续内存区中。若送入源码的过程中有错,系统会进行提示,等待重新输入正确的汇编语句。输入过程中,在应输入语句的位置直接打回车则结束输入过程。

<2>用“G”命令运行程序

在命令行提示符状态下输入: G 2020↙

记录执行结果: 0123456789

思考题:当把IN 81,SHR R0,JNC 2028三条语句换成3个MVRR R0,R0语句,该程序执行过程会出现什么现象?试分析并实际执行一次。

有声响

类似的,若要求在终端屏幕上输出‘A’到‘Z’共26个英文字母,应如何修改例2中给出的程序?请验证之。将程序写入实验报告。

例3:从键盘上连续打入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束输入过程。

<1>在命令行提示符状态下输入:

A 2040↙ 屏幕将显示: 2040:

从地址2040H开始输入下列程序:

(2040)MVRD R2,0030 ;用于判数字符的下界值,‘0’的ASCII码

MVRD R3,0039 ;用于判数字符的上界值,‘9’的ASCII码

(2044)IN 81 ;判键盘上是否按了一个键

SHR R0 ;即串行口是否有了输入的字符 SHR R0

JRNC 2044 ;没有输入则循环测试 IN 80 ;输入字符到R0的低字节 MVRD R1,00FF AND R0,R1 ; R0的高位字节内容清零(R0的高字节可能原

来的值不为零)

CMP R0,R2 ;判输入字符≥字符‘0’否,R0-R2,置状态位C JRNC 2053 ;若为否,则转到程序结束处,C=0,跳转 CMP R3,R0 ;判输入字符≤字符‘9’否 JRNC 2053 ;若为否,则转到程序结束处 OUT 80 ;输出刚输入的数字符

JMPA 2044 ;转去程序前边2044处等待输入下一个字符,无条件

跳到2044

(2053)RET

<2>在命令行提示符状态下输入:

G 2040↙

光标闪烁等待键盘输入,若输入0~9十个数字符,则在屏幕上回显;若输入非数字符,则屏幕不再显示该字符,出现命令提示符,等待新命令。

【思考题】设计程序从2000H开始,依次存放‘0’~‘9’,‘a’~‘z’和‘A’~‘Z’。 代码编写:

执行程序: 反汇编:

运行程序:

查看结果:

实验总结

这次实习比较简单,主要是熟悉E,D等各种指令,此外思考题的部分要自己设计,不过好像都不会设计呀,后来,老师讲解后,自己从新设计编写。我起初设计的时候存放‘a’~‘z’计数的寄存器是R26,怎么都不对,但自己又确信自己的逻辑没有错误,直到后来老师说R26是不存在的,只有‘R0’~‘R25’于是改成了R10通用寄存器,这才能够顺利将‘0’~‘9’,‘a’~‘z’和‘A’~‘Z’存入。

实验二 存储器实验

实验目的

通过看懂教学计算机中已经使用的几个存储器芯片的逻辑连接关系和用于完成存储器容量扩展的几个存储器芯片的布线安排,在教学计算机上设计、实现并调试出存储器容量扩展的实验内容。其最终要达到的目的是:

1.深入理解计算机内存储器的功能、组成知识;

2.深入地学懂静态存储器芯片的读写原理和用他们组成教学计算机存储器系统的方法(即字、位扩展技术),控制其运行的方式;

思考并对比静态存储器芯片和动态存储器芯片在特性与使用场合等方面的异同。

实验内容

1.要完成存储器容量扩展的教学实验,需为扩展存储器选择一个地址,即将扩展存储器的片 选(标有/CS的2个插孔的上面一个)与标有MEM/CS的插孔中的一个相连;

2.用监控程序的D、E命令对存储器进行读写,比较RAM(6116)、EEPROM(28系列芯片) EPROM(27系列芯片)在读写上的异同;

3.用监控程序的A命令编写一段程序,对RAM(6116)进行读写,用D命令查看结果是否正确;

4.用监控程序的A命令编写一段程序,对扩展存储器EEPROM(28系列芯片)进行读写,用D命令查看结果是否正确;如不正确,分析原因,改写程序,重新运行。

实验步骤

1.AT28C64B的读操作和一般的RAM一样,而其写操作,需要一定的时间,大约为1毫秒。因此,需要编写一延迟子程序,在对EEPROM进行写操作时,调用该子程序,以完成正确的读写。

1)用E命令改变内存单元的值并用D命令观察结果。

<1>在命令行提示符状态下输入:

E 5000↙

屏幕将显示: 5000 内存单元原值: 按如下形式键入:

5000 原值:2424(空格)原值:3636(空格)原值:4848(空格)原值:5050↙

<2>在命令行提示符状态下输入:

D 5000↙

屏幕将显示从5000H~507F内存单元的值,从5000开始的连续四个内存单元的值依次为2424 3636 4848 5050

<3>断电后重新启动,用D命令观察内存单元5000~5003的值,会发现这几个内

存单元的值没有发生改变,说明EEPROM的内容断电后可保存。

2)AT28C64B存储器不能直接用A命令输入程序,单字节的指令可能会写进去,双字节指令的低位会出错(建议试一试),可将编写好的程序用编程器写入片内;也可将程序放到RAM(6116)中,调用延时子程序,访问AT28C64B中的内存地址。

下面给出的程序,在5000H~500FH单元中依次写入数据0000H、

0001H、...000FH。

<1>从2000H单元开始输入主程序: (2000)MVRD R0,0000

MVRD R2,0010 ;R2记录循环次数 MVRD R3,5000 ;R3的内容为16位内存地址

(2006)STRR [R3],R0 ;将R0寄存器的内容放到R3给出的内存单元中

CALA 2200 ;调用延时子程序 INC R0 ;R0加1 1NC R3 ;R3加1 DEC R2 ;R2减l JRNZ 2006 ;R2不为0跳转到2006H RET

<2>从2200H单元开始输入延时子程序: (2200)PUSH R3

MVRD R3,000F

(2203)DEC R3

JRNZ 2203 POP R3 RET

运行主程序,在命令提示符下输入:G 2000↙

程序执行结束后,在命令提示符下输入:D 5000↙ 可看到从5000H开始的内存单元的值变为

5000:0000 0001 0002 0003 0004 0005 0006 0007 5008:0008 0009 000A 000B 000C 000D 000E 000F。

思考:(1)为何能用E命令直接写AT28C64B的存储单元,而A命令则有时不正确。 (2)修改延时子程序,将其延时改短,可将延时子程序中R3的内容赋成00FF或0FFF等,再看运行结果。 以R3=00FF时为例:

分析:由上述结果可以知道从5000H开始的内存值被程序修改,同时运行时可以看到程序有延迟,这是由于地址为2200开始的子程序代码决定的,当将子程序中R3的内容修改为00FF后运行结果仍正确,但延迟时间有变化。

实验总结:

这次实验主要是通过指令和简单汇编程序修改存储器相应内存单元的内存并了解不同类型存储器的信息保存能力特性。

其中信息保存特性实验中可以看出:

RAM中的内容在断电后会消失, EPROM中的数据在断电重启后却任然保持,而AT28C64B的读操作和RAM一样,而其写操作需要一定的时间。最后一个实验中修改R3的值后,会发现延迟时间有所改变。

通过这次实验了解了如何通过指令和程序操作存储器,并了解了不同存储器的不同。我想,这是这次实验最大的收获。

实验三 脱机运算器实验

实验目的

深入了解AM2901运算器的功能与具体用法,4片AM2901的级连方式,深化运算器部件的组成、设计、控制与使用等诸项知识。

实验内容

1.将教学机左下方的5个拨动开关置为1XX00(单步、16位、脱机);先按一下“RESET”按键,再按一下“START”按键,进行初始化。

2.接下来,按下页表格所列的操作在十六位机上进行运算器脱机实验,将结果填入表中。其中D1取为0101H(H表示十六进制),D2取为1010H。通过两个12位的红色微型开关向运算器提供控制信号,通过16位数据开关向运算器提供数据,通过指示灯观察运算结果及状态标志。

实验步骤

1.将教学机左下方的5个拨动开关置为1XX00(单步、16位、脱机);先按一下“RESET”按键,先按一下“START”按键,进行初始化。

2.接下来,按下表所列的操作在机器上进行运算器脱机实验,将结果填入表中;其中D1取为0101H,D2取为1010H;通过两个12位的红色微型开关向运算器提供控制信号,通过16位数据开关向运算器提供数据,通过指示灯观察运算结果及状态标志。

运算 *D1+0->R0 *D2+0->R1 R0+R1->R0 R0-R1->R0 R1-R0->R1 R0∨R1->R0 R0∧R1->RO R0≯R1->R0 R0≯R1->R0 2*R0->R0 R0/2->R0 I8-I0 011000111 011000111 011000001 011001001 011001001 011011001 011100001 011110001 011111001 111000011 101000011 SST SSH SCi 001 001 001 001 001 001 001 001 001 001 001 00 00 00 00 00 00 00 00 00 00 00 00 00 0,0 01 01 00 00 00 00 00 00 B 0000 0001 0000 0000 0001 0000 0000 0000 0000 0000 0000 A 不用 不用 0001 0001 0000 0001 0001 0001 0001 不用 不用 压START前 ALU输出 CZVS 0101H 0000 1010H 0000 1111H 0000 0101H 1000 0F0FH 1000 0F0FH 1010 0101H 1010 0E0EH 1000 FEFEH 1001 FEFEH 0001 FDFCH 0001 压START后 ALU输出 CZVS 0101H 0000 1010H 0000 2121H 0000 F0F1H 0001 0E0EH 1000 OFOFH 1010 0101H 1010 0101H 1000 0E0EH 0000 FDFCH 0001 7EFEH 0000

思考题:

指令1:MVRD R15 , ABCD 指令2:MVRD R11,FEDC 指令3:ADD R15,R11 指令4:AND R1 , R15

运算 指令1 指令2 指令3 指令4 I8-I0 011000111 011000111 011000001 011100001 SST SSH SCi 001 001 001 001 00 00 00 00 00 00 0,0 00 B 1111 1011 1111 0001 A 不用 不用 1011 1111 压START前 ALU输出 CZVS ABCDH 0001 FEDCH 0001 AAA9H 1001 0606H 1010 压START后 ALU输出 CZVS ABCDH 0001 FEDCH 0001 5676H 1010 0606H 1010 实验总结

通过这次试验我深入了解AM2901运算器的功能与具体用法,4片AM2901的级连方式,

深化运算器部件的组成、设计、控制与使用等诸项知识。

这次实验主要是观察性的实验,通过指示灯观察运行结果和标志状态。操作很简单,记录也很方便。实验很快就做完了,但在理解上还需要更多的学习。

通过这次实习,我了解了汇编指令的格式,各字段的编码含义,以及如何通过这些编码来控制数据运行,转移。了解到了数据在ALU中参与运算时的具体情况。这次实习的收获很大。

实验四 微程序控制器实验

实验目的

通过运行教学计算机中已经设计好并正常执行的数条基本指令(例如,ADD、MVRR、OUT、MVRD、JR、RET等指令)的功能、格式和执行流程,最终要达到的目的是:

1.深入理解计算机微程序控制器的功能、组成知识; 2.深入地学习计算机各类典型指令的执行流程;

3.对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念; 4.学习微程序控制器的设计过程和相关技术。

实验内容

1.完成控制器部件的教学实验,主要内容是由学生自己设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。

2.首先看懂TEC-XP教学计算机的功能部件组成和线路逻辑关系,然后分析教学计算机中已经设计好并正常运行的几条典型指令(例如,ADD、MVRR、OUT、MVRD、JRC、CALA、RET等指令)的功能、格式和执行流程,注意各操作功能所对应的控制信号的作用。

3.设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。例如ADC、JRS、JRNS、LDRA、STAR、CALR等指令,可以从给出的19条指令中任意选择,当然也可以设计与实现其它指令,包括原来已实现的基本指令(要变换为另外一个指令操作码)或自己确定的指令。

实验步骤

1.接通教学机电源;

2.将教学机左下方的5个拨动开关置为11001(单步、手动置指令、微程序、16位、联机);

3.按一下“RESET”按键;

4.通过16位的数据开关SWH、SWL置入指令操作码;

5.在单步方式下,通过指示灯观察并记录各类基本指令的微码。 1)选择基本指令的A组指令中的ADD指令,观察其节拍流程

2)选择基本指令的B组指令中的MVRD指令,观察其节拍流程

6. 在连续方式下,用A命令键入程序并运行

(程序将R0赋值 0036H,结果如图,寄存器R0的值已被修改。)

7.MPROM芯片扩展: 扩展MAPROM和CMH:

扩展CML:

10.用A、E键入程序连续运行(扩展指令用E命令键入) 1)测试ADC指令:

(程序将R0赋值0101,R1赋值1010,然后用E命令键入利用已经编写好的ADC指令其中6D00和2001的得出是从扩展指令的指令格式表中查表得出的。00100000 DRSR 即2001,功能是DRDR+SR+C.所以是将R0,R1中的值相加再加1最后放到R0中,而R1中的值不变。于是的到如上结果。)

2)测试CALR指令:

<1>将被显示的6个字符‘A’~‘F’送入到内存20F0H开始的存储区域中:

<2>在命令提示符状态下输入并进行反汇编和运行:

<3>用D命令查看结果:

(实现调用子程序的过程,输出A~Z。)

3)测试指令LDRA:

(先将内存单元2100的内容赋给R0,输出R0,然后判断是否输出万,未完则循环测试,然后通过LDRA指令将内存单元2101的值赋给R0,然后在输出R0.这里同样,扩展指令无法通过A指令输入,必须用E指令键入,而且同样修改的值为其指令格式的编码。同样在扩展指令格式表中可以查表的到。)

思考题:在内存中依次读出‘0’~‘9’,并把数值相加,将其结果存入5100H的内存单元。

实验总结:

这次实验主要是学习到了如何通过E指令写入扩展指令。然后通过器汇编指令格式编码调用,同时发现其实写入指令的时候可以高位和低位同时写入的。

这次实习费时很久,总是运行结果不正确,后来老师提醒,电平开关应该是00010才对,而在用E命令键入值时,完成后一定要用U命令查看,以确保内存中值的正确性,为程序正

常运行提供保障。还有一点就是,用A命令键入程序后,反汇编是必不可少的步骤。总之实验还是需要仔细认真和多次的尝试。

因篇幅问题不能全部显示,请点此查看更多更全内容