华中科技大学汇编实验报告2
华中科技大学计算机原理实验报告

电气学科大类《计算机原理与应用实验》课程实验报告电气与电子工程学院级姓名:学号:专业班号:日期:2014年1月7日实验成绩:评阅人:实验评分表目录实验评分表错误!未指定书签。
实验一:软件安装与使用错误!未指定书签。
一、实验目的错误!未指定书签。
二、实验设备错误!未指定书签。
三、实验任务错误!未指定书签。
四、实验原理错误!未指定书签。
五、实验内容错误!未指定书签。
六、实验过程及结果错误!未指定书签。
七、实验感想八、参考文献实验二:汇编语言实例讲解与程序编写一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验三:基于软件的最小系统硬件设计一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验四:基于最小系统的汇编程序设计一、实验目的错误!未指定书签。
二、实验设备错误!未指定书签。
三、实验任务错误!未指定书签。
四、实验原理错误!未指定书签。
五、实验内容六、实验过程及结果七、实验感想八、参考文献实验五:并行接口实验(演示实验)一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验六:工频测频接口电路设计与实现一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验一:软件安装与使用一、实验目的通过本实验学习软件的安装与使用。
二、实验设备微机一台,仿真软件三、实验任务.安装仿真软件。
.利用仿真软件编程。
四、实验原理仿真软件就是在下的一种仿真软件,它可以仿真模拟的程序运行,并且可以直观地观察寄存器的变化情况。
结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟),还有一个循序渐进的指导工具。
这对刚开始学组合语言的人会是一个很有用的工具。
它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。
华中科技大学计算机系统基础实验报告

