当前位置:文档之家› 西电算法导论上机实验报告

西电算法导论上机实验报告

西电算法导论上机实验报告
西电算法导论上机实验报告

算法导论上机实验报告册

班级: xxxxxx

学号: xxxxxxx

姓名: xxxx

教师: xxxxxx

目录

实验一排序算法 (1)

题目一: (1)

1、题目描述: (1)

2、所用算法: (1)

3、算法分析: (1)

4、结果截图: (1)

5、总结: (2)

题目二: (3)

1、题目描述: (3)

2、所用算法: (3)

3、算法分析: (3)

4、结果截图: (3)

5、总结: (4)

题目三: (4)

1、题目描述: (4)

2、所用算法: (4)

3、算法分析: (5)

4、结果截图: (5)

5、总结: (5)

题目四: (6)

1、题目描述: (6)

2、所用策略: (6)

3、算法分析: (6)

4、结果截图: (6)

5、总结: (7)

实验二动态规划 (7)

题目一: (7)

1、题目描述: (7)

2、所用策略: (7)

3、算法分析: (7)

4、结果截图: (8)

5、总结: (8)

题目二: (9)

1、题目描述: (9)

2、所用策略: (9)

3、算法分析: (9)

4、结果截图: (9)

5、总结: (10)

题目三: (10)

1、题目描述: (10)

2、所用策略: (10)

3、算法分析: (10)

5、总结: (11)

题目四: (12)

1、题目描述: (12)

2、所用策略: (12)

3、算法分析: (12)

4、结果截图: (12)

5、总结: (13)

题目五: (13)

1、题目描述: (13)

2、所用策略: (13)

3、算法分析: (13)

4、结果截图: (14)

5、总结: (14)

实验三贪心算法 (14)

题目一: (14)

1、题目描述: (14)

2、所用策略: (14)

3、算法分析: (14)

4、结果截图: (15)

5、总结: (16)

题目二: (16)

1、题目描述: (16)

2、所用策略: (16)

3、算法分析: (16)

4、结果截图: (17)

5、总结: (17)

题目三: (17)

1、题目描述: (17)

2、所用算法: (17)

3、算法分析: (17)

4、结果截图: (18)

5、总结: (18)

题目四: (19)

1、题目描述: (19)

2、所用算法: (19)

3、算法分析: (19)

实验四回溯法 (19)

题目一: (19)

1、题目描述: (19)

2、所用策略: (19)

3、算法分析: (19)

题目二: (21)

1、题目描述: (21)

3、算法分析: (21)

实验一排序算法

题目一:

1、题目描述:描述一个运行时间为θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素。

2、所用算法:1、运用归并排序算法

2、在已经排好序的基础上,对其运用二分查找。

3、算法分析:

(1)归并排序运用的是分治思想,时间复杂度为θ(nlgn),能够满足题目要求的运行时间。归并排序的分解部分是每次将数组划分两个部分,时间复杂度为θ(1);再对已经分解的两个部分再进行分解直到将数组分解成单个元素为止;解决部分是递归求解排序子序列;合并部分是将已经排序的子序列进行合并得到所要的答案,时间复杂度为θ(lgn)。

(2)二分查找算法的时间复杂度为θ(lgn)在题目要求的范围内,二分查找的条件为待查的数组为有序序列。算法的主要思想为设定两个数,low指向最低元素,high指向最高元素,然后比较数组中间的元素与待查元素进行比较。如果待查元素小于中间元素,那么表明查找元素在数组的前半段;反之,如果待查元素大于中间元素,那么表明查找元素在数组的后半段。

4、结果截图:

5、总结:

(1)在主函数中调用二分查找的时候,参数应该为BinSearch(a,j+1,n,x-a[j]),从j+1开始遍历而不是都是从第一个开始。

(2)遇到的困难为:由于程序语言规定数组的下标从0开始,而算法伪代码要求从1开始,因此在定义数组大小的时候将数字加1,但是在编译运行的时候会得不到想要的结果,出现数组下标访问错误。

采取的解决方案为:在开始定义数组的时候,将数组的大小定义为一个较大的数字,如1000。避免在运行时出现错误,但是造成了空间的浪费。较好的方案为使用动态数组,如malloc函数。

题目二:

1、题目描述:实现优先级队列,即需要支持以下操作:INSERT(S,x):把元素x插入到集合S中;MAXMUM(S):返回S中具有最大key的元素;EXTRACT-MAX(S):去掉并返回S中的具有最大key的元素;INCREASE-KEY(S,x,k):将元素x的关键字值增到k。

2、所用算法:堆排序,运用堆来实现优先队列。

3、算法分析:

(1)堆排序算法是引用堆这个数据结构进行信息管理。堆排序的时间复杂度是θ(nlgn),但是与归并排序不同的是堆排序具有空间的原址性,任何时候都只需要常数个额外的元素空间存储临时数据。堆排序算法分为3个过程,MAX-HEAPIEY:调整堆以满足小顶堆性质,其时间复杂度为θ(lgn);BUILD-MAXHEAP:从无序的输入数据数组中构造小顶堆,其时间复杂度为线性时间;HEAP-SORT:对数组进行原址排序,其时间复杂度为θ(nlgn)。

(2)在堆的基础上实现优先队列INSERT、MAXMUM、EXTRACT-MAX、INCREASE-KEY,时间复杂度为θ(lgn)。

4、结果截图:

5、总结:

遇到的困难:没有理解将一个序列转换成小顶堆的过程,因此刚开始很难将伪代码用c语言进行实现。从结果可以看出,在编写MAX-EXSTRACT函数的时候,当去掉第一个元素后,程序没有调用MAX-HEAP进行调整堆,因此最后序列是无序状态。

