西电软院算法上机报告

西电软院算法上机报告
西电软院算法上机报告

算法上机报告

学号:13121234

姓名:陈恒

实验一

一、实验内容

1.编写程序实现书上

2.

3.7:运行时间为nlgn的算法确定n个整数的集合中是否存在两个数的和刚好为x。

先对n个整数的集合进行排序。使用快速排序,时间复杂度即是nlgn,然后计算两数之和,可以知道快速排序(从小到大)后第一个元素begin为最小,最后一个元素end最大。所以用最小和最大相加和x比较,大于x即是end太大,小于x就是begin太小。一直循环直到begin==end时还没有就不存在了。

2.实现优先级队列。用堆排序和一个结构体实现即可。Java实现用类代替结构体。并未编写测试用例。

3.实现快速排序。问题1就是快速排序。

最大数比较是有序的数组,例如123456789.最小的比较是每次partition都能分成恰好两半,例如132。

n个相同的数快排比较计算次数n*(n-1)/2.原理:每次分一半都要从头到尾(比较n-1次)比较一次,最后分到每组只有2个为止(即是分n/2次)。

4.找两个已排序不同数组之间第k大的数。

有a,b两个数组。把 A ,B平均分为前后两个部分,前部分有 x 个元素,后部分有 n-x 个元素(比如,由于 A 是有序的,所以后一部分的所有元素大于前一部分)。A[x] = A的后一部分的第一个元素)。

然后使用分枝-限界法和递归。每次比较k和a.size/2+b.size/2以及a[x]于b[x]的大小。进而缩小其中一个数组一半大小。

实验截图:

第一个:题目1和3 第二个:题目4,优先级队列没有写主方法

二、实验心得

本次实验对排序几个关键算法进行了实现,还练习了别的几个问题。本来算法是很简单的,但是由于数组下标的原因总是出现越界问题。说明在具体编程的时候还缺乏思考,需要多加训练。还有就是选择分支的时候需要写下来不然光去想是很难把情况完全列出来的。

实验二

一、实验内容

以动态规划算法解决以下几个问题

动态规划思想是找到并求解问题的最优子结构,然后递归定义最优子结构,再用自底向上的方法去构建一张表,最后用查表找到解。

1.矩阵连乘

最优子结构的递归求解公式为:

题目运行求解:

2.LCS最长公共子序列

最优子结构的递归求解公式为:

题目求解运行:

3.LcsubString 最长公共子字符串

4.求解两点间最短路径,写的时候没有用迪杰斯特拉算法,用的floyd算法,后来补了一个迪杰斯特拉。

由于实验题目太长输入太繁琐,自己输入了一组测试数据:

一行“i j k”这样的输出表示i到j的长度为k没有中间节点

一行“i j k ‘\n’m”这样的输出表示i到j的长度为k经过节点m。

Floyd算法截图:

二、实验心得

本次实验主要是练习动态规划,最开始的时候我以为两个lcs是一个题目,后来想到子字符串和子序列是不一样的。最后一个求0-15的最短路径。由于矩阵太大没有进行输入,但验证得知程序没有问题的。问题主要还是在于数组下标对齐上。然后具体编程前先看好伪代码能够更快速的实现。

实验三

一、实验内容

用贪心算法解决这些问题。贪心算法的思想是找到每一步的当前最优解,但不一定是整体最优解。最后遍历或是递归完成找到解。

1.0-1背包和分数背包问题。使用贪心法求解每次取出满足重量的价重比最高的那个。可以先按照价重比排序,然后每次取数组的下一个,验证是否满足重量即可。

题目运行:

2.简单任务调度。同时到达?这是我的理解,因为没有说开始时间之类的。找到当前运行时间最短的任务运行即可。不用排序的话就是两次循环,内层循环找到当前存在的最短任务,外层循环控制任务剩余数。伪码就不写了。

题目运行:

3.单源点最短路径。

Bellman ford算法解决含负路径的矩阵距离。但是不可以有负回路。如果遇到负回路就输出错误信息。

实验题目运行:

4.所有成对点最短路径

这在第二次实验中实现的算法。

这里贴的是迪杰斯特拉的图:

二、实验心得

理解了动态规划和贪心算法的区别与相同点以及各自的特点。对于动态规划而言:全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解。条件是最优子结构;重叠子问题。方法是自底向上构造子问题的解。对于贪心算法而言。条件是每一步的最优解一定依赖上一步的最优解。方法是从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。但是贪心算法不能保证最后的解一定是最优解。而且不能解最大最小问题。这两种算法都是递推算法。对子问题进行修剪。两种算法要求问题都具有的一个性质就是“子问题最优性”。即组成最优解的每一个子问题的解,对于这个子问题本身肯定也是最优的。

实验四

一、实验内容

回溯法采用试错的思想,简单地说就是穷举法,但是遇到不能满足条件的时候就取消上一步甚至取消好几步。通常采用递归实现。

1.回溯法解0-1背包。对表空间不断尝试,建立解空间树,输出最大的解即可。算法思想:

当前取得背包value的大小 current

当前取得背包weight和要取得的下一个物品的的大小 weight Choose(number)

If(number>=背包.size)

max=max

If(weight<=100) 加入该物品 choose(number+1)减去该物品

Choose(number+1)

2.八皇后问题。用8个1去填8*8的矩阵,每行每列和对角线上都不能重复出现1。同样是不断尝试解空间,用限定条件去判断该解是否可行,然后递归求解,当有合适解时输出。

递归:以列为基础对该列每一个元素进行判断,满足判断要求

即可继续递归,反之抛弃该分支。当所有元素都遍历完,输出解组。

判断:不在同一行或是对角线或是同一列上。

实验运行图示:

0-1背包:

八皇后:

二、实验心得

这次实验是对回溯法的实践。回溯法如果没有了限制条件就成了穷举法,所以如何设置限制条件促使解空间缩小是回溯法的关键。八皇后问题是回溯法的经典问题。解决这些问题使得我更加理解了回溯法。也使得代码编写的能力更强了。

杭电计组实验报告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.360docs.net/doc/a614788830.html,pare numbers程序,编译,运行,观察结果。 修改程序(不要改原有DEMO程序),将比较对象改为7,编译,运行,观察结果。 4.欣赏其它DEMO范例

相关文档
最新文档