课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:2016年5月24 日计算机科学与技术学院目录实验1: (2)实验2: (9)实验3: (22)实验总结 (30)实验1:数据表示1.1 实验概述本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。
实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。
实验语言:c; 实验环境: linux1.2 实验内容需要完成bits.c 中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。
1.3 实验设计源码如下:/** lsbZero - set 0 to the least significant bit of x* Example: lsbZero(0x87654321) = 0x87654320* Legal ops: ! ~ & ^ | + << >>* Max ops: 5* Rating: 1*/int lsbZero(int x) {//x右移一位再左移一位实现把最低有效位置0x = x>>1;x = x<<1;return x;}/** byteNot - bit-inversion to byte n from word x* Bytes numbered from 0 (LSB) to 3 (MSB)* Examples: getByteNot(0x12345678,1) = 0x1234A978* Legal ops: ! ~ & ^ | + << >>* Max ops: 6* Rating: 2*/int byteNot(int x, int n) {//x第n个字节每位都和1异或实现取反int y = 0xff;n = n<<3;y = y<<n;x = (x^y);return x;}/** byteXor - compare the nth byte of x and y, if it is same, return 0, if not, return 1* example: byteXor(0x12345678, 0x87654321, 1) = 1* byteXor(0x12345678, 0x87344321, 2) = 0* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int byteXor(int x, int y, int n) {//把x和y的第n个字节取出来异或,再转换为逻辑的0和1n = n<<3;x = x>>n;y = y>>n;x = x&(0xff);y = y&(0xff);return !!(x^y);}/** logicalAnd - x && y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalAnd(int x, int y) {//把x和y分别转化为逻辑的0和1,再相与x = (!(!x))&(!(!y));return x;}/** logicalOr - x || y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalOr(int x, int y) {//把x和y分别转化为逻辑的0和1,再相或x = (!(!x))|(!(!y));return x;}/** rotateLeft - Rotate x to the left by n* Can assume that 0 <= n <= 31* Examples: rotateLeft(0x87654321,4) = 0x76543218* Legal ops: ~ & ^ | + << >> !* Max ops: 25* Rating: 3*/int rotateLeft(int x, int n) {//先构造低n位为1,高(32-n)位为0的数z,x左移n位后的数加上x右移(32-n)位的数&z即可int z;z = ~(((1<<31)>>31)<<n);x = ((x>>(32+(~n+1)))&z)+(x<<n);return x;}/** parityCheck - returns 1 if x contains an odd number of 1's* Examples: parityCheck(5) = 0, parityCheck(7) = 1* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 4*/int parityCheck(int x) {//每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1int y;y = x<<16;y = y^x;y = y^(y<<8);y = y^(y<<4);y = y^(y<<2);y = y^(y<<1);y = y>>31;return !(!y);}/** mul2OK - Determine if can compute 2*x without overflow* Examples: mul2OK(0x30000000) = 1* mul2OK(0x40000000) = 0** Legal ops: ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int mul2OK(int x) {//把x第31位和30位分别和1做按位与,再异或,再和1异或int m;m = ((x>>31)&0x1)^((x>>30)&0x1);return m^0x1;}/** mult3div2 - multiplies by 3/2 rounding toward 0,* Should exactly duplicate effect of C expression (x*3/2),* including overflow behavior.* Examples: mult3div2(11) = 16* mult3div2(-9) = -13* mult3div2(1073741824) = -536870912(overflow)* Legal ops: ! ~ & ^ | + << >>* Max ops: 12* Rating: 2*/int mult3div2(int x) {//左移一位再+x即x*3,右移一位的时候,当y的最高位和最低位都为0时还要+1int y = (x<<1)+x;y = (y>>1)+(((y>>31)&1)&(((y<<31)>>31)&1));return y;}/** subOK - Determine if can compute x-y without overflow* Example: subOK(0x80000000,0x80000000) = 1,* subOK(0x80000000,0x70000000) = 0,* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int subOK(int x, int y) {//x的最高有效位和y的最高有效位不同且x和(x-y)的最高位不同才能判断溢出int m = (x>>31)&1;int n = (y>>31)&1;x = (m^n)&(m^(((x+(~y+1))>>31)&1));return (!x);}/** absVal - absolute value of x* Example: absVal(-1) = 1.* You may assume -TMax <= x <= TMax* Legal ops: ! ~ & ^ | + << >>* Max ops: 10* Rating: 4*/int absVal(int x) {//x最高位为0时就是x,最高位为1时是~x+1int y = x>>31;x = (y&(~x+1))+((~y)&x);return x;}/** float_abs - Return bit-level equivalent of absolute value of f for * floating point argument f.* Both the argument and result are passed as unsigned int's, but * they are to be interpreted as the bit-level representations of * single-precision floating point values.* When argument is NaN, return argument..* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 10* Rating: 2*/unsigned float_abs(unsigned uf) {int x=uf&(~(1<<31));if(x>0x7f800000){return uf;}else return x;}/** float_f2i - Return bit-level equivalent of expression (int) f* for floating point argument f.* Argument is passed as unsigned int, but* it is to be interpreted as the bit-level representation of a* single-precision floating point value.* Anything out of range (including NaN and infinity) should return * 0x80000000u.* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 30* Rating: 4*/int float_f2i(unsigned uf) {unsigned num=0x80000000;int x=(uf&0x007fffff)^0x00800000;int order=0;order=(uf&0x7f800000)>>23;if(order>158){return num;}if(order<127) return 0;else if(((uf>>31)&1)==1){if(order>150){return ~(x<<(order-150))+1;}else return ~(x>>(150-order))+1;}else{if(order>150) return x<<(order-150);else return x>>(150-order);}}1.4 实验过程编写源码,运行btest,得出实验结果。
华中科技大学汇编实验报告-推荐下载

课程实验报告课程名称:汇编语言程序设计实验实验名称:实验一简单程序设计 TD的使用实验时间: 2016-3-22,14:00-17:30 实验地点:南一楼804室74号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号:U201414813 姓名:唐礼威同组学生:无报告日期:2016年 3 月23日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。
除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。
特此声明!学生签名:日期:成绩评定实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分)(报告规范、完整、通顺、详实等)总成绩(100分)指导教师签字:日期:查和对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查,并中资试卷目录1实验目的与要求 (1)2实验内容 (1)3实验过程 (2)3.1任务1 (2)3.1.1设计思想及存储单元分配 (2)3.1.2流程图 (2)3.1.3源程序 (2)3.1.4实验步骤 (2)3.1.5实验记录 (2)3.2任务2 (4)3.2.1设计思想及存储单元分配 (4)3.2.2流程图 (4)3.2.3源程序 (4)3.2.4实验步骤 (4)3.2.5实验记录 (4)3.3任务3 (6)3.3.1设计思想及存储单元分配 (6)3.3.2流程图 (6)3.3.3源程序 (6)3.3.4实验步骤 (7)3.3.5实验记录 (7)4体会 (7)参考文献 (8)1实验目的与要求掌握汇编源程序编译工具、汇编程序、连接程序、调试工具的使用;理解数、符号、寻址方式等在计算机内的表现形式;理解指令执行与标志位之间的关系;熟悉常用的DOS功能调用。
2实验内容任务1. 《80X86汇编语言程序设计》教材中P31的1.14题。
华科汇编第一次实验报告