题目三:

1、题目描述:实现quick_sort算法,并且回答以下两个问题:(1)待排数组中的元素值都相同的情况下,运用quick_sort需要进行多少次比较?(2)对于n个元素的数组,运用quick_sort举出需要进行比较次数的上限和下限是多少?

2、所用算法:快速排序算法

3、算法分析:快速排序采用分治策略,时间复杂度为θ(nlgn),但是最坏情况下为θ(n2),并且快速排序算法属于原地排序,并不需要开辟空间。快速排序复杂的步骤为其分解的步骤,分解的过程:数组A[p..r]被划分为两个子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每个元素都小于A[q],而A[q]也小于等于A[q+1..r]中的每个元素。而在实现的过程总是选择将A[r]作为基准点进行划分A[p..r]数组。

4、结果截图:

5、总结:

问题答案:(1)当选取第一个或者最后一个为基准点时,当n个元素相同的时候为最坏情况,比较次数为n*(n-1)/2;(2)快速排序比较次数最少为θ(nlgn),,最大的比较次数为θ(n2)。

题目四:

1、题目描述:运用分治的策略将两个已经排好序的序列中,找出第k大的元素,且要求时间复杂度为θ(lgm+lgn),其中m和n分别为两个序列的长度。

2、所用策略:分治策略

3、算法分析:

(1)分解:因为已经是两个独立的的序列,所以不用进行分解。

(2)解决:因为两个序列为已经排好的序列,因此不用分开进行排序。

(3)利用归并排序中的merge函数,将这两个序列分别看成是L[]和R[]两个数组,通过开辟一个新的数组,将两个数组合并成一个新的排好序的序列,在根据要求的k值,对新的数组进行取值。

4、结果截图:

5、总结:

(1)理解分治策略的三个步骤:分解、解决和合并对于具体问题的具体表现,要善于根据时间复杂度与所学的算法进行结合,找出可以利用的地方。

实验二动态规划

题目一:

1、题目描述:用动态规划实现矩阵链乘,保证相乘的次数最少。

2、所用策略:动态规划

3、算法分析:

(1)最优子结构为:如果最优的加括号的方式将其分解为Ai..k 与Ak+1..j的乘积,则分别对Ai..k与Ak+1..j加括号的方式也一定是最优的。

(2)定义m[i,j]为计算矩阵Ai..j所需标量乘法次数的最小值,对于i=j时,矩阵链乘只包含唯一的矩阵Ai,因此不需要做任何标量乘法运算,所以m[i,i]=0;当i

(3)矩阵链乘的递归式:

(4)在算法设计的时候,需要m数组记录Ai..j最小相乘次数,

s数组记录构造最优解所需要的信息,其记录的k值指出了AiAi+1Aj 的最优括号化方案的分割点应在AkAk+1之间。

(5)矩阵链乘的时间复杂度为θ(n3)

4、结果截图:

5、总结:

遇到的问题:在构建m数组和s数组的时候需要构建二维数组,而c语言中函数的参数列表中二维数组要指明数组大小,但是还没有输入信息的时候并没有方法确定数组大小。

采取的方案:由于此次的例子只有两种情况,因此对于MATRIX_CHAIN_ORDER函数和PRINT_OPTIMAL_PARENS函数写两遍,大体的实现过程相同,只是数组的大小有所改变。并没有解决这个情况,造成代码的冗余。

题目二:

1、题目描述:用动态规划求下列字符串的最长公共子序列(LCS)

2、所用策略:动态规划

3、算法分析:

(1)最优子结构:令X=和Y=为两个序列,Z=为X和Y的任意LCS。1、如果xm=yn,则

zk=xm=yn且Zk-1是Xm-1和Yn-1的一个LCS.2、如果xm≠yn,则

zk≠xm意味着Z是Xm-1和Y的一个LCS;3、如果xm≠yn,则zk≠yn 意味着Z是X和Yn-1的一个LCS。

(2)定义一个b[i,j]指向表项对应计算c[i,j]时所选择的子问题最优解,过程返回表b和表c,c[m,n]保持X和Y的LCS长度。

(3)LCS的递归式为:

(4)LCS的时间复杂度为θ(m+n),b表的空间复杂度为θ(mn)。

4、结果截图:

5、总结:

用动态规划求取最长公共子序列的时候,要理解b数组的用途和使用。

遇到的困难:编写的代码无法针对字符串大小未定情况下,进行求解LCS这导致了代码的冗余。

题目三:

1、题目描述:用动态规划求取以下字符串的最长公共子串。

2、所用策略:动态规划

3、算法分析:

(1)最优子结构:令X=和Y=为两个序列,Z=为X和Y的任意最长公共子串。1、如果xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的一个最长公共子串.2、

如果xm≠yn,则zk≠xm意味着Z是Xm-1和Y的一个最长公共子串;

3、如果xm≠yn,则zk≠yn意味着Z是X和Yn-1的一个最长公共子串。

(2)定义L[i,j]为以x[i]和y[j]为结尾的相同子串的最大长度。记录着X和Y的最长公共子串的最大长度。

(3)最长公共子串的递归式:

(4)最长公共子串的时间复杂度为θ(mn),空间复杂度为θ(mn)。

4、结果截图:

5、总结:

要同上述的最长公共子序列进行对比,区分他们的不同之处。也要理解用动态规划求解时的相同之处和不同之处。

题目四:

1、题目描述:给定n个整数(可能为负数)组成的序列,

a[1],a[2]...a[n],求该序列a[i]+a[i+1]...a[j]的子段和的最大值。

