计算机组成原理与汇编实验报告.docx
《计算机组成原理与汇编实验报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理与汇编实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
计算机组成原理与汇编实验报告
计算机组成原理与汇编实验报告
姓名:
学号:
学院:
信息科学与工程学院
班级:
实验1存储器实验
Ø实验目的
⏹掌握静态存储随机存储器RAM的工作特性
⏹掌握静态存储随机存储器RAM的读写方法
Ø实验设备
74LS273(一片),静态存储器MEMORY6116(一片),与门(一片),与非门(一片),单脉冲(一片),开关若干,灯泡若干
Ø实验原理
在微机系统中,常用的静态RAM有6116、6264、62256等。
在本实验中使用的是6116。
6116为2K╳8位的静态RAM,其逻辑图3.1如下:
图3.16116逻辑图
其中A0~10为11根地址线,I/O0~7为8根数据线,CS为片选端,OE为数据输出选通端,WR为写信号端。
其工作方式见下表3-1:
表3-1工作方式表
控制信号
CS
OE
WR
数据线
读
L
L
H
输入
写
L
X
L
输出
非选
H
X
X
高阻态
实验所用的半导体静态存储器电路原理如图3.2所示,实验中的静态存储器一片6116(2K×8)构成,其数据线接至数据总线,地址线由地址锁存器(74LS273)给出。
地址灯AD0—AD7与地址线相连,显示地址线内容。
数据开关经一三态门(74LS245)连至数据总线,分时给出地址和数据。
图3.2存储器实验原理图
因地址寄存器为8位,接入6116的地址A7—A0,而高三位A8—A10接地,所以其实际容量为256字节。
6116有三个控制线:
CE(片选线)、OE(读线)、WE(写线)。
当片选有效(CE=0)时,OE=0时进行读操作,WE=0时进行写操作。
本实验中将OE常接地,在此情况下,当CE=0、WE=0时进行读操作,CE=0、WE=1时进行写操作,其写时间与T3脉冲宽度一致。
控制信号SW-B为低电平有效,控制信号LDAR为高电平有效。
Ø实验步骤
1.选择实验设备:
根据实验原理图,将所需要的组件从组件列表中拖到实验设计流程栏中。
搭建实验流程:
将已选择的组件进行连线(鼠标从一个引脚的端点拖动到另一组件的引脚端,即完成连线)。
搭建好的实验流程图如图3.3所示
图3.3存储器实验流程图
2.初始化各芯片的控制信号,仔细检查无误后点击【电源开/关】按钮接通电源。
3.写存储器。
给存储器的00、01、02、03、04地址单元中分别写入数据11H、12H、
13H、14H、15H。
由图3.2存储器实验原理图看出,由于数据和地址全由一个数据开关给出,因此要分
时地给出。
下面的写存储器要分两个步骤,第一步写地址,先关掉存储器的片选(CE=1),
打开地址锁存器门控信号(LDAR=1),打开数据开关三态门(SW-B=0),由开关给出要写入的存储单元的地址,双击单脉冲产生T3脉冲将地址输入到地址锁存器;第二步写数据,关掉地址锁存器门控信号(LDAR=0),打开存储器片选,使之处于写状态(CE=0,WE=1),由开关给出此单元要写入的数据,,双击单脉冲产生T3脉冲将数据写入到当前的地址单元中。
写其他单元依次循环上述步骤。
写存储器流程如图3.4所示(以向00号单元写入11H为例)。
图3.4写存储器流程图
4.读存储器。
依次读出第00、01、02、03、04号单元中的内容,观察上述各单元中的内容是否与前
面写入的一致。
同写操作类似,读每个单元也需要两步,第一步写地址,先关掉存储器的片
选(CE=1),打开地址锁存器门控信号(LDAR=1),打开数据开关三态门(SW-B=0),由开关给出要写存储单元的地址,双击单脉冲产生T3脉冲将地址输入到地址锁存器;第二步读存储器,关掉地址锁存器门控信号(LDAR=0),关掉数据开关三态门(SW-B=1),片选存储器,使它处于读状态(CE=0,WE=0),此时数据总线上显示的数据即为从存储器当前地址中读出的数据内容。
读其他单元依次循环上述步骤。
读存储器操作流程如图3.5所示(以从00号单元读出11H数据为例)
图3.5读存储器流程图
Ø思考与分析
1.由两片6116(2K*8)怎样扩展成(2K*16)或(4K*8)的存储器?
怎样连线?
观察思考
1.按图4.4-5连接实验线路,向存储器中指定的地址单元输入数据,地址先输入AR寄存器,在地址灯上显示;再将数据送入总线后,存到指定的存储单元,数据在数据显示灯和数码显示管显示。
从存储器中指定的地址单元读出数据,地址先输入AR寄存器,在地址灯显示;读出的数据送入总线,通过数据显示灯和数码显示管显示。
(1)将时序电路模块中的Φ和H23排针相连。
将时序电路模块中的二进制开关“STOP”设置为“RUN”状态、将“STEP”设置为“STEP”状态。
(2)准备排线13条:
8芯4条,2芯9条。
按图4.4-5连接实验线路,仔细查线无误后接通电源。
图4.4-5存储器实验接线图
(3)向存储器指定的地址送入数据,如:
向00单元中输入11,步骤如图4.4-6:
图4.4-6向地址寄存器AR中输入地址00的流程图
操作步骤:
SW-B=1
从输入开关输入:
00000000
打开输入三态门:
SW-B=0
将地址打入地址锁存器中:
LDAR=1
按START发T3脉冲
观察并记录地址灯的变化:
地址灯由11010011→11111111
(4)输入要存放的数据“11”,步骤如图4.4-7:
图4.4-7输入要存放的数据“11”的流程图
操作步骤:
SW-B=1
从输入开关输入:
00010001
打开输入三态门:
SW-B=0
关闭地址寄存器:
LDAR=0
将数据写入存储单元:
CE=0
WE=1
按START发T3脉冲
输入数据在数码管上显示:
LED-B=0
发W/R脉冲
观察并记录数据显示灯和数码显示管的变化:
数据显示灯变为00010001
数码管显示11
(5)按照“(3)、(4)”的步骤继续向“00”下面的4个地址中输入下述数据:
地址
数据
备注
00
11
已输入
01
12
已输入
02
13
已输入
03
14
已输入
04
15
已输入
数据显示灯变为00010010
数码管显示12
数据显示灯变为00010011
数码管显示13
数据显示灯变为00010100
数码管显示14
数据显示灯变为00010101
数码管显示15
(6)从存储器指定的地址中读出数据。
步骤如图4.4-8:
图4.4-8从00中读出数据的流程图
操作步骤:
SW-B=1
禁止存储器读写:
CE=1
从输入开关输入:
00000000
打开输入三态门:
SW-B=0
将地址打入地址锁存器中:
LDAR=1
按START发T3脉冲
关闭输入三态门:
SW-B=1
关闭地址寄存器:
LDAR=0
从存储器中读出数据:
CE=0
WE=0
数据在数码显示管显示:
LED-B=0
发W/R脉冲
同样从其它4个地址:
01,02,03,04中读出数据,观察地址显示灯、数据显示灯和数码显示管的变化,并检查是否和输入的数据一致。
地址显示灯11111111在T3脉冲变为00000000
数据显示灯0000000在SW-B=1后变为11111111
数码显示管发W/R脉冲之后变为FF
2.在进行存储器操作(写/读)是不是必须先往地址寄存器(AR)存入所访问的存储器单元地址?
答:
是,从存储器中指定的地址单元读出数据,地址先输入AR寄存器才能进行读写操作。
3.T3在本实验中起了哪些作用,如何区分它们?
答:
T3可以进行手动发脉冲。
根据在此之前所进行的操作进行区分。
4.在进行存储器读写操作时,CE和WE信号有没有先后顺序?
为什么?
答:
有,应先对CE进行操作,再对WE进行操作。
因为CE禁止存储器读写,只有将CE=0时WE=0时才能从存储器中读出数据。
六、试验心得
本次实验中,首先连接线路时应该着重注意接线端口的对应,避免出现排线方向错误对实验结果的影响,同时要仔细对照输入的0或1。
通过此次实验我们对存储器有一个重新整体的认识,同时也是自己在课堂上的知识得使实践和理解,为以后更深的学习打下基础。
实验二(汇编语言):
从键盘接受用户所输入的不超过20个的0~99的数,在用户完成输入后对用户所输入的数据进行排序并输出。
要求定义子程序。
实验要求:
1)在虚拟实验平台中选择元器件并搭建存储实验
2)完成汇编语言程序设计、编写、调试、运行。
3)撰写实验报告
实验报告模板:
1)实验目的
完成从键盘接受用户所输入的不超过20个的0~99的数,在用户完成输入后对用户所输入的数据进行排序并输出。
并定义子程序。
2)实验平台简介
模块层次图
int_char
dec_div
main
char_int
crlf
input
bubblesort
output
3)实验原理、步骤及分析
本次实验值输入10个数作为测试
系统结构图
(1)主程序流程图
Y
N
(2)冒泡排序子程序流程图
bubblesort
将10放到cx中
deccx
将(cx)放到di中
初始化si等于0
buf[si]大于buf[si+2]吗?
将buf[si]和buf[si+2]内容交换,
si+2
cx-1
(di)存入cx
返回
cx=0?
deccx,cx=0?
3.功能模块设计说明
(1)main模块
输入:
从键盘输入十个有符号十进制整数
输出:
在屏幕上显示排好序的十个十进制整数
功能:
通过对input,bubblesort,output三个模块的调用实现将屏幕上输入的10个十进制有符号整数进行冒泡排序,然后将排好序的10个十进制有符号整数显示在屏幕上。
(2)input模块
输入:
从键盘上输入十个有符号十进制整数。
各个整数之间用逗号隔开,最后以‘回车’符结束。
输出:
把这十个有符号十进制整数存入buf数组里面。
功能:
屏幕上首先显示一行提示信息:
“Pleaseinputtendecimalintegersandusethecommaasseparation:
”。
意思就是要求用户输入10个十进制有符号整数,并且用逗号作为分隔符。
用户开始输入,如果用户输入了除数字、逗号、以及负号以外的符号,屏幕上将显示:
“error!
”。
然后自动退出程序,不继续执行。
如果用户没有输满10个数,其余数将为0代替。
输完后按回车键表示输入完毕。
(3)bubblesort模块
输入:
从buf数组里面取数。
输出:
将排好序的数存到buf数组里。
功能:
利用冒泡排序法对输入的数进行排序。
冒泡排序法的基本思想就是让相邻的两个数进行比较,如果前面的比后面的大,就将两个数调换次序,如果小,就不调换,这样每一次参加排序的数中最大的数就到了最后面,通过n-1次排序就可以完成对所有的数的排序。
(4)output模块
输入:
从buf数组里面取出排好序的数。
输出:
把排好序的数在屏幕上显示出来,各整数之间用逗号隔开。
功能:
屏幕上首先显示一行提示信息:
“Theresultis:
”。
然后换一行显示排序好的数。
(5)char_int模块
输入:
从键盘取得一个有符号十进制整数。
输出:
把该数转化为二进制数并存入bx寄存器。
功能:
把从键盘取得的一个十进制数转换为二进制数,并将该数存入bx寄存器中。
(6)int_char模块
输入:
从bx寄存器取出一个二进制数。
输出:
在屏幕上显示一个有符号十进制整数。
功能:
把bx寄存器中的一个二进制数通过模块dec_div转换为十进制数,并在屏幕上显示出来。
(7)dec_div模块
输入:
从bx寄存器中取得需转换为十进制的数。
输出:
在屏幕上显示一位十进制数。
功能:
把bx寄存器中的二进制数除以相应的十的幂,并在屏幕上显示一位商。
余数保存在bx寄存器中。
(8)crlf模块
输出:
向系统发出回车、换行符。
功能:
起到回车、换行的作用。
4)实验代码
datareasegment
bufdw100dup(?
)
count=10
flagdb0
mess1db'Pleaseinputtendecimalintegersandusethecommaasseparation:
$'
mess2db'error!
$'
mess3db'Theresultis:
$'
datareaends
;----------------------------------------
prognamsegment
assumecs:
prognam,ds:
datarea
start:
pushds
subax,ax
pushax
movax,datarea
movds,ax
callinput
cmpax,10000d
jeendall
callbubblesort
calloutput
endall:
movah,4ch
int21h
;----------------------------------------
inputproc
leadx,mess1
movah,09
int21h
callcrlf
movsi,0
movcx,count
enter:
callchar_int
deccx
cmpdl,','
jestore
cmpdl,13
jeexit2
jneerror
store:
movbuf[si],bx
addsi,2
jmpenter
error:
callcrlf
leadx,mess2
movah,09
int21h
movax,10000d
jmpexit3
exit2:
movbuf[si],bx
callcrlf
exit3:
ret
inputendp
;-----------------------------------------
bubblesortproc
movcx,count
deccx
lg4:
movdi,cx
movsi,0
lg2:
movax,buf[si]
cmpax,buf[si+2]
jlelg3
lg5:
xchgax,buf[si+2]
movbuf[si],ax
lg3:
addsi,2
looplg2
movcx,di
looplg4
ret
bubblesortendp
;--------------------------------------
outputproc
leadx,mess3
movah,09
int21h
callcrlf
movsi,0
movdi,count
next1:
movbx,buf[si]
cmpbl,0
jgenext4
movdl,'-'
movah,2
int21h
negbx
next4:
callint_char
movdl,','
movah,02
int21h
addsi,2
decdi
jnznext1
callcrlf
ret
outputendp
;---------------------------------------
char_intproc
movbx,0
movflag,0
newchar:
movah,1
int21h
movdl,al
cmpal,2dh
jnznext2
movflag,1
jmpnewchar
next2:
subal,30h
jlnext3
cmpal,9d
jgnext3
cbw
xchgax,bx
movcx,10d
mulcx
xchgax,bx
addbx,ax
jmpnewchar
next3:
cmpflag,1
jneexit1
negbx
exit1:
ret
char_intendp
;-----------------------------------
int_charproc
pushbx
pushcx
pushsi
pushdi
movcx,1000d
calldec_div
movcx,100d
calldec_div
movcx,10d
calldec_div
movcx,1d
calldec_div
popdi
popsi
popcx
popbx
ret
int_charendp
;---------------------------------------
dec_divproc
movax,bx
movdx,0
divcx
movbx,dx
movdl,al
adddl,30h
movah,02h
int21h
ret
dec_divendp
;----------------------------------
crlfproc
movdl,0ah
movah,02h
int21h
movdl,0dh
movah,02h
int21h
ret
crlfendp
;------------------------------------
prognamends
endstart
5)实验结果
1.输入正确的字符时,结果如图1所示。
图1排序结果
2.输入错误的字符时,如图2所示。
图2错误输入的输出结果