汇编实验报告姓名:班级:CS1209 学号:一、实验目的(1) 掌握汇编源程序开发的过程:编译、汇编MASM、连接LINK、用TD调试。
(2)编写简单的汇编代码,加强对汇编语言的理解。
二、实验内容及要求(1)、《80X86汇编语言程序设计》P299中的程序实例。
要求:重复7.4.3节中的整个过程,初步掌握TD的使用方法。
(2)、《80X86汇编语言程序设计》P31中的1.14题。
要求:直接在TD中输入指令进行求和(如MOV AH, x1、MOV AL, x2、ADD AH, AL),记录执行指令后标志位SF、OF、CF、ZF的值(验证自己的作业情况)。
(3)、编写程序缓冲区BUF中有若干个有符号短整数(2个字节),找出其中的绝对值最大的数并存放到变量RESULT中。
要求:在BUF中定义不同的正负数,用TD查看变量RESULT的值是否正确。
三、实验步骤题目一,从键盘中输入一个字符,若该字符为‘1’,则在下一行输出字符串‘11111111111!’后返回DOS;若该字符为‘2’,则在下一行输出字符串‘22222222222!‘后返回DOS;若该字符为其他字符,则在下一行输出字符串’Other Character’后返回DOS。
通过TD调试找出下面代码的错误并改正。
1、用记事本建立汇编源程序文件WAN.ASM.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDATA SEGMENT USE16BUF1 DB 0AH,0DH,'1111111111! $'BUF2 DB 0AH,0DH,'2222222222! $'BUF3 DB 0AH,0DH,'Other Character!',0AH,0DHDATA ENDSCODE SEGMENT USE16ASSUME DS:DATA,CS:CODE,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AH,1INT 21H ;等待从键盘输入一个字符CMP AL,'1'JE A1CMP AL,'2'JE A2JMP A3A1: LEA DX,BUF1MOV AH,9INT 21HA2: LEA DX,BUF2MOV AH,9INT 21HA3: LEA DX,BUF3MOV AH,9INT 21HEXIT: MOV AH,4CHINT 21HCODE ENDSEND START2.编译连接该程序3.运行程序中出现了如下问题。
华中科技大学电力系统综合实验报告汇编

电力系统综合实验报告第一部分综合实验台1、实验目的通过实验加深对电力系统暂态稳定性内容的理解,在对不同类型短路数据的分析中锻炼独立思考的能力,进一步了解不同短路故障对电力系统的危害。
实验方式为在理想实验台上模拟最简单的电力系统暂态稳定性问题,以期巩固学生在前一阶段的学习中对相关内容的掌握。
2、实验原理与接线电力系统中不同类型的短路故障引起的最大短路电流可由下式得到,推导过程可参见《电力系统分析》一书相关章节内容。
单相接地短路:两相相间短路:两相接地短路:三相对称短路:如下图1实验接线模拟了单机无穷大系统。
图1单机无穷大系统3、实验结果与数据分析⑴、不同故障类型对短路电流影响在下表中根据QF1~QF6的开断来选择单机无穷大系统的运行方式。
XL1接入双回线运行、XL2接入双回线运行。
表格 1 短路切除时间0.5s单相接地短路实验数据表格 3 短路切除时间0.5s两相接地短路实验数据根据以上表格得出以下结论:1)在各种不同类型的短路中,系统以双回线运行时短路电流较系统单回线运行时短路电流更大,与序网分析结果一致。
2)在各种不同类型的短路中,XL1接入时短路电流相对XL2接入时短路电流更小,以单相短路为例进行分析,可知接入XL阻抗越小,短路电流越大。
判断实验台设置中XL1大于XL2。
3)对比各组实验数据,发现短路电流大小在不同短路类型中呈现有以下关系。
两相相间短路两相接地短路三相接地短路单相接地短路根据相关实验原理分析,由于,一般有三相接地短路两相接地短路单相接地短路两相相间短路。
实验台中元件参数不可测量,经分析判断本次实验中负序阻抗偏小导致了两相短路电流偏大的现象发生。
4)小组实验中发现通过实验台面板调节似乎无法改变内部默认参数,继电器动作阈值无法重新整定,动作电流始终为5A,导致实验中多次出现未按预期跳闸的现象发生。
可能因为设备老化或内部模块未连接。
⑵、不同故障切除时间对短路电流影响表格 5 不同短路切除时间最大短路电流记录由I第二部分 动模实验记录的量:故障线路首端和末端电压电流(6个波形)电压电流的测量可以通过电压电流表计模型测量,也可以通过断路器和节点测量。
汇编实验报告