2、所用策略:动态规划

3、算法分析:

(1)最优子结构:定义当所给整数全为负数的时候,最大子段和为0,则最大子段和为max{0,a[i]+a[i+1]...+a[j]},1≤i≤j≤n

(2)引入一个辅助数组b,动态规划的分解分为两步:(1)计算辅助数组的值;(2)计算辅助数组的最大值。辅助数组b[j]用来记录以j为尾的子段以及集合中的最大子段和。

(3)最大子段和的递归式:

(4)最大子段和使用动态规划进行计算的时间复杂度为θ(n)。

4、结果截图:

5、总结:

在求解集合的最大子段和的时候,要对比不同解决方法的不同之处,感受用动态规划解决的便捷。

题目五:

1、题目描述:利用动态规划求出多段图中的最短路径

2、所用策略:动态规划

3、算法分析:

(1)可以由图可知,图中的顶点讲图划分7个阶段,分别了解每个阶段可以有几种可供选择的店,引入f[k]表示状态k到终点状态的最短距离。最优子结构为:当前状态的f[k]由上个状态的

f[k-1]和状态k-1到状态k的距离决定决策:当前状态应在前一个状

态的基础上获得。决策需要满足规划方程,规划方程:f(k)表示状态k到终点状态的最短距离。

(2)多段图最短路径的递归式:

4、结果截图:

无。

5、总结:

(1)遇到的问题:无法将多段图的每个阶段点的状态表示并记录下来。并不了解如何将动态规划与贪心算法的如迪杰斯特拉算法进行对比,真正从最优子结构将最短路径表示出来。

实验三贪心算法

题目一:

1、题目描述:背包问题,即分别计算出在0-1背包和分数背包情况下的计算结果。

2、所用策略:动态规划和贪心策略

3、算法分析:

(1)0-1背包问题:所选择的的贪心策略为按照选择单位重

量价值最大的物品顺序进行挑选。算法的步骤:设背包容量为C,共有n个物品,物品重量存放在数组W[n]中,价值存放在数组V[n]中,问题的解存放在数组X[n]中。第一步:改变数组W和V的排列顺序,使其按单位重量价值V[i]/W[i]降序排列,并将数组X[n]初始化为0;第二步初始化i=0,设计一个循环,循环终止条件为(W[i]>C),循环体为将第i个物品放入背包:X[i]=1;C=C-W[i];i++;最后一步:将结果存入到X数组中。

(2)分数背包问题:所选择的的贪心策略为按照选择单位重量价值最大的物品顺序进行挑选。算法的步骤:设背包容量为C,共有n个物品,物品重量存放在数组W[n]中,价值存放在数组V[n]中,问题的解存放在数组X[n]中。第一步:改变数组W和V的排列顺序,使其按单位重量价值V[i]/W[i]降序排列,并将数组X[n]初始化为0;第二步初始化i=0,设计一个循环,循环终止条件为(W[i]>C),循环体为将第i个物品放入背包:X[i]=1;C=C-W[i];i++;最后一步:将结果存入到X数组中X[i]=C/W[i]。

(3)分数背包问题所采用的贪心策略之不能得到最优解,是由于物品不允许分割,因此,无法保证最终能将背包装满,部分闲置的背包容量使背包的单位重量价值降低了。

(4)分数背包问题采用选择单位重量价值最大的物品顺序进行挑选,其算法的时间复杂度为θ(nlgn)。

4、结果截图:

5、总结:

使用贪心策略解决0-1背包问题得出的结果并不是最优解,这是由于所用的选择策略不同。

题目二:

1、题目描述:一个简单的调度问题,给予工作编号为J1,J2...Jn,已知所以工作的运行时间分别为T1,T2...TN。有一个单独的处理器,为了安排这些工作以到达减少平均完成时间的最好方法是什么。假定它是一个非抢占式调度:一旦工作开始,它必须运行完成。

2、所用策略:贪心策略

3、算法分析:

(1)由于是非抢占式调度,所以应该尽量让时间短的工作先做,然后再让时间长的工作做。这里我们使用堆进行排序,建立一个小顶堆,然后每次拿出小顶堆上的最小元素,并使用sum中的公式就可以算出平均完成时间。堆排序的时间复杂度是O(nlgn),其

杭电计组实验报告10

计组实验十 老师:包健 一、源代码测试模块代码: module Top( inputinclk, inputmem_clk, inputrst, outputreg[7:0] LED, input [3:0] SW ); wireclk; MyButtonmb( .clk_100MHz(mem_clk), .BTN(inclk), .BTN_Out(clk) ); wire [31:0] ALU_F; wire [31:0] M_R_Data; wire ZF; wire OF; wire [31:0]PC; My_I_CPUmy_i_cpu( .clk(clk), .mem_clk(mem_clk), .rst(rst), .ALU_F(ALU_F), .M_R_Data(M_R_Data), .ZFF(ZF), .OF(OF), .PC_out(PC) ); always@(*) begin case(SW) 4'd0:LED=ALU_F[7:0]; 4'd1:LED=ALU_F[15:8]; 4'd2:LED=ALU_F[23:16]; 4'd3:LED=ALU_F[31:24]; 4'd4:LED=M_R_Data[7:0];

