计算机实验图

合集下载

计算机图形学实验一

计算机图形学实验一

计算机图形学实验一标准化工作室编码[XX968T-XX89628-XJ668-XT689N]实验一二维基本图元的生成与填充实验目的1.了解并掌握二维基本图元的生成算法与填充算法。

2.实现直线生成的DDA算法、中点算法和Bresenham算法。

3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。

二. 实验内容和要求1.选择自己熟悉的任何编程语言, 建议使用VC++。

2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。

3.实现生成直线的DDA算法、中点算法和Bresenham算法。

4.实现圆弧生成的中点算法。

5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。

6.实现一般连通区域的基于扫描线的种子填充算法。

7.将生成算法以菜单或按钮形式集成到用户界面上。

8.直线与圆的坐标参数可以用鼠标或键盘输入。

6. 可以实现任何情形的直线和圆的生成。

实验报告1.用户界面的设计思想和框图。

2.各种实现算法的算法思想。

3.算法验证例子。

4.上交源程序。

直线生成程序设计的步骤如下:为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。

如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。

图1-1 基本图形生成的程序运行界面2.创建工程名称为“基本图形的生成”单文档应用程序框架(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。

(2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。

(3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。

(4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。

(5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。

实验一物理层实验

实验一物理层实验

实验一物理层实验一、实验目的1. 进一步理解并掌握物理层的定义和功能。

2. 了解并掌握物理层的特性。

3. 掌握物理层典型的接口规范EIA RS 232C的功能特性,并利用RS 232C通信接口实现两台PC间会话的基本通信程序。

4. 进一步掌握Windows下事件编程机理,掌握VC++/C++Builder中用户自定义事件、消息的使用方法,以及消息响应函数的编写方法。

二、实验内容1.观察实验用串行口连线的连接情况。

2.按图1-5(a)所示的计算机网络原理实验物理连接模型,将PC连接起来。

3.仔细阅读TSerialPort类的定义及实现的源代码。

4.设计基本串行通信程序,在两台通过RS 232C串行口连接的PC间传输单个字符。

(a)(b)图1-5网络原理实验物理连接方法三、相关知识计算机或终端与调制解调器间的接口是物理层协议的一个实例,其中典型的物理层标准是美国电子工业协会EIA提出的RS-232C。

在数据通信中,数据终端设备(DTE)是指具有一定数据处理能力及收发数据能力的设备,如计算机。

数据电路端接设备(DCE)是指在DTE和传输线路之间提供信号变换和编码功能,并负责建立、保持和释放数据链路的连接,如MODEM。

RS232就是DTE和DCE就是之间的接口标准,其主要内容包括:机械特性:采用25芯连接器,DTE为插头,DCE为插座。

电气特性:采用非平衡型电气特性,低于-3V为“1”,高于+4V为“0”,最大20Kbps,最长15m。

功能特性:定义了21条线,许多子集,基本与CCITT V.24兼容。

规程特性:对不同的功能子集,有不同的规程。

RS-232C有14中不同的接口类型,适合于单工、半双工、全双工、同步、异步。

RS-232C的缺点是传输性能低,距离短,速率低。

1977年以RS-232C为基础,进行改进,提出RS-449。

之后重新设计,提出了X.21接口规范。

EIA RS-232C采用25针连接器(DB-25),图1-2给出了25针连接器的连接方法。

计算机图形学实验-实验七--三维立方体的旋转

计算机图形学实验-实验七--三维立方体的旋转

贵州大学实验报告
学院:计算机科学与信息学院专业:软件工程班级: 102班姓名学号实验组实验时间指导教师成绩实验项目名称实验七三维立方体的旋转

验目的了解并掌握三维立方体的绘制和显示并通过按键控制其旋转,每次旋转150

验要求根据本实验的特点、要求和具体条件,了解并掌握三维立方体的绘制和显示,并通过按键控制其旋转,每次旋转150,成功编写测试代码进行实验。

绘制一个三维立方体。

实验原理Java3D
在java3D中坐标轴的显示如下所示:Java3D的编程思想显示如下:。

计算机网络实验报告-局域网设计图

计算机网络实验报告-局域网设计图

switch (con fig-if)#exit计算机网络实验报告 局域网设计图:第一步:交换机的VLAN 配置 交换机1: 划分VLANswitch #con figure term inal !进入交换机全局配置模式switch (con fig)#vla n 1!switch #show vlan ! 查看 VLAN 划分情况 将接口分配到VLANswitch (con fig)#i nterface fastEthernet 0/1-21 ! 配置模式switch (con fig-if)#switch port access vla n 1 !计算机网络实验报告-局域网设计图switch (con fig-vla n)#n ame test1 ! 将 vlan 1 命名为test1r M 31A"创建vlan 1进入1~21的接口将1~21端口加入vlan操作步骤ji.'.ioooefl_______ 十一_ 甬“兀山?宾 口?氐1 !]_雯 汙 % 3EJ丿汇^轴I(config-if)#endswitch #show vlan !查看VLAN 的端口划分情况Switch (config)# interface fastethernet 0/21 Switch (config-if)# switchport mode trunk (config-if)#endswitch #show vlan ! 查看VLAN 的端口划分情况交换机 2:(config)#vlan 2 ! 创建 vlan 2(config)#vlan 2 ! 创建 vlan 2switch (config-vlan)#name test3!将 vlan 3 命名为 test3 switch(config-vlan)#end switch #show vlan ! 查看VLAN 划分情况 switch (config)#interface fastEthernet 0/1-11 ! 进入 1-11 的接口配置模式 switch (config-if)#switchport access vlan 2! 将 1-11 端口加入 vlan 2switch (config)#interface fastEthernet 0/11-21! 进入 11-21 的接口配置模式 switch (config-if)#switchport access vlan 3 ! 将 11-21 端口加入 vlan 3switch (config-if)#exit Switch (config)# interface fastethernet 0/11 Switch (config-if)# switchport mode trunk 〜配置 trunk 端口 switch〜配置trunk 端口 switchswitch #configure terminal !进入交换机全局配置模式 switchswitch (config-vlan)#name test2!将 vlan 2 命名为 test2 switch第二步: 路由器配置路由器1:在路由器Router1 上配置快速以太网口的IP 地址Router1#configure terminalRouter1(config)#interface FastEthernet 0/0 ! 进入以太网0 口配置状态或Router1(config)#interface FastEthernet 1/0Router1(config-if)#ip address 210.100.10.33 255.255.255.224 ! 为以太网0 口配置地址Router1(config-if)#no shutdown ! 打开以太网0 口Router1(config-if)#end在路由器Routerl上配置广域网口的IP地址和时钟频率(假设Routerl为DCE端)Router1#conRouter1(config)#interface serial 2/0 ! 进入广域网0 口配置状态或Router1(config)#interface serial 1/2Router1(config-if)#ip address 210.100.10.65 255.255.255.0 ! 为广域网0口配置地址Router1(config-if)#clock rate 64000 ! DCE 端需设置端口时钟频率Router1(config-if)#no shutdown ! 打开广域网0 口Router1(config-if)#end为Router1 添加静态路由Router1#conRouter1(config)#ip route 210.100.10.96 255.255.255.224 210.100.10.66Router1(config)#ip route 210.100.10.128 255.255.255.224210.100.10.66 ! 添加静态路由Router1(config)#endRouter1#show ip route ! 显示路由表路由器2在路由器2上配置接口F0的子接口Router (config)# interface fastethernet 1/0Router (config-if)# no ip address Router (config-if)# no shutdownRouter (config-if)# exitRouter (config)# interface fastethernet 1/0.2 〜进入子接口F0.2配置模式Router (config-subif)# encapsulation dotlq 2 〜封装802.1Q 并指定Vlan 号2Router (config-subif)# ip address 210.100.10.97 255.255.255.224 〜配置子接口F0.2IP 地址Router (config-subif)# exitRouter (config)# interface fastethernet 1/0.3 〜进入子接口F0.3 配置模式Router (config-subif)# encapsulation dotlq 3 〜封装802.1Q 并指定Vlan 号3Router (config-subif)# ip address 210.100.10.129 255.255.255.224配置子接口F0.3IP 地址Router (config-subif)# end在路由器 2 上配置广域网口的IP 地址Router2#conf或Router2(config)#interface Router2(config)#interface serial 2/0 serial1/2 Router2(config-if)#ip address210.100.10.66255.255.255.224Router2(config-if)#no shutdown Router2(config-if)#end为路由器 2 添加静态路由Router2#conConfiguring from terminal, memory, or network [terminal]?Enter configuration commands, one per line. End with CNTL/Z.Router2(config)#ip route 210.100.10.32 255.255.255.224 210.100.10.65 Router2(config)#endRouter2#show ip route。

计算机组成原理实验一运算器组成实验

计算机组成原理实验一运算器组成实验

实验一 运算器组成实验一、实验目的1.熟悉双端口通用寄存器堆的读写操作。

2.熟悉简单运算器的数据传送通路。

3.验证运算器74LS181的算术逻辑功能。

4.按给定数据,完成指定的算术、逻辑运算。

二、实验电路ALU-BUS#DBUS7DBUS0Cn#C三态门(244)三态门(244)ALU(181)ALU(181)S3S2S1S0MA7A6A5A4F7F6F5F4F3F2F1F0B3B2B1B0Cn+4CnCnCn+4LDDR2T2T2LDDR1LDRi T3SW-BUS#DR1(273)DR2(273)双端口通用寄存器堆RF(ispLSI1016)RD1RD0RS1RS0WR1WR0数据开关(SW7-SW0)数据显示灯A3A2A1A0B7B6B5B4图3.1 运算器实验电路LDRi T3AB三态门R S -B U S #图3.1示出了本实验所用的运算器数据通路图。

参与运算的数据首先通过实验台操作板上的八个二进制数据开关SW7-SW0来设置,然后输入到双端口通用寄存器堆RF 中。

RF(U54)由一个ispLSI1016实现,功能上相当于四个8位通用寄存器,用于保存参与运算的数据,运算后的结果也要送到RF 中保存。

双端口寄存器堆模块的控制信号中,RS1、RS0用于选择从B 端口(右端口)读出的通用寄存器,RD1、RD0用于选择从A 端口(左端口)读出的通用寄存器。

而WR1、WR0用于选择写入的通用寄存器。

LDRi 是写入控制信号,当LDRi=1时,数据总线DBUS上的数据在T3写入由WR1、WR0指定的通用寄存器。

RF的A、B端口分别与操作数暂存器DR1、DR2相连;另外,RF的B端口通过一个三态门连接到数据总线DBUS上,因而RF中的数据可以直接通过B端口送到DBUS上。

DR1(U47)和DR2(U48)各由1片74LS273构成,用于暂存参与运算的数据。

DR1接ALU 的A输入端口,DR2接ALU的B输入端口。

计算机组成原理运算器实验

计算机组成原理运算器实验

实验一运算器实验计算机的一个最主要的功能就是处理各种算术和逻辑运算,这个功能要由CPU中的运算器来完成,运算器也称作算术逻辑部件ALU。

本章首先安排一个基本的运算器实验,了解运算器的基本结构,然后再设计一个加法器和一个乘法器。

一、实验目的(1) 了解运算器的组成结构。

(2) 掌握运算器的工作原理。

二、实验设备PC机一台,TD-CMA实验系统一套。

三、实验原理本实验的原理如图1-1所示。

运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A 和暂存器B,三个部件同时接受来自A和B的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如ARM),各部件对操作数进行何种运算由控制信号S3…S0和CN来决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为ALU的输出。

如果是影响进位的运算,还将置进位标志FC,在运算结果输出前,置ALU零标志。

ALU中所有模块集成在一片CPLD中。

逻辑运算部件由逻辑门构成,较为简单,而后面又有专门的算术运算部件设计实验,在此对这两个部件不再赘述。

移位运算采用的是桶形移位器,一般采用交叉开关矩阵来实现,交叉开关的原理如图1-2所示。

图中显示的是一个4×4的矩阵(系统中是一个8×8的矩阵)。

每一个输入都通过开关与一个输出相连,把沿对角线的开关导通,就可实现移位功能,即:(1) 对于逻辑左移或逻辑右移功能,将一条对角线的开关导通,这将所有的输入位与所使用的输出分别相连,而没有同任何输入相连的则输出连接0。

(2) 对于循环右移功能,右移对角线同互补的左移对角线一起激活。

例如,在4位矩阵中使用‘右1’和‘左3’对角线来实现右循环1位。

(3) 对于未连接的输出位,移位时使用符号扩展或是0填充,具体由相应的指令控制。

使用另外的逻辑进行移位总量译码和符号判别。

D[7..0]IN[7..0]图1-1 运算器原理图运算器部件由一片CPLD实现。

计算机组成原理实验补充实验指导-实验1、2

计算机组成原理实验补充实验指导-实验1、2

实验一、实验箱介绍与DEBUG简单使用一、实验目的1)了解实验箱的构成2)掌握模型机的结构框图3)学会DEBUG的简单使用二、实验内容1.实验箱介绍图1-1 计算机组成原理实验箱图1-1给出了实验箱的结构图,构成部分均在实验箱的印刷电路板上标注,如:ALU Uint(算逻单元)、Input Device Unit(输入单元)、Switch Unit(控制开关单元)、Bus Unit(总线单元)……,同学们要结合计算机的组成原理,确定运算器、控制器、存储器、输入设备、输出设备等在实验箱中的位置。

2.模型机的框图图1-2 模型机框图图1-2给出了计算机模型机的框图,同学们在做实验时,要体会实验中数据的流向,以便对整机有一个完整的认识。

3.DEBUG的简单使用DEBUG须在DOS环境下运行。

具体操作可以在Windows操作系统的“开始”菜单的“运行”对话框中输入“CMD”(命令command)如图1-3所示。

图1-3 Windows的运行窗口Windows的“DOS”模式,如图1-4所示。

图1-4 Windows下的“DOS”模式输入命令DEBUG(调试),见图1-5.图1-5 DEBUG调试窗口DEBUG命令是在“-”下,由键盘键入的。

每条命令以单字母命令符开头,然后是命令的操作参数,操作参数与命令符之间用空格隔开,操作参数与操作参数之间用空格或逗号隔开,命令的结束符是回车键。

命令及参数的输入可以是大小写的结合。

Ctrl+Break键可中止命令的执行。

Ctrl+Num Lock键可暂停屏幕卷动,按任一键继续。

所用数均为十六进制数,不用加H。

有关DEBUG中的D(显示)、R(寄存器)、U(反汇编)、G(执行)和Q(退出)等命令已在前面讲过了。

下面介绍本实验用到的DEBUG的命令:(1)A-汇编,用于输入汇编语言源程序(2)g-运行,运行用A命令编写的汇编语言程序(3)e-编辑,用于修改计算机内存中存储单位的数据(4)d-显示,用于显示计算机内存中存储单位的数据(5)q-退出,用于退出DEBUG的状态,到DOS提示符下。

计算机组成原理实验

计算机组成原理实验

第一段) (2)检验 )检验DR1、DR2的数据输入是否正确 (P3 第一段) 、 的数据输入是否正确
功能表验证举例: 功能表验证举例: S3~S0=0100 教材P31 ALU功能表 教材 功能表 M =0(算术运算)Cn=1(无进位)A加(A·B反) (算术运算) (无进位) 加 A=01100101 B反=01011000 B=10100111B (A·B反)=01000000(逻辑与) (逻辑与)
排线连接时注意排线的 颜色,中间不要扭转。 颜色,中间不要扭转。
ALU单元与二进制控制信号开关之间的连接: 单元与二进制控制信号开关之间的连接: 单元与二进制控制信号开关之间的连接 S3~S0、Cn、M、LDDR1、LDDR2、ALU-B 、 、 、 、 、 数据单元SW-B与控制信号开关单元之间的连接。 与控制信号开关单元之间的连接。 数据单元 与控制信号开关单元之间的连接
存储器模块( 2. 存储器模块(PRAM UNIT) ) AUJ5 静态RAM6116 静态 6116 74LS273 地址寄存器 74LS161 PC寄存器 寄存器 ADJ6
地址指示灯 AD7~AD0
3. 微控器模块(MICRO-CONTROLLER UNIT) 微控器模块( ) E2PROM 2816 MK23~MK0 MD23~MD0 UA5~UA0 控存( 片 位 控存(3片,24位) 24位微代码输入开关 位微代码输入开关 24位数据指示灯 位数据指示灯 6位微地址指示灯 位微地址指示灯
时序电路( 4. 时序电路(STATE UNIT) ) Ø 时钟源 START KK2 微动开关 微动开关
5. 数据 地址开关 数据/地址开关 SWJ3 数据/地址排针 数据 地址排针 D7~D0 数据/地址指示灯及开关 数据 地址指示灯及开关 指示灯灭—— 1 指示灯灭 指示灯亮—— 0 指示灯亮

计算机组成原理实验(师大)

计算机组成原理实验(师大)
• 控制信号输入 • 控制线路连接 • 集成电路 • 时钟产生
。。。
B区 – 处理区
• 总线 • 运算 • 存储 • 微程序
A区 – I/O区
• 芯片控制信号输入 • 数据输入 • 扩展
功能模块
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
此时将总线BUSD0-BUSD7上的启动地址接入程序计数器。 • LOAD = 0, 74LS161的输出端数据置为输入端数据,完成初始化启动地址。 • U 40由PCB’控制,PCB’ = 0时,初始地址输出到内部数据总线上。
程序计数器 PC
• 运行时 – 计数
• LOAD = 1,PC为计数状态,取下条指令或取指令的下一个字节. • U38为计数器低四位,U39为高四位,进位输出信号TC接仅为输入端CET • 运行时 CLR = 1。LDPC =1, T4正跳, PC = PC+1;
自动方式下,由控制CPU提供。
系统控制开பைடு நூலகம்单元
• 系统总清
低电平时总清。 • 手动 (相对于联机) • 主存储器工作状态开关 (读、写、运行) • SWC = 0, SWA = 0, 读主存储器; • SWC = 0, SWA = 1,写存储器; • SWC = 1, SWA = 1, 运行主存储器中的程序。 • 运行方式控制
计算机组成原理实验
曲冠南 2013-2014春季学期
实验机软硬件介绍
• 硬件 • 8位、16位字长兼容 • 总线结构 • 基本功能模块 • 扩展模块 • 控制台 • 软件
• 集成调试软件
• 微程序载入 • 窗口显示程序、微程序、微指令

计算机图形学实验四

计算机图形学实验四

太原工业学院实验报告memDCmemDC.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,否则是黑色memDC.SetMapMode(MM_ANISOTROPIC);//memDC自定义坐标系memDC.SetWindowExt(rect.Width(),rect.Height());memDC.SetViewportExt(rect.Width(),-rect.Height());memDC.SetViewportOrg(rect.Width()/2,rect.Height()/2);rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);DrawObject(&memDC);//向memDC绘制图形pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,-rect.Width()/2,-rect.Height()/2,SRCCOPY);//将内存memDC中的位图拷贝到显示pDC中memDC.SelectObject(pOldBitmap);//恢复位图NewBitmap.DeleteObject();//删除位图S}(2)定义点表、面表、透视变换及其参数的初始化:void CTestView::ReadPoint()//点表{//顶点的三维坐标(x,y,z),立方体边长为2adouble a=150;P[0].x=-a;P[0].y=-a;P[0].z=-a;P[1].x=+a;P[1].y=-a;P[1].z=-a;P[2].x=+a;P[2].y=+a;P[2].z=-a;P[3].x=-a;P[3].y=+a;P[3].z=-a;P[4].x=-a;P[4].y=-a;P[4].z=+a;P[5].x=+a;P[5].y=-a;P[5].z=+a;P[6].x=+a;P[6].y=+a;P[6].z=+a;P[7].x=-a;P[7].y=+a;P[7].z=+a;}void CTestView::ReadFace()//面表{//面的顶点数和面的顶点索引F[0].SetNum(4);F[0].vI[0]=4;F[0].vI[1]=5;F[0].vI[2]=6;F[0].vI[3]=7;//前面F[1].SetNum(4);F[1].vI[0]=0;F[1].vI[1]=3;F[1].vI[2]=2;F[1].vI[3]=1;//后面F[2].SetNum(4);F[2].vI[0]=0;F[2].vI[1]=4;F[2].vI[2]=7;F[2].vI[3]=3;//左面F[3].SetNum(4);F[3].vI[0]=1;F[3].vI[1]=2;F[3].vI[2]=6;F[3].vI[3]=5;//右面F[4].SetNum(4);F[4].vI[0]=2;F[4].vI[1]=3;F[4].vI[2]=7;F[4].vI[3]=6;//顶面F[5].SetNum(4);F[5].vI[0]=0;F[5].vI[1]=1;F[5].vI[2]=5;F[5].vI[3]=4;//底面}void CTestView::InitParameter()//透视变换参数初始化{k[1]=sin(PI*Theta/180);k[2]=sin(PI*Phi/180);k[3]=cos(PI*Theta/180);k[4]=cos(PI*Phi/180);k[5]=k[2]*k[3];k[6]=k[2]*k[1];k[7]=k[4]*k[3];k[8]=k[4]*k[1];}void CTestView::PerProject(CP3 P)//透视变换{CP3 ViewP;ViewP.x=k[3]*P.x-k[1]*P.z;//观察坐标系三维坐标ViewP.y=-k[8]*P.x+k[2]*P.y-k[7]*P.z;ViewP.z=-k[6]*P.x-k[4]*P.y-k[5]*P.z+R;ScreenP.x=d*ViewP.x/ViewP.z;//屏幕坐标系二维坐标ScreenP.y=d*ViewP.y/ViewP.z;}(3)绘制立方体线框:void CTestView::DrawObject(CDC* pDC)//绘制立方体线框{CP2 t;CLine *line=new CLine;for(int nFace=0;nFace<6;nFace++)//面循环{for(int nPoint=0;nPoint<F[nFace].vN;nPoint++)//顶点循环{PerProject(P[F[nFace].vI[nPoint]]);if(0==nPoint){line->MoveTo(pDC,ScreenP);t=ScreenP;}elseline->LineTo(pDC,ScreenP);}line->LineTo(pDC,t);//闭合多边形}delete line;}(4)一点、两点、三点透视:void CTestView::OnOnepoint(){// TODO: 在此添加命令处理程序代码AfxGetMainWnd()->SetWindowText(CString("一点透视"));KillTimer(1);bPlay=FALSE;Phi=90;Theta=0;InitParameter();Invalidate(FALSE);}void CTestView::OnTwopoint(){// TODO: 在此添加命令处理程序代码AfxGetMainWnd()->SetWindowText(CString("二点透视"));KillTimer(1);bPlay=FALSE;Phi=90;Theta=30;InitParameter();Invalidate(FALSE);}void CTestView::OnThreepoint(){// TODO: 在此添加命令处理程序代码AfxGetMainWnd()->SetWindowText(CString("三点透视"));KillTimer(1);bPlay=FALSE;Theta=45;Phi=45;InitParameter();Invalidate(FALSE);}运行结果:一点透视:两点透视:三点透视:实验拓展:使用图标按钮旋转立方体的透视投影图。

(计算机组成原理)实验一运算器实验

(计算机组成原理)实验一运算器实验

D
红色:运算器控制信号
BUS UNIT
蓝色:器件中信号
运算器电路图
M
S3
当为减
S2
法算术
S1
运算时
S0
输出1
ALU TO BUS
D7-D0
ALU-B
B7 B6 B5 B4 B3 B2 B1 B0 +5
A7
A6
A74LS2455
A4
A3
A2
A1
DIR E
A0
+5 +5
ZI D SET Q
1K
Q
CLR
Ci
返回
CN+4 F3 F2 F1 F0
S3
S2
ALU(74LS181)
S1 S0
M
CN
A3 A2 A1 A0 B3 B2 B1 B0
F3 F2 F1 F0
S3
S2
ALU(74LS181)
S1 S0
M
CN+4
A3 A2 A1 A0 B3 B2 B1 B0CN
S3 S2 S1 S0 M
Cn181
DA1,DA2:两片74LS273
T4 T1 B-IR
I3-I0
寄存器 译码
B-R0
MA6 -MA0
B-R1 B-R2
B-R3
R0-B
R1-B
R2-B
MA6-MA0
R3-B
D6-D0
J1
I7-I2
T1 微地址锁存器 OE CLK Q6-Q0 CLR
|
J5
FZ
指令译码器
FC
INT
T4 KA
7
KB
Q6-Q0

计算机图形学实验代码及截图

计算机图形学实验代码及截图

目录实验一:OpenGL基础知识 0实验二 OpenGL中的建模与变换 (1)实验三 OpenGL中的光照 (4)实验四 OpenGL中的拾取 (7)实验五 OpenGL中的纹理映射 (10)实验一:OpenGL基础知识一、实验目的1、建立Windows系统下的OpenGL实验框架。

2、学习理解OpenGL工作流程。

二、实验环境⒈硬件:每个学生需配备计算机一台。

⒉软件:Visual C++;三、实验内容1、建立非控制台的Windows程序框架。

2、建立OpenGL框架。

3、建立OpenGL框架的类文件。

4、完善Windows框架。

5、理解程序间的相互关系。

四、实验要求1、学习教材第2章的内容。

2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。

3、运行结果应该与教材中的相关实例相符。

4、编译第2章的框架代码,修改背景色、窗口标题。

五、程序设计提示(略)六、报告要求1.认真书写实验报告,字迹清晰,格式规范。

报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。

2.报告中应书写主要源程序,且源程序中要有注释。

3.报告中应包含运行结果及结果分析。

如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。

4.报告最后包含实验总结和体会。

实验二 OpenGL中的建模与变换一、实验目的1.学习配置OpenGL环境。

2.掌握在OpenGL中指定几何模型的方法。

3. 掌握OpenGL中的透视投影和正投影的设置方法,学会诊断投影问题导致的显示异常。

二、实验环境⒈ 硬件:每个学生需配备计算机一台。

⒉ 软件:Visual C++;三、实验内容1.建立OpenGL编程环境(注:Windows自带gl和glu,还需要安装glut库文件。

)(a)查看Windows自带的OpenGL文件。

在文件夹c:\windows\system32下查看是否存在文件opengl32.dll和glu32.dll;在Visual Studio的安装目录Vc7\PlatformSDK\Include\gl下查看是否存在gl.h和glu.h;在Vc7\PlatformSDK\Lib 下是否存在opengl32.lib和glu32.lib。

计算机组成原理实验

计算机组成原理实验
整机仿真 整机是将所有模块通过总线连接在一起,成为一台完整的计算机。 设计需求:该部分将各子模块综合,通过输入/输出设备实现汇编语言的编辑和编译,生 成二进制代码;将二进制代码存入主存,顺序执行,经过“指令模块”实现全速、单步或微 单步运行程序,完成程序功能。各步程序结果,各寄存器变量通过显示输出实时查看。
1. 采用 Cache-Memory 存储层次。 2. 地址长度为 16 位,数据寄存器长度 16 位,存储字长是 8 位,采用小端存储模式。 3. Cache 采用二路组相联,Cache 大小为 1KB,每个字块 4 个字,字长为 2B。 4. 能根据有效地址读 Cache 和内存,把数据读入数据寄存器中;能根据有效地址把
1、 运算器由 ALU,状态寄存器,通用寄存器组成。 2、 ALU 能够进行加、减、乘、除等四则运算,与、或、非、异或等逻辑运算以及移
位求补等操作。其中乘除法要实现原码 1 位乘、补码 1 位乘(Booth)、原码加减 交替除法、补码加减交替除法 4 种算法。选作原码/补码 2 位乘算法。 3、 通用寄存器组用于保存参加运算的操作数和运算结果。 4、 状态寄存器用于记录算术、逻辑运算的结果状态。程序设计中,这些状态通常用 作条件转移指令的判断条件,所以又称为条件码寄存器。一般均设置如下几种状 态位:零标志位(Z),负标志位(N),溢出标志位(v),仅为或借位标志(C)。 【输入】从 ins_input.txt 读入。每行有一个操作码和两个操作数,用空格分开,操作数用原 码表示。 e.g. Add 0.110111 1.101110 Sub 0.100111 0.101011 Mul 1.101110 0.110111 【输出】将运算过程和结果输入到 output.txt 例如: ori_onebit_times [x]ori=1.101110 [y]ori=0.110111 x*=0.101110 y*=0.110111 0.000000 110111 + 0.101110 -------------------------------0.101110 0.010111 0 11011 + 0.101110 -------------------------------1.000101 0 0.100010 10 1101 + 0.101110 -------------------------------1.010000 10 0.101000 010 110 0.010100 0010 11 + 0.101110 -------------------------------1.000010 0010 0.100001 00010 1 + 0.101110 --------------------------------

计算机组成原理全部实验

计算机组成原理全部实验

计算机科学技术系王玉芬2012年11月3日基础实验部分该篇章共有五个基础实验组成,分别是:实验一运算器实验实验二存储器实验实验三数据通路组成与故障分析实验实验四微程序控制器实验实验五模型机CPU组成与指令周期实验实验一运算器实验运算器又称作算术逻辑运算单元(ALU),是计算机的五大基本组成部件之一,主要用来完成算术运算和逻辑运算。

运算器的核心部件是加法器,加减乘除运算等都是通过加法器进行的,因此,加快运算器的速度实质上是要加快加法器的速度。

机器字长n位,意味着能完成两个n位数的各种运算。

就应该由n个全加器构成n位并行加法器来实现。

通过本实验可以让学生对运算器有一个比较深刻的了解。

一、实验目的1.掌握简单运算器的数据传输方式。

2.掌握算术逻辑运算部件的工作原理。

3. 熟悉简单运算器的数据传送通路。

4. 给定数据,完成各种算术运算和逻辑运算。

二、实验内容:完成不带进位及带进位的算术运算、逻辑运算实验。

总结出不带进位及带进位运算的特点。

三、实验原理:1.实验电路图图4-1 运算器实验电路图2.实验数据流图图4-2 运算器实验数据流图3.实验原理运算器实验是在ALU UNIT单元进行;单板方式下,控制信号,数据,时序信号由实验仪的逻辑开关电路和时序发生器提供,SW7-SW0八个逻辑开关用于产生数据,并发送到总线上;系统方式下,其控制信号由系统机实验平台可视化软件通过管理CPU来进行控制,SW7-SW0八个逻辑开关由可视化实验平台提供数据信号。

(1)DR1,DR2:运算暂存器,(2)LDDR1:控制把总线上的数据打入运算暂存器DR1,高电平有效。

(3)LDDR2:控制把总线上的数据打入运算暂存器DR2,高电平有效。

(4)S3,S2,S1,S0:确定执行哪一种算术运算或逻辑运算(运算功能表见附录1或者课本第49页)。

(5)M:M=0执行算术操作;M=1执行逻辑操作。

(6)/CN :/CN=0表示ALU运算时最低位加进位1;/CN=1则表示无进位。

《计算机图形学》实验3实验报告

《计算机图形学》实验3实验报告

实验3实验报告格式《计算机图形学》实验3实验报告实验题目:直线(光栅化)实数型Bresenham 算法在用户坐标系和Java AWT 坐标系下显示图像实验内容:1 直线(光栅化)实数型Bresenham 算法原理及程序。

2 直线(光栅化)DDA 算法原理及程序。

3 在用户坐标系和Java AWT 坐标系下显示图像的算法原理及实现。

写程序调用验证之。

参考资料:1 课件:光栅图形生成算法.PP T2 Bresenham 算法演示程序已经在MyCanvas 包里,DDA 算法applet 演示程序DDA.java3 有一个示范程序imageDrawApplet.java基本概念:(详细叙述自己对实验内容的理解) 直线(光栅化):画一条从(x1, y1)到(x2, y2)的直线,实质上是一个发现最佳逼近直线的像素序列、并填入色彩数据的过程。

这过程称为直线光栅化。

Bresenham 算法:Bresenham 直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点。

这个算法只会用到较为快速的整数加法、减法和位元移位,常用于绘制电脑画面中的直线。

DDA 算法:DDA 算法(Digital Differential Analyzer ),又称数值微分法,是计算机图形学中一种基于直线的微分方程来生成直线的方法。

算法设计:(详细叙述自己设计的Bresenham 算法以及程序的功能、不同坐标系下图像显示的算法)程序功能:用DDA 算法画出直线,在不同的坐标系下显示图像。

Bresenham 算法:用坐标为(xi ,yi,r)的象素来表示直线上的点,则第i+1个点只能在C 和D 中选取。

令d1=BC ,d2=DBd1-d2=(yi+1–yi,r)-( yi,r+1-yi+1)=2yi+1–yi,r –(yi,r+1)= 2yi+1–2yi,r –1x i x i+1令ε(xi+1)= yi+1–yi,r–0.5=BC-AC=BA=B-A= yi+1–(yi,r+ yi,r+1)/2当ε(xi+1)≥0时,yi+1,r= yi,r+1,即选D点,即下个点(xi+1,yi+1 )对应的象素(xi +1,yi+1,r )为(xi+1,yi,r+1 )当ε(xi+1)<0时,yi+1,r= yi,r,即选C点,即下个点(xi+1,yi+1 )对应的象素(xi +1,yi+1,r )为(xi+1,yi,r )ε(xi+1)= yi+1–yi,r–0.5ε(xi+1)≥0时,yi+1,r= yi,r+1ε(xi+1)<0时,yi+1,r= yi,r用户坐标系下图像显示算法:定义自己的坐标系,将用户坐标系转换为Java awt坐标,调用Graphics类的drawImage方法即可。

计算机图形学-实验五 直线和多边形的裁剪

计算机图形学-实验五 直线和多边形的裁剪

大学实验报告学院:计算机科学与信息学院专业:软件工程班级:102班学号实验组实验时间指导教师成绩实验项目名称实验五直线和多边形的裁剪实验目的掌握直线段的裁剪算法以及多边形的裁剪算法实验要求熟练掌握直线段的裁剪算法以及多边形的裁剪算法的基本原理,并编写测试代码进行实验。

实验原理Cohen-Sutherland直线剪裁算法以区域编码为基础,将窗口及其周围的,8个方向以4 bit的二进制数进行编码。

右图所示的编码方法将窗口及其邻域分为5个区域:⑴域:区域(0000)。

⑵上域:区域(1001, 1000, 1010)。

⑶下域:区域(0101, 0100, 0110)。

⑷左域:区域(1001, 0001, 0101)。

⑸右域:区域(1010, 0010, 0110)。

当线段的两个端点的编码的逻辑“与”非零时,线段为显然不可见的,对某线段的两个端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右;Cohen-Sutherland直线剪裁算法的算法思想是:对于每条线段P1P2分为三种情况处理。

(1)若P1P2完全在窗口,则显示该线段P1P2简称“取”之。

(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。

(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。

其中while (code1 != 0 || code2 != 0) {if ((code1 & code2) != 0) {// 两端点的编码相与不为0,表示直线在窗口外return;}if (code1 != 0) {code = code1;} else {code = code2;}if ((LEFT & code) != 0) {// 直线的端点与矩形窗口的左边编码相与!=0 x = XL;y = y1 + (y2 - y1) * (XL - x1) / (x2 - x1);// 求直线与矩形窗口的左边界的交点} else if ((RIGHT & code) != 0) {// 直线的端点与矩形窗口的右边编码相与!=0x = XR;y = y1 + (y2 - y1) * (XR - x1) / (x2 - x1);// 求直线与矩形窗口的右边界的交点} else if ((BOTTOM & code) != 0) {// 直线的端点与矩形窗口的下边编码相与!=0y = YB;x = x1 + (x2 - x1) * (YB - y1) / (y2 - y1);// 求直线与矩形窗口的下边界的交点} else if ((TOP & code) != 0) {// 直线的端点与矩形窗口的上边编码相与!=0y = YT;x = x1 + (x2 - x1) * (YT - y1) / (y2 - y1);// 直线的端点与矩形窗口的上// 边编码相与!=0}if (code == code1) {x1 = x;y1 = y;code1 = encode(x, y);} else {x2 = x;y2 = y;code2 = encode(x, y);}}g.drawLine((int) (x1 + 0.5), (int) (y1 + 0.5), (int) (x2 + 0.5),(int) (y2 + 0.5));}二、多边形裁剪的核心代码为:通过点集画直线或者多边形:private void draw() {//通过点集画直线或者多边形for (int i = 1; i < points.size(); i++) {Point p1 = new Point();p1 = points.get(i);int x1 = (int) p1.getX();int y1 = (int) p1.getY();Point p2 = new Point();p2 = points.get(i - 1);int x2 = (int) p2.getX();int y2 = (int) p2.getY();g.drawLine(x1, y1, x2, y2);}}多边形的裁剪函数:private Point[] cutPicture(Point[] point, Point[] edge) {// 剪裁函数,参数为(点集,边)Point[] intersectPoint = new Point[20];//存放交点的集合for (int j = 0; j < 20; j++) {intersectPoint[j] = new Point();}Point s = new Point();Point p = new Point();Point t = new Point();int i = 0;int length = point.length;s = point[length - 1];for (int j = 0; j < length; j++) {p = point[j];if (inside(p, edge)) {// sp在窗口,情况1if (inside(s, edge)) {intersectPoint[i] = p;i += 1;} else {// s在窗口外,情况4t = intersect(s, p, edge);intersectPoint[i] = t;i += 1;intersectPoint[i] = p;i += 1;}} else if (inside(s, edge)) {// s在窗口,p在窗口外,情况3t = intersect(s, p, edge);intersectPoint[i] = t;i += 1;}// 情况2没有输出s = p;}List<Point> tempList = new ArrayList<Point>();for (int k = 0; k < i; k++) {if (intersectPoint[k] != null) {Point pt = intersectPoint[k];tempList.add(pt);}}Point[] temp = new Point[tempList.size()];for (int j = 0; j < tempList.size(); j++) {temp[j] = new Point();temp[j] = tempList.get(j);}intersectPoint = temp;return intersectPoint;}判断点是否在裁剪边的可见侧:private boolean inside(Point point, Point[] edge) {//判断点是否在裁剪边的可见侧// 裁剪边为窗口下边if ((edge[0].y == edge[1].y) && (edge[0].x < edge[1].x)) {if (point.y >= edge[0].y) {return true;}}// 裁剪边为窗口上边if ((edge[0].y == edge[1].y) && (edge[0].x > edge[1].x)) {if (point.y <= edge[0].y) {return true;}}// 裁剪边为窗口右边if ((edge[0].x == edge[1].x) && (edge[0].y < edge[1].y)) {if (point.x <= edge[0].x) {return true;}}// 裁剪边为窗口左边if ((edge[0].x == edge[1].x) && (edge[0].y > edge[1].y)) {if (point.x >= edge[0].x) {return true;}}return false;}直线段与窗口边界求交:private Point intersect(Point s, Point p, Point[] edge) {//直线段与窗口边界求交,并返回交点Point t = new Point();if (edge[0].y == edge[1].y) {// 水平裁剪边t.y = edge[0].y;t.x = s.x + (edge[0].y - s.y) * (p.x - s.x) / (p.y - s.y);} else if (edge[0].x == edge[1].x) {// 垂直裁剪边t.x = edge[0].x;t.y = s.y + (edge[0].x - s.x) * (p.y - s.y) / (p.x - s.x);}return t;}鼠标的监听类(部类):class MouseMonitor extends MouseAdapter {//通过鼠标的单击获取点,并画出直线或者多边形public void mouseClicked(MouseEvent e) {points.add(e.getPoint());if (points.size() > 1) {draw();}}}键盘的监听类(部类):class KeyMonitor extends KeyAdapter {// 键盘控制public void keyPressed(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_R:// 清空画布和点集panel.repaint();points.removeAll(points);break;case KeyEvent.VK_W://对裁剪窗口的处理g.setColor(Color.RED);g.drawRect(XL, YB, XR - XL, YT - YB);//存放裁剪窗口的边top = new Point[2];// 存放裁剪窗口的上边top[0] = new Point(XL, YB);top[1] = new Point(XR, YB);right = new Point[2];//存放裁剪窗口的右边right[0] = new Point(XR, YB);right[1] = new Point(XR, YT);bottom = new Point[2];//存放裁剪窗口的下边bottom[0] = new Point(XR, YT);bottom[1] = new Point(XL, YT);left = new Point[2];//存放裁剪窗口的左边left[0] = new Point(XL, YT);left[1] = new Point(XL, YB);break;case KeyEvent.VK_A://对直线段进行裁剪g.setColor(Color.GREEN);Point p1 = points.get(0);Point p2 = points.get(1);lineCut(p1.getX(), p1.getY(), p2.getX(), p2.getY());break;case KeyEvent.VK_B://对多边形进行裁剪source = new Point[points.size()];//得到多边形的点for (int i = 0; i < points.size(); i++) {source[i] = points.get(i);}g.setColor(Color.GREEN);wT = cutPicture(source, top);//得到多边形与裁剪窗口上边的交点wR = cutPicture(wT, right);//得到多边形与裁剪窗口右边的交点wB = cutPicture(wR, bottom);//得到多边形与裁剪窗口下边的交点wL = cutPicture(wB, left);//得到多边形与裁剪窗口左边的交点第二种情况:线段在裁剪窗口的部,线段完全可见。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一
实验2
data segment
out1 db"My name is qyt$" data ends
code segment
assume cs:code,ds:data start:mov ax,data
mov ds,ax
lea dx,out1
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
实验3
data segment
org 0150h
dat1 db 35h,39h,30h,41h,32h xda dw 4 dup(?)
data ends
code segment
assume cs:code,ds:data start:org 0100h
mov cx,0005h
mov di,150h
bb:mov bl,0ffh
mov al,[di]
cmp al,3ah
jnb done
sub al,30h
jb done
mov bl,al
done:mov al,bl
mov [di+0ah],al
inc di
loop bb
mov ah,4ch
int 21h
org 0150h
db 35h,39h,30h,41,32h code ends
end start
实验4
CRLF MACRO
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,34H
COUNT EQU $-DATA1
DATA2 DB 36H,35H,30H,38H,32H
DATA ENDS
STACK SEGMENT STACK'STACK'
DB 20 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET DATA2
MOV BX,COUNT
CALL DISPL
CRLF
MOV SI,OFFSET DATA1
MOV BX,COUNT
CALL DISPL
CRLF
MOV DI,OFFSET DATA2
CALL ADDA
MOV SI,OFFSET DATA1
MOV BX,COUNT
CALL DISPL
CRLF
MOV AX,4C00H
INT 21H
DISPL PROC NEAR
DSI: MOV AH,02H
MOV DL,[SI+BX-1]
INT 21H
DEC BX
JNZ DSI
RET
DISPL ENDP
ADDA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV BX,COUNT
AD1: SUB BYTE PTR[SI+BX-1],30H
SUB BYTE PTR[DI+BX-1],30H
DEC BX
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,COUNT
CLC
AD2: MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [SI],AL
INC SI
INC DI
LOOP AD2
MOV SI,DX
MOV DI,BP
MOV BX,COUNT
AD3: ADD BYTE PTR[SI+BX-1],30H
ADD BYTE PTR[DI+BX-1],30H
DEC BX
JNC AD3
RET
ADDA ENDP
CODE ENDS
END START
实验五
DATA SEGMENT
A DW 125
B DW 90
Y DW 3 DUP(0)
Z DW 0,0
DATA ENDS
STA SEGMENT STACK'STACK'
DW 50 DUP('S')
STA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STA STAR PROC FAR
PUSH DS
XOR AX,AX
PUSH DS
MOV AX,DATA
MOV DS,AX
MOV AX,A
MOV Z,AX
MOV Z+2,AX
CALL MLT
MOV AX,B
MOV Z,AX
MOV Z+2,AX
CALL MLT
MOV AX,A
MOV Z,AX
MOV AX,B
MOV Z+2,AX
CALL MLT
ADD Y,AX
ADC Y+2,DX
ADC Y+4,0
CALL DSP6
RET
STAR ENDP
MLT PROC
MOV AX,Z
MOV BX,Z+2
MUL BX
ADD Y,AX
ADC Y+2,DX
ADC Y+4,0
RET
MLT ENDP
DSP6 PROC
LEA SI,Y
ADD SI,5
MOV CX,6
L1: MOV AL,BYTE PTR[SI]
CALL DSPAL
DEC SI
LOOP L1
RET
DSP6 ENDP
DSPAL PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BH,AL
MOV BL,2
MOV CL,4
SHR AL,CL
G1: CMP AL,10
JGE G2
OR AL,30H
JMP G3
G2: ADD AL,37H
G3 : MOV DL,AL
MOV AH,2
INT 21H
DEC BL
JZ G4
MOV AL,BH
AND AL,0FH
JMP G1
G4: POP DX
POP CX
POP BX
POP AX
RET
DSPAL ENDP
CODE ENDS
END STAR。

相关文档
最新文档