汇编语言实验报告学院:计算机学院专业:网络工程指导老师:纪平实验一汇编语言程序调试方法一、实验目的,1,熟悉汇编语言运行环境和方法2,了解如何使用汇编语言编制程序3,熟悉debug有关命令的使用方法4,利用debug掌握有关指令的功能5,利用debug运行简单的程序段二、实验内容1,学会输入、编辑汇编语言程序2,学会对汇编语言程序进行汇编、连接和运行3,进入和退出debug程序4,学会debug中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
对于U命令、N命令、W命令等,也应试一下。
三、实验准备1,仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。
2,准备好程序清单、设计好调试步骤、测试方法、对运行结果的分析3,编写一个程序:比较2个字符串所含的字符是否相同。
若相同则显示’Match.’,否则显示’No match!’。
4,仔细阅读有关debug命令的内容,对有关命令,都要事先准备好使用的例子。
四、实验步骤1,在DOS提示符下,进入masm目录。
2,在MASM目录下启动edit编辑程序,输入源程序,并对其进行汇编、连接和运行。
(1)调用edit输入、编辑源程序并保存在指定的目录中。
例:edit abc.asm(2)用汇编程序masm对源程序汇编产生目标文件obj。
例:masm abc(3)用连接程序link产生执行文件exe。
例:link abc(4)执行程序3,详细记录每一步所用的命令,以及查看结果的方法和具体结果。
五、实验结果1,输入sample.asm的源码;PROGRAM TITLE GOES HERE--Compare string;************************************************************************** **datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;************************************************************************** **program segment ;define code segment;----------------------------------------------------------------------------main proc farassume cs:program,ds:datarea,es:datareastart: ;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmain endp ;end of main part of program;--------------------------------------------------------------------program ends ;end of code segment;****************************************************************** **end start ;end assembly2,汇编生成目标文件3,连接生成exe文件4,执行程序5,调试程序-g命令在debug环境下运行该文件-d0(-d ds:ea)命令显示指定数据段地址中的内容-u命令显示汇编源程序-e ds:ea更改指定位置的内容实验二用DEBUG编程使用堆栈段AX和BX的内容进行交换等一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
(精品)华中科技大学分光计的调节和使用实验报告

华中科技大学分光计的调整与应用实验报告U201213225 江烈 同济实验目的:着重训练分光计的调整技术和技巧,并用它来测量三棱镜的顶角和最小偏向角,计算出三棱镜材料的折射率。
实验原理:1)分光计的调节原理。
(此项在实验的步骤中,针对每一步详细说明。
) 2)测折射率原理:实验要求:调整要求:①平行光管发出平行光。
当i 1=i 2'时,δ为最小,此时21Ai =' 22111minAi i i -='-=δ )(21min 1A i +=δ 设棱镜材料折射率为n ,则2sin sin sin 11An i n i ='= 故2sin2sin 2sin sin min1A A A i n +==δ 由此可知,要求得棱镜材料折射率n ,必须测出其顶角A和最小偏向角min δ。
②望远镜对平行光聚焦。
③望远镜,平行光管的光轴垂直一起公共轴。
④调节动作要轻柔,锁紧螺钉锁住即可。
⑤狭缝宽度1mm 左右为宜。
实验器材:分光计,三棱镜,水银灯光源,双面平行面镜。
实验步骤:⒈调整分光计:(1) 调整望远镜:a目镜调焦:清楚的看到分划板刻度线。
b调整望远镜对平行光聚焦:分划板调到物镜焦平面上。
c调整望远镜光轴垂直主轴:当镜面与望远镜光轴垂直时,反射象落在上十字线中心,平面镜旋转180°后,另一镜面的反射象仍落在原处。
(2) 调整平行光管发出平行光并垂直仪器主轴:将被照明的狭缝调到平行光管物镜焦面上,物镜将出射平行光。
2. 使三棱镜光学侧面垂直望远镜光轴。
(1)调整载物台的上下台面大致平行,将棱镜放到平台上,是镜三边与台下三螺钉的连线所成三边互相垂直。
(2)接通目镜照明光源,遮住从平行光管来的光,转动载物台,在望远镜中观察从侧面AC 和AB 返回的十字象,只调节台下三螺钉,使其反射象都落在上十子线处。
3. 测量顶角A :转动游标盘,使棱镜AC 正对望远镜记下游标1的读数1θ和游标2的读数2θ。
华科微机原理实验报告