4'd5:LED=M_R_Data[15:8]; 4'd6:LED=M_R_Data[23:16]; 4'd7:LED=M_R_Data[31:24]; 4'd8:LED={ZF,6'd0,OF}; 4'd12:LED=PC[7:0]; 4'd13:LED=PC[15:8]; 4'd14:LED=PC[23:16]; 4'd15:LED=PC[31:24]; default:LED=8'b0000_0000; endcase end endmodule 顶层模块代码: moduleMy_I_CPU( inputclk, inputmem_clk, inputrst, output [31:0] ALU_F, output [31:0] M_R_Data, output ZFF, output OF, output [31:0]PC_out ); //wire clk_n = ~clk; wire[31:0] codes; wire [31:0]PC_new; reg [31:0]PC; Inst_Fetch1 inst_fetch( .PC(PC), .rst(rst), .clk(clk), .Inst_codes(codes), .PC_new(PC_new) ); wire[5:0] OP; wire[5:0] func;

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

计组实验报告

计算机组成原理实验报告 实验1:VERILOG 设计基础 专业班级:14级计算机二班 学号:14048001 姓名:杨娜 学号:14048003 姓名:周蓉 实验地点:理工楼901 实验时间:2016年5月14日

实验十VGA显示控制器的设计 一、实验目的 1、学习VERILOG的基本语法和编程规则 2、掌握通用寄存器等常用基本数字模块的VERILOG描述和基本设计方法 3、理解带使能控制和异步清零的8位寄存器的设计原理 4、掌握使用VERILOG设计和验证带使能控制和异步清零的8位寄存器的方法 5、掌握移位寄存器的设计方法 二、实验任务 1、设计一个带使能控制和异步清零的8位寄存器REG8X,实现8位输入的锁存,在时钟的上升沿处得到一个8位的输出和一个8位的反向输出,将结果显示在发光二极管。 模块的端口描述如下: 模块的参考物理结构如下: R7 R6 R i R 0 7 6 i 0 带使能控制和异步清零的8位寄存器 模块的使用注意事项

1.数据源D(7..0)一直加在寄存器的数据输入端; 2.周期性的时钟信号Clock一直加在寄存器的时钟输入端 3.使能信号Enable控制寄存器是否接受数据。当Enable = '0'时,寄存器不 接受数据,保持原来的状态不变;当Enable = '1'时,在时钟信号Clock正 跳变时,寄存器接受并保存当时D(7..0)的数据; 4.本寄存器其它方面的功能与上述的寄存器相同。 完成的参考电路图如下:dout=q 2、设计一个有左、右移位功能的8位寄存器REGSHIFT8,并仿真验证。

三、实验内容 1、通过输入数据先进行计算,并通过实验进行验证REG8X。 (1)、将清零信号Resetn(sw17)设为0,将输入信号D(sw7~sw0)设为10101010,观察输出信号Q(ledr7~ledr0)和Qb(ledg7~ledg0),观察并记录输出。 (2)、将清零信号Resetn(sw17)设为1,在时钟信号处输入一个上升沿(按下key0),观察并记录输出。 (3)、将输入信号D(sw7~sw0)设为01010101,观察并记录输出。 (4)、在时钟信号处输入一个上升沿(按下key0),观察并记录输出。 (5)、自行完善设计表格,观察并记录测试输出。 实验数据表 2、通过输入数据先进行计算,并通过实验进行验证REGSHIFT8。 (1)、测试清零信号Resetn (2)、测试移位功能 (3)、测试寄存功能 (4)、自行设计表格观察并记录测试输出。 实验数据表

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

计组-加法器实验报告

半加器、全加器、串行进位加法器以及超前进位加法器 一、实验原理 1.一位半加器 A和B异或产生和Sum,与产生进位C 2.一位全加器 将一位半加器集成封装为halfadder元件,使用两个半加器构成一位的全加器 3.4位串行进位加法器 将一位全加器集成封装为Fulladder元件,使用四个构成串行进位加法器

4.超前进位加法器(4位) ⑴AddBlock 产生并行进位链中的ti(即Cthis)和di(即Cpass),以及本位结果Sum ⑵进位链(Cmaker) 四位一组并行进位链,假设与或非门的级延迟时间为1.5ty,与非门的延迟时间为1ty,在di和ti产生之后,只需2.5ty就可产生所有全部进位

⑶超前进位加法器 将以上二者结合起来即可完成,A和B各位作为各个AddBlock的输入,低一位的进位Ci-1作为本位AddBlock的C-1的输入。各个AddBlock输出的C_this和C_pass作为对应的Cmaker的thisi和passi的输入。

二、实验器材 QuartusII仿真软件,实验箱 三、实验结果 1.串行进位加法器结果 2.超前进位加法器结果

四、实验结果分析 1.实验仿真结果显示串行加法器比超前进位加法器快,部分原因应该是电路结构优化 不到位。另外由于计算的位数比较少,超前进位加法链结构较复杂,所以优势没体现出来,反倒运作的更慢一点。当位数增加的时候,超前进位加法器会比串行的更快。 2.波形稳定之前出现上下波动,应该与“竞争冒险”出现的情况类似,门的延迟和路径 的不同导致了信号变化时到达的时间有先有后,因此在最终结果形成前出现了脉冲尖峰和低谷;另外也可能部分原因由于电路结构优化的不到位所致

西电微机原理实验报告

微机系统实验报告 班级:031214 学号:03121370 姓名:孔玲玲 地点:E-II-312 时间:第二批

实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握DOS功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC机一台。 三、实验内容 (1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能 调用完成必要提示信息的显示。 (2) 在屏幕上显示自己的学号姓名信息。 (3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到 输入“Q”或“q”时结束。 (4)自主设计输入显示信息,完成编程与调试,演示实验结果。 考核方式:完成实验内容(1)(2)(3)通过, 完成实验内容(4)优秀。 实验中使用的DOS功能调用:INT 21H 表3-1-1 显示实验中可使用DOS功能调用 AH 值功能调用参数结果 1 键盘输入并回显AL=输出字符 2 显示单个字符(带Ctrl+Break检查) DL=输出字符光标在字符后面 6 显示单个字符(无Ctrl+Break检查) DL=输出字符光标在字符后面 8 从键盘上读一个字符AL=字符的ASCII码 9 显示字符串DS:DX=串地址,‘$’为结束字符光标跟在串后面 4CH 返回DOS系统AL=返回码

四、实验步骤 (1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。 (2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。 (3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。按F9连续运行。 (4)更改数据区的数据,考察程序的正确性。 五、实验程序 DATA SEGMENT BUFFER DB '03121370konglingling:',0AH,0DH,'$' BUFFER2 DB 'aAbBcC','$' BUFFER3 DB 0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX,DA TA MOV DS,AX mov ah,09h mov DX,OFFSET BUFFER int 21h

计组课设实验报告

《计算机组成原理与系统结构》课程设计 实 验 报 告 课题:两个16位二进制数加法计算 班级: 成员: 完成日期:2013年10月11日

一:课程设计步骤 1.确定设计目标 综合考虑实验条件及自身能力水平,以及设计功能的可靠性和实用性,我们小组决定将设计目标定为“两个16位二进制数相加”。分两次分别输入两个加数的低八位和高八位,输出两个16位二进制数相加的结果。 2.确定指令系统 (1)数据格式 模型机规定数据采用定点整数补码表示,字长为8位,其格式如下: 7 6 5 4 3 2 1 0 符号尾数 (2)指令格式 模型机设计四大类指令共16条,其中包括算术逻辑指令、I/O指令、访问及转移指令和停机指令。 ①算术逻辑指令 设计九条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下: 7 6 5 4 3 2 1 0 OP-CODE RS RD 其中,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,并规定: RS或RD 选定的寄存器 00 01 10 R0 R1 R2 ②I/O指令 输入(1N)和输入(OUT)指令采用单字节指令,其格式如下: 7 6 5 4 3 2 1 0 OP-CODE addr RD 其中,addr=01时,选中“INPUT DEVICE”中的开关组作为输入设备,addr=10时,选中“INPUT DEVICE”中的数码块作为输入设备。 ③访问指令及转移指令 模型机设计两条访问指令,即存数(STA)、取数(LDA),两条颛臾指令,即无条件转移(JMP)、结果为零或有进位转移(BZC),指令格式如下: 7 6 5 4 3 2 1 0 00 M OP-CODE RD D 其中,OP-CODE为操作码,rd为目的寄存器地址(LDA、STA指令使用)。D为位移量(正负均可),M为寻址模式,其定义如下: 寻址模式有效地址E 说明 00 E=D 直接寻址

微机原理实验报告西安交通大学

西安交通大学 电子信息与工程学院自动化科学与技术系微机原理与接口技术实验报告 实验名称:微机原理与接口技术 实验者姓名: XX 实验者学号:21105040XX 所在班级:自动化1X 报告完成日期:2014年1月12日

实验一 数据传送、算术运算、循环程序结构 1、实验目的 a)熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇 编、连接、执行的过程,并利用Turbo Debugger调试汇编程序。 b)熟悉8086指令系统的数据传送指令,掌握寻址方式。 c)熟悉8086指令系统的算术运算指令。掌握循环结构汇编语言程序的编制。 2、实验内容 教材P121,第14、15题。教材P195,第6题。教材P196,第12题。 3、具体实验 第一题(P121,第14题) 设有两个8个字节长的BCD码数据BCD1及BCD2。BCD1数以1000H为首地址在内存中顺序存放;BCD2数以2000H为首地址在内存中顺序存放。要求相加后结果顺序存放在以2000H为首地址 的内存区中(设结果BCD数仍 不超过8个字节长)。 a) 实验原理 考虑两个8个字节长的 BCD码相加,首先根据地址要 求将数据放在对应的地址单 元中,然后做加法,BCD码相 加要用到调整指令,结果才 为正确的BCD数 b) 程序框图

c) 程序源代码 DATAS SEGMENT ORG1000H BCD1 DB 01H,02H,03H,04H,05H,06H,07H,88H;起始地址为1000H ORG2000H BCD2 DB 11H,12H,13H,14H,15H,16H,17H,18H;起始地址为2000H DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0 MOV CX,8 ;设置循环次数8次 CLC ;清进位CF标志 AGAIN:MOV AL,[BX+1000H] ADC [BX+2000H],AL;结果放在2000H开始的单元内 DAA INC BX LOOP AGAIN;没完成则转AGAIN循环 MOV AH,4CH INT 21H CODES ENDS END START 运行: BCD1 DB 11H,12H,13H,14H,15H,16H,17H,18H BCD2 DB 21H,22H,23H,24H,25H,26H,27H,28H 结果如下:DS:2000H为首地址的连续八个字节单元中

计组实验报告.

武汉大学计算机学院计算机科学与技术专业 CPU设计实验报告 实验名称:开放式实验CPU设计课题名称: 计算机组成原理 班级: 指导教师:徐爱萍 组长: 组员: 二零一五年三月

目录 目录 (1) 1 实验环境 (2) 1.1 Quartus Ⅱ介绍 (2) 1.2 硬件描述语言(VHDL) (3) 1.3实验的主要成果 (3) 2 实验要求 (5) 2. 1 指令格式要求 (5) 2. 2 指令流程及微信号序列分析 (6) 2.2.1 ADD指令分析 (6) 2.2.2 ADC指令分析 (7) 2.2.3 SUB指令分析 (7) 2.2.4 SBC指令分析 (7) 2.2.5 INC指令分析 (7) 2.2.6 DEC指令分析 (8) 2.2.7 SHL指令分析 (8) 2.2.8 SHR指令分析 (8) 2.2.9 MOVR指令分析 (8) 2.2.10 MOVD指令分析 (9) 2.2.11 LDRR指令分析 (9) 2.2.12 STRR指令分析 (10) 2.2.13 JMP指令分析 (10) 2.2.14 JRC指令分析 (11) 2.2.15 JRZ指令分析 (11) 2.2.16 JRS指令分析 (11) 2.2.17 CLC指令分析 (11) 2.2.18 STC指令分析 (11) 3.部件仿真实验 (11) 3.1 八个通用寄存器设计与仿真 (11) 3.1.1 设计代码 (11) 3.1.2 RTL连接图 (17) 3.1.3 仿真过程 (17) 3.2算术逻辑单元设计与仿真 (18) 3.2.1 设计代码 (18) 3.2.2 RTL连接图 (21) 3.2.3 仿真过程 (22) 4. CPU设计 (23) 4.1取指设计 (23) 4.2指令译码的设计 (25) 4.3执行部分设计 (28) 4.4存储器部分设计 (31) 4.5通用寄存器组设计 (32)

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