微机原理实验报告课程:微机原理指导老师姓名:学号:实验名称:Lab 02: MIPS处理器部件实现A微机原理实验报告一、实验目的本实验旨在实现MIPS处理器的部件—控制器和ALU,理解CPU控制器,理解ALU的原理,使用Verilog语言设计CPU控制器和ALU ,使用ISim进行行为仿真。
二、实验原理及说明MIPS的基本架构如图1所示,包括Control,ALU这样的组合逻辑单元,也包括如instruction memory,Data memory和Registers file存储单元。
本实验主要实现CPU Control和ALU两个部分。
(一)CPU控制器的实现CPU Control单元输入为指令的opCode字段,即操作码;以及R指令的funct编码。
操作码和Funct编码经过主控制单元的译码,给ALU,Data Memory,Registers ,Muxs等部件输出正确的控制信号。
图2. MIPS基本指令格式图: 控制模块的IO定义注:Jump指令编码是000010,Jump输出信号为1,其他输出信号都为0图3. OpCode与控制输出的编码关系图4. Funct,ALUOp与ALU Control编码关系(二) ALU的实现ALU是CPU核心的计算单元,实现诸如加,减,或,与等操作。
算术操作的编码三、实验verilog代码(一)CPU控制器的实现module Ctr(input [5:0] OpCode,input [5:0] Funct,output regRegDst,output regALUSrc,output regRegWrite,output regMemWrite,output regMemRead,output regMemtoReg,output reg Branch,output reg Jump,output reg [3:0] ALUControl);reg [1:0] ALUOp;always @(OpCode)begincase(OpCode)//R type6'b000000:beginRegDst=1; ALUSrc=0; RegWrite=1; MemWrite=0; MemRead=0; MemtoReg=0;Branch=0;ALUOp=2'b10; Jump=0;end//beq6'b000100:beginRegDst=1'bx; ALUSrc=0; RegWrite=0; MemWrite=0; MemRead=0; MemtoReg=1'bx; Branch=1;ALUOp=2'b01; Jump=0;end//lw6'b100011:beginRegDst=0; ALUSrc=1; RegWrite=1; MemWrite=0; MemRead=1; MemtoReg=1;Branch=0;ALUOp=2'b00; Jump=0;end//sw6'b101011:beginRegDst=1'bx;ALUSrc=1;RegWrite=0;MemWrite=1;MemRead=0;MemtoReg=1'bx;Branch=0;ALUOp=2'b00;Jump=0;end//Jump6'b000010:beginRegDst=0;ALUSrc=0;MemtoReg=0;RegWrite=0;MemRead=0;MemWrite=0;Branch=0;ALUOp=2'b00;Jump=1;endendcaseendalways @(ALUOp or Funct)begincasex({ALUOp,Funct})8'b00xxxxxx: ALUControl=4'b0010;8'b01xxxxxx: ALUControl=4'b0110;8'b1xxx0000: ALUControl=4'b0010;8'b1xxx0010: ALUControl=4'b0110;8'b1xxx0100: ALUControl=4'b0000;8'b1xxx0101: ALUControl=4'b0001;8'b1xxx1010: ALUControl=4'b0111;default: ALUControl=4'b0000;endcaseendendmodule(二) ALU的实现module ALU(input [31:0] SrcA,input [31:0] SrcB,input [3:0] ALUCtr,output Zero,output reg [31:0] ALURes);assign Zero=(ALURes==1'b0);always @(SrcA or SrcB or ALUCtr)begincase(ALUCtr)4'b0000: ALURes=SrcA&SrcB; //AND4'b0001: ALURes=SrcA | SrcB; //OR4'b0010: ALURes=SrcA + SrcB; //add4'b0110: ALURes=SrcA - SrcB; //substract4'b0111: ALURes=SrcA<SrcB ? 1:0; //set on less than 4'b1100: ALURes=~(SrcA | SrcB); //NORdefault ALURes=32'h0;endcaseendendmodule四、仿真测试1.代码(一)CPU控制器的实现module Ctr_tb;// Inputsreg [5:0] OpCode;reg [5:0] Funct;// Outputswire RegDst;wire ALUSrc;wire RegWrite;wire MemWrite;wire MemRead;wire MemtoReg;wire Branch;wire Jump;wire [3:0] ALUControl;// Instantiate the Unit Under Test (UUT)Ctruut (.OpCode(OpCode),.Funct(Funct),.RegDst(RegDst),.ALUSrc(ALUSrc),.RegWrite(RegWrite),.MemWrite(MemWrite),.MemRead(MemRead),.MemtoReg(MemtoReg),.Branch(Branch),.Jump(Jump),.ALUControl(ALUControl) );initial begin// R-type AddOpCode=6'b000000;Funct=6'b100000;// R-type Subtract#10;OpCode=6'b000000;Funct=6'b100010;// Lw#10;OpCode=6'b100011;Funct=6'bxxxxxx;// Sw#10;OpCode=6'b101011;Funct=6'bxxxxxx;// Beq#10;OpCode=6'b000100;Funct=6'bxxxxxx;// R-type AND#10;OpCode=6'b000000;Funct=6'b100100;// R-type OR#10;OpCode=6'b000000;Funct=6'b100101;// R-type set on less than#10;OpCode=6'b000000;Funct=6'b101010;// Jump#10;OpCode=6'b000010;endendmodule(二) ALU的实现module ALU_tb;// Inputsreg [31:0] SrcA;reg [31:0] SrcB;reg [3:0] ALUCtr;// Outputswire Zero;wire [31:0] ALURes;// Instantiate the Unit Under Test (UUT)ALU uut (.SrcA(SrcA),.SrcB(SrcB),.ALUCtr(ALUCtr),.Zero(Zero),.ALURes(ALURes));initial begin// ANDSrcA =32'hf0f0ffff;SrcB =32'h0000f0f0;ALUCtr =0;// OR#10;ALUCtr =4'b0001;// Add#10;ALUCtr =4'b0010;// Subtract#10;ALUCtr =4'b0110;// set on less than#10;ALUCtr =4'b0111;//NOR#10;ALUCtr =4'b1100;//Other situation#10;ALUCtr =4'b1111;endendmodule2.仿真截图(一)CPU控制器的实现(二) ALU的实现五、实验总结实验名称:Lab03: MIPS处理器部件实现B微机原理实验报告一、实验目的本实验旨在使读者实现MIPS处理器的部件—Data memory, Instruction memory和Registers 三大存储器件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程实验报告课程名称:汇编语言程序设计实验实验名称:实验二分支程序、循环程序的设计实验时间: 2016-3-29,14:00-17:30 实验地点:南一楼804室63号实验台指导教师:勇专业班级:计算机科学与技术201409班学号: U201414813 姓名:唐礼威同组学生:无报告日期: 2016年 3 月 30日原创性声明本人重声明:本报告的容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。
除文中已经注明引用的容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。
特此声明!学生签名:日期:成绩评定实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分)(报告规、完整、通顺、详实等)总成绩(100分)指导教师签字:日期:目录1实验目的与要求 (2)2实验容 (2)3实验过程 (3)3.1任务1 (3)3.1.1设计思想及存储单元分配 (3)3.1.2流程图 (4)3.1.3源程序 (4)3.1.4实验步骤 (7)3.1.5实验记录 (8)4体会 (9)参考文献 (10)1实验目的与要求1、熟悉分支、循环程序的结构及控制方法,掌握分支、循环程序的调试方法;2、加深对转移指令及一些常用的汇编指令的理解;3、加深对常用DOS功能调用指令的理解,进一步熟悉TD的使用。
2实验容设计实现一个学生成绩查询的程序。
1、实验背景在以BUF为首址的字节数据存储区中,存放着n个学生的课程成绩表(百分制),每个学生的相关信息包括:(占10个字节,结束符为数值0),语文成绩(1个字节),数学成绩(1个字节),英语成绩(1个字节),平均成绩(1个字节)。
例如:N EQU 1000BUF DB ‘zhangsan’,0,0 ;学生,不足10个字节的部分用0填充DB 100, 85, 80,? ; 平均成绩还未计算DB ‘lisi’,6 DUP(0)DB 80, 100, 70,?DB N-3 DUP( ‘TempValue’,0,80,90,95,?) ;除了3个已经具体定义了学生信息的成绩表以外,其他学生的信息暂时假定为一样的。
DB ‘wangwu’,0,0,0,0DB 85, 85, 100, ?2、功能一:提示并输入学生(1)使用9号DOS系统功能调用,提示用户输入学生。
(2)使用10号DOS系统功能调用,输入学生。
输入的字符串放在以in_name为首址的存储区中。
(3)若只是输入了回车,则回到“(1)”处重新提示与输入;若仅仅输入字符q,则程序退出,否则,准备进入下一步处理。
3、功能二:以学生查询有无该学生(1)使用循环程序结构,在成绩表中查找该学生。
(2)若未找到,就提示用户该学生不存在,并回到“功能一(1)”的位置,提示并重新输入。
(3)若找到,则将该学生课程成绩表的起始偏移地址保存到POIN字变量中。
提示:字符串比较时,当采用输入串的长度作为循环次数时,若因循环次数减为0而终止循环,则还要去判断成绩表中名字串的下一个字符是否是结束符0,若是,才能确定找到了。
4、功能三:计算所有学生的平均成绩使用算数运算相关指令计算并保存每一个学生的平均成绩。
平均成绩计算公式:(A*2+B+C/2)/3.5,即将语文成绩A乘以权重2、英语成绩C除以权重2后,与数学成绩B一起求和,再计算该生的平均成绩。
要求避免溢出。
提示:使用循环程序结构,注意寻址方式的灵活使用。
把小数3.5转换成分数后再运算避免使用浮点数指令。
5、功能四:将功能二查到的学生的平均成绩进行等级判断,并显示判断结果。
(1)平均成绩等级显示方式:若平均成绩大于等于90分,显示“A”;大于等于80分,显示“B”;大于等于70分,显示“C”;大于等于60分,显示“D”;小于60分,显示“F”。
提示:使用分支程序结构,采用2号DOS系统功能调用显示结果。
(2)使用转移指令回到“功能一(1)”处(提示并输入)。
3实验过程3.1任务13.1.1设计思想及存储单元分配设计思想:本实验主要是要解决3个问题:一是提示并输入学生;二是如何进行字符串的比较从而查询学生;三是如何计算平均分从而分出等级。
依据本次实验的要求,此处用分支、循环程序的结构及控制方法来解决。
寄存器分配:CX:存放学生数量(默认3),计数器作用;BX:存放目标学生下标值,得到分数缓冲区首地址;BP:存放缓冲区基地址;AL:存放平均成绩;AX,DX,SI:临时寄存器;3.1.2 流程图开始9号调用输出提示信息,10号调用输入查询学生姓名输入字符串为空?Y9号调用:是否继续,按任意键继续,按q 退出N结束YN CX=0?Y输出查找失败N缓冲区是否为零N当前字符是否匹配NCX--Y 缓冲区减一Y 计算平均成绩并输出等级3.1.3 源程序.386STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDSDATA SEGMENT USE16 N EQU 3BUF DB 'zhangsan',0,0 DB 100,85,80,? DB 'lisi',6 DUP(0) DB 80,100,70,? DB 'wangwu',4 DUP(0) DB 85,85,100,?MSG DB 'Input the name : $'CONTINU DB 'Enter any keys to continue(if enter q,exit!):$' FAIL DB 'Not Exist!$' INPUT DB 10 DB ? DB 10 DUP(0) DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOV AX, DATAMOV DS, AXJMP BEGINFAILED: LEA DX, OFFSET FAIL ; 查找失败MOV AH, 9HINT 21HLOOPA: MOV DL, 0AH ;换行符MOV AH, 2HINT 21HLEA DX, OFFSET CONTINU ;继续MOV AH, 9HINT 21HMOV DL, 0AH ;换行符MOV AH, 2HINT 21HMOV DL, 0DHMOV AH, 2HINT 21HMOV AH, 8HINT 21HCMP AL, 71HJE OVER ;输入 'q', 退出程序BEGIN: MOV CX, N ; 学生个数LEA DX, OFFSET MSG ;输出提示信息MOV AH, 9HINT 21HMOV DL, 0AH ; 换行符MOV AH, 2HINT 21HLEA DX, OFFSET INPUT ; 读入学生MOV AH, 0AHINT 21HMOV DL, 0AH ; 换行符MOV AH, 2HINT 21HLEA BP, OFFSET INPUT ; 将 INPUT 基址存放至 BP ADD BP,2CMP DS:BYTE PTR [BP-1],0H ;空字符串JE LOOPAINC CXCOMPA: DEC CXJE FAILED ; 查找失败, 重新输入MOV BX, N ; 计算目标学生下标值, 存放至 BXSUB BX, CXIMUL BX, 14 ; 根据目标学生下标值, 找到分数缓冲区首地址MOV AX, 10 ; 临时计数器MOV SI, 0COMPB: MOV DL, [BX + SI]MOV DH, BYTE PTR DS:[BP + SI]CMP DL, 0 ; 如果缓冲区已结束,说明查找成功JE CAL ; 跳转至平均成绩计算处CMP DH, DL ; 比较当前缓冲区与输入字符JNE COMPA ; 当前字符相同,继续循环以比较下一字符INC SIDEC AXJNE COMPBCAL: MOV BX, N ; 计算目标学生下标值, 存放至 BXSUB BX, CXIMUL BX, 14ADD BX, 10 ; 根据目标学生下标值, 找到分数缓冲区首地址 BX = m * 14 + 10MOV AX, 0MOV DX, 0MOV AL, [BX] ; 计算平均成绩ADD AX, AXMOV DL, [BX +1]ADD AX, DXMOV DL, [BX +2]SAR DL, 1ADD AX, DX ;AL=A*2+B+C/2SAL AX, 1MOV DL, 7IDIV DL ; AL = 2 * AL / 7MOV [BX + 3], AL; AVG = AL ( AL / 3.5)CMP AL, 90JGE LEVELACMP AL, 80JGE LEVELBCMP AL, 70JGE LEVELCCMP AL, 60JGE LEVELDJMP LEVELFLEVELA:MOV DL, 41H ;输出成绩等级MOV AH, 2HINT 21HJMP LOOPALEVELB:MOV DL, 42HMOV AH, 2HINT 21HJMP LOOPALEVELC:MOV DL, 43HMOV AH, 2HINT 21HJMP LOOPALEVELD:MOV DL, 44HMOV AH, 2HINT 21HJMP LOOPALEVELF:MOV DL, 46HMOV AH, 2HINT 21HJMP LOOPAOVER: MOV AH, 4CHINT 21HCODE ENDSEND START3.1.4实验步骤1. 使用编辑程序EDIT.EXE录入源程序,存盘文件名为shiyan.ASM。
2. 使用MASM 6.0汇编源文件。
即MASM shiyan;3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。
4. 使用连接程序LINK.EXE将汇编生成的shiyan.OBJ文件连接成执行文件。
即LINK shiyan;5. 若连接时报错,则依照错误信息修改源程序。
之后重新汇编和连接,直至不再报错并生成shiyan.EXE文件。
6. 执行该程序。
即在命令行提示符后输入shiyan后回车,观察执行现象。
7.让9号功能调用显示的信息放在自己希望的位置。
8.在9号功能调用时,尝试带显示字符串的结尾没有“$”结束符。
9.10号功能调用时,输入的字符数超过定义的数量时,它是如何处理的?3.1.5实验记录(包括实验条件、输入/输出、错误和修改等信息的记录)1、实验环境条件:P3 1GHz,256M存;WINDOWS 2000命令行窗口;EDIT.EXE 2.0;MASM.EXE6.0; LINK.EXE 5.2; TD.EXE 5.0。