广工计组实验报告

计算机组成原理实验报告 课程名称计算机组成原理实验 学院计算机学院 专业班级 学号 学生姓名 指导教师 2015年 06 月20 日

计算机学院( 学号: 姓名教师评定 实验题目基础汇编语言程序设计实验 实验一:基础汇编语言程序设计实验 一、实验目的: (1)学习和了解TEC-XP+教学实验系统监控命令的用法; (2)学习和了解TEC-XP+教学实验系统的指令系统; (3)学习简单的TEC-XP+教学实验系统汇编语言程序。 二、实验设备与器材: TEC-XP+教学实验系统,仿真终端软件。 三、实验内容: 1、学习联机使用TEC-XP+教学实验系统和仿真终端软件PCEC; 2、学习使用WINDOWS界面的串口通讯软件; 3、使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容;

4、使用A命令编写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行改程序,用T、P命令单步运行并观察程序单步执行的情况。 四、实验步骤: 一、实验具体操作步骤: 1、准备一台串口工作良好的PC机; 2、将TEC-XP放在实验台上,打开实验箱的盖子,确定电源处于断开状态; 3、将黑色电源线一端接220V交流电源,另一端插在TEC--XP试验箱电源插座上; 4、取出通讯线,将通信线的9芯插头接在试验箱的串口“COM1”或“COM2”上,另一端接到PC机的串口上; 5、将TEC-XP实验系统左下方的6个黑色控制器开关置为001100,,控制开关的功能在开关上、下方有标识;开关拨向上方表示“1”,拨向下方表示“0”,“x”表示任意,其他实验相同; 6、打开电源,船形开关和5v电源指示灯亮。 7、在PC机上运行PCEC16.EXE文件,直接回车。 8、按一下“RESET”按键,再按一下“START”按键在主机上显示: TEC—2000 CRT MONITOR Version 1.0 April 2001 Computer Architectur Lab,Tsinghua University Programmed by He Jia > 二、实验注意事项: 几种常见的工作方式(开关拨到上方表示为1,拨到下方为0)

微机原理实验报告

西安交通大学实验报告 课程_ 微机与接口技术第页共页 系别__ 生物医学工程_______ __ 实验日期: 年月日 专业班级___ __组别___ __ 交报告日期: 年月日 姓名__ 学号_ _报告退发 ( 订正、重做 ) 同组人_ 教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

计组实验报告--部分

2、设计报告 2、1实验方法 本实验要完成的工作主要包括: 1、指令系统的设计 2、利用VHDL语言完成实验CPU的设计,包括通用寄存器的设计、取值部分设计、指令译 码设计、执行设计、存储器设计、程序包设计和顶层设计设计 3、在Quatus II 平台上进行仿真,并下载到TEC-CA教学实验箱上进行调试。 这三大部分为并行关系,只有在完成上一部分的基础上才能继续进行下一步,而第二大部分可以同时并行进行。 实验的主要流程图为图2.1所示。 图2.1

在指令系统和CPU逻辑设计时,主要的方法是先根据老师给的指令要求,确定CPU所要实现的功能,根据寄存器等的情况划分指令格式,然后根据功能写出指令,根据不同指令的特点将它们分组并确定操作码;接下来设想每条指令的执行过程,需要哪些硬件支持,最后确定整个CPU的逻辑结构图。 2、2总体说明 2.2.1 CPU组成部件 实验CPU由5部分组成:取指部分instru_fetch、指令译码部分decoder_unit、执行部分exe_unit、存储器部分memory_unit和通用寄存器组fegile.另外,还有一个程序包exe_cpu_components,将各底层设计实体作为元件存储,供各设计实体使用。顶层设计实体exe_cpu完成5个组成部分的链接。 GR(8位,4个寄存器),ALU(8位),时序节拍发生器timer,AR(8位),IR(8位),PC(8位)、PC(8位),RAM(8位),组合期间T1,T2,T3。逻辑控制器件controller,地址总线(8位),数据总线(8位)。 2、2、2整机原理实验图

图2.2.1 图2.2.2

计组实验报告-Debug使用进阶及80X86汇编初步

HUNAN UNIVERSITY 课程实习报告 题目:Debug使用进阶及80X86汇编初步学生姓名 学生学号 专业班级计算机科学与技术二班 指导老师 完成日期2013年4月14日

实验一(较高要求):Debug使用进阶及80X86汇编初步 一、实验目的 通过对基本要求程序的编写,了解debug的基本指令以及操作方法方法。通过对较高要求程序的编写,对寄存器、内存单元的一些复制、显示、转存等操作有了熟练的掌握,并且深刻理解debug指令的含义,执行过程。 二、实验要求 任务一: 课堂上曾书写一个求12+22+……+102的示例程序(见后面附录),请改写该程序,实现求一些毫无规律的任意数的平方和。将这些数定义在内存中,假设这些数据都是字节型的非零无符号数(即1~255),请选用合适的Debug命令定义它们,约定数据值0作为结束标记。 1、将结果放在数据寄存器中,请编写程序,并设计实验过程(用合适的debug 命令),验证程序执行的正确性; 2、若结果要求存放在内存中,请编写程序,并设计实验过程(用合适的debug 命令),验证程序执行的正确性; 注:编写程序和定义初始数据、查看程序运行结果都在Debug下直接进行。每次运行程序时请改变这些平方和数据的值以及数据元素个数,以多方验证程序正确性。 提示:程序中需要用到寄存器间接寻址方式,示例语句:MOV SI, 0200 MOV BL, [SI] 附:课堂上的示例程序

任务二: 假设有如下约束条件:一旦平方和结果超过16位字长,则报出错信息,在屏幕上显示字符串“Overflow Error!”,并停止计算终止程序。请在Debug下重新编写程序并调试,验证程序的正确性。 提示:判断结果超长可在加法指令之后,判断进位标志位CF的值,80X86指令集中条件转移指令JC或JB均可做到这点。 三、实验步骤 1、鼠标单击“开始->程序->附件->命令提示符”,打开DOS窗口,出现命令提示符,键入debug并回车,出现debug程序的提示符,一个短杆“-”。 2、开始汇编,在短杆后输入a100,并将如下所示的在记事本中写好的程序复制粘贴到dos界面中。 mov dx,0 //dx存放平方和,赋初值为0 mov si,200 //将200号内存单元给si mov bl,[si] //将si内存单元中存放的数据给bl mov al,bl //将bl的值给al mul bl //计算bl的平方 cmp al,0 //比较al和0的值,若al=0则停止循环求和 jz 0117 //跳到0117地址的命令继续执行 add dx,ax //计算dx=dx+ax jc 011e //判断是否溢出,若溢出,则跳到011e地址执行其存放的指令 inc si //si自加1 jmp 0106 //跳转到0106进行执行 mov si,240 //将240赋给si mov [si],dx //将平方和结果sx存到si所对应的内存单元中。 int 20 //中断跳转,回到jz 0117的下一步继续执行。 mov dx,0127 //将0127内存的值给dx

微机原理实验报告

微机原理实验报告实验名称:MIPS汇编程序设计 院系:电信学院 班级: 姓名: 指导老师: 一、实验目的: 1.熟悉MIPS汇编程序开发环境,学习使用Qtstim工具。知道如何查看内存空间分配。

2. 了解C语言语句与汇编指令之间的关系。 3. 掌握MIPS汇编程序设计,掌握QTSPIM的调试技术。 4. 了解MIPS汇编语言与机器语言之间的对应关系。 5. 熟悉常见的MIPS汇编指令 6. 掌握程序的内存映像。 二、实验内容 1.用汇编程序实现以下伪代码:要求使用移位指令实现乘除法运算。Int main () { Int K,Y; Int Z[50]; Y=56; For(k=0;k<50;K++) Z[k]=Y-16*(k/4+210); } 三、程序设计及分析 1.C语言分析: 有两个变量是int型,一个数组型;还有一个循环执行过程。 2.汇编程序实现分析: 首先需要定义用户数据段,获得一个内存空间作为数组空间。 再选定几个寄存器作为K,Y以及输出,其中输出输出和Y可以合用一个寄存器。 3.设计思路:

分配完空间地址后,最重要的是完成循环控制。循环控制有两个思路:可以是先判断后循环;或者是先循环后判断 即如图 slti $t2,$t0,50 #判断k 是否于50 beq $t2,$t3($t2=1循环,否则结束。) 四、程序实现及调试分析

1.汇编程序代码实现: 方法一 .data #定义用户数据段 z:.space 200 #数组为int型,大小为50,所以占内存4*50 str:.asciiz " "#输出结果之间的空隙 .text main: la $s0,z #$s0 #为数组在z[] li $t0,0 #$s1 #代表k计数,初始值为0 li $t1,56 #$t2 #代表Y,初值为56 loop: slti $t2,$t0,50 #判断k是否于50 beq $t2,$0,done #当k大于等于50,跳转结束 srl $t3,$t0,2 #k/4 addi $t3,$t3,210 #k/4+210 sll $t3,$t3,4 #16*(k/4+210) sub $t3,$t1,$t3 #y-16*(k/4+210) sw $t3,0($s0) #写进z[k] li $v0,1 #输出 addi $a0,$s0,0

计组实验报告(启停器)

河北大学计算机组成原理实验报告 学院计算机科学与技术学院年级13级专业计科学号2013434151姓名汪凡 实验日期2015.10.26 实验地点c1-228指导老师张旭东实验项目实验6.8.1 启停电路成绩 一、实验目的: 通过该实验,加深自己对计算机“时标系统”相关知识的理解与把握,深入了解计算机能够得以自动化工作的基础。同时,利于对于计算机及类似设备的“时标系统”的问题特殊性、解决问题的基本思路、可用方法与技术等有着系统的理解与把握。 二、实验环境: PC个人计算机、Windows XP操作系统、Quartus II集成开发环境软件、TEC-CA实验箱。 三、实验要求: 按照实验6.8.1介绍的方法与流程,完成启停电路和节拍序列发生器的设计,在实验箱上实现操作。 四、实验原理及知识要点: 单周期“·M4 具有维持—阻塞功能的启停线路

1. “停止”工作状态 当实验电路处于“停止”工作状态时,“维持阻塞电路”中的“启停触发器”处于“停机”状态,“维持阻塞电路”输出“清0”信号到“二进制计数器” ,使计数器清0,M1~M8 均为无效状态,所有显示灯均不亮。 由于“维持阻塞电路”不输出M’到“二进制计数器” ,计数器不计数。 2. “单周期”工作状态 在实验电路处于“停止”工作状态时,若“单周期/连续”开关被拨到“单周期”位置,按A1,电路即处于“单周期”工作状态。 当“维持阻塞电路”收到A1 信号后,“启停触发器”被置为“启动”状态,“维持阻塞电路”向“二进制计数器”发出“清0”无效和系列M’ 。在这两个信号的共同作用下,“二进制计数器”开始计数,“组合译码网络”的输出使相应的显示灯显示设定的时序信号序列。 当“二进制计数器”的计数使“组合译码网络”产生M4时,图中的“与非”门输出变为“0” 。此信号一方面使实验台上的“停机”相关电路工作,结束M’ 的发送,同时,使“维持阻塞电路”中的“启停触发器”的状态由“启动”变为“停机”状态。这使得“维持阻塞电路”发送给“二进制计数器”的“清0”信号变为“有效” ,而使M’变为“无效” 。在其作用下,“二进制计数器”被清0。电路由此变为“停止”工作状态。 3. “连续”工作状态 当“单周期/连续”开关被拨到“连续”位置,并按一下A1 微动开关后,实验电路被置于“连续”工作状态。 在“维持阻塞电路”中的“启停触发器”在A1 信号的作用下被置为“启动”状态后,“维持阻塞电路”连续地向“二进制计数器”发出信号,使之进行计数,如“单周期”状态那样,“组合译码网络”依序输出系列时序控制信号,相应的显示灯被规则的点亮。 在“二进制计数器”的计数使“组合译码网络”产生M4时,由于图中的“与非”门的连接到“单周期/连续”开关的一端被置为低电位,其输出不能使“维持阻塞电路”中的“启停触发器”改变状态,因而“二进制计数器”继续处于计数状态,当其计到1111后,继续从0000计数,“组合译码网络”输出下一个系列的时序控制信号。 在实验电路“连续”工作的过程中,若将“单周期/连续”开关拨到“单周期” ,则仅当本工作周期中的M4 出现时才能使“维持阻塞电路”中的“启停触发器”的状态发生变化,由此,如“单周期”工作方式那样,使电路变为“停止”工作状态。 这就是说,当一个序列的时序控制信号开始产生后,不管人们在什么时候将“单周期/连续”开关拨到“单周期”位置(相当于实际机器中的“停机”信号),电路都必须等到一个周期的时序控制信号全部发出后才能停止时序控制信号的发出。 五、实验步骤及结果:

微机原理实验报告

微机原理实验报告 班级:自动化72 组员梁慕佳 07054031 张乐 07054033 张林鹏 07054034

实验一:8255 并行接口实验 1 实验目的 1. 学习并掌握8255 的工作方式及其应用; 2. 掌握8255 典型应用电路的接法。 2 实验设备 PC机一台,TD-PITE 实验装置一套。 3 实验内容 1. 基本输入输出实验。编写程序,使8255 的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。 2. 流水灯显示实验。编写程序,使8255 的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。 4 实验原理 并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图2-6-1 所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2-6-2所示。 图2-6-1 8255内部结构及外部引脚图

图2-6-2 8255控制字格式 5 实验步骤 1. 基本输入输出实验 本实验使8255 端口A工作在方式0 并作为输入口,端口B工作在方式0 并作为输出口。用一组 开关信号接入端口A,端口B 输出线接至一组数据灯上,然后通过对8255 芯片编程来实现输入输出 功能。具体实验步骤如下述: (1)实验接线图如图2-6-3所示,按图连接实验线路图; (2)编写实验程序,经编译、连接无误后装入系统; (3)运行程序,改变拨动开关,同时观察LED 显示,验证程序功能。 图2-6-3 8255基本输入输出实验接线图 程序如下: ;========================================================= ; 文件名: A82551.ASM ; 功能描述: A口为输入,B口为输出,将读入的数据输出显示 ; IOY1

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (8) 实验5 循环程序实验 (10) 实验6 由1 到100 求和实验 (12) 实验7 求表中正数_负数_0 的个数实验 (13) 实验8 数据排列实验(冒泡排序) (15) 实验9 系统功能调用(大小写转换) (17) 实验10 阶乘(递归运算) (19) 实验11 ProteusIO工程文件的建立 (20) 实验12 IO口读写实验(245、373) (21) 实验13 8255 接口实验 (23) 实验14 声光报警 (24) 实验总结 (27)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序的关联。 10.将“存储器”中地址改为1000:0100,并将从其开始的连续10个单元的内容改为55H。 实验内容2:运行范例 在模拟器编辑窗口中 1.点击典型范例 2.选择:hellow,word程序,编译,运行,观察结果。 修改程序(不要改原有DEMO程序),输出学号,姓名(汉语拼音或英文名) https://www.doczj.com/doc/9a13166954.html,pare numbers程序,编译,运行,观察结果。 修改程序(不要改原有DEMO程序),将比较对象改为7,编译,运行,观察结果。 4.欣赏其它DEMO范例

相关主题
文本预览
相关文档 最新文档