计算机原理课程设计(4)

合集下载

计算机组成原理_课程设计任务书

计算机组成原理_课程设计任务书

课程设计课程名称:计算机组成原理设计题目:一个非常简单的CPU的设计学院:信息工程与自动化专业:计算机科学与技术年级: 08级 1班学生姓名:张桥指导教师:李凌宇日期: 2010-9-9教务处制课程设计任务书信息工程与自动化学院计算机专业 08 1 年级学生姓名:张桥课程设计题目:一个简单的CPU的设计课程设计主要内容:设计一台完整的计算机。

首先要确定该计算机的功能和用途。

在设计中根据功能和用途确定指令系统,定义数据通路,设计每条指令的执行流程,要求利用微程序进行设计,每人至少要求4条CPU指令,可以自己选择;在设计中要求画出指令系统的格式并说明各位的意义;要求画出数据通路并定义微操作信号;要求画出微程序流程图。

设计指导教师(签字):教学基层组织负责人(签字):年月日一台模型计算机的设计一、教学目的、任务与实验设备融会贯通本课程各章节的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识,加深计算机工作中“时间—空间”概念的理解,从而清晰地建立计算机的整机概念。

二、数据格式和指令系统本模型机是一个8位定点二进制计算机,具有四个通用寄存器:R 0~R 3,能执行11条指令,主存容量为256KB 。

1. 数据格式数据按规定采用定点补码表示法,字长为8位,其中最高位(第7位)为符号位,小数点位置定在符号位后面,其格式如下:数值相对于十进制数的表示范围为:-1≤X ≤1―2―72. 指令格式及功能由于本模型机机器字只有8位二进制长度,故使用单字长指令和双字长指令。

⑴ LDR Ri ,D格式 7 4 3 2 1 0功能:Ri ←M (D )(2) STR Ri ,D格式功能:M (D )←(Ri )(3) ADD Ri ,Rj格式 功能:Ri ←(Ri )+ (Rj )(4) SUB Ri ,Rj格式 7 4 3 2 1 0功能:Ri ←(Ri )- (Rj )(5) AND Ri ,Rj格式功能:Ri ←(Ri)∧(Rj)(6)OR Ri,Rj格式功能:Ri ←(Ri)∨(Rj)(7)MUL Ri,Rj格式7 4 3 2 1 0功能:Ri ←(Ri)×(Rj)(8)转移指令格式7 4 3 2 1 0功能:条件码00 无条件转移PC ←D01 有进位转移PC ←D10结果为0转移PC ←D11结果为负转移PC ←D⑼IN R i,M j格式其中M j为设备地址,可以指定四种外围设备,当M j=01时,选中实验箱的二进制代码开关。

计算机组成原理课程设计

计算机组成原理课程设计

课程设计报告课程设计名称:计算机组成原理系:学生姓名:班级:学号:成绩:指导教师:开课时间:2011-2012学年2 学期一、设计题目计算机组成原理课程设计——简单模型机的微程序设计二、主要内容通过课程设计更清楚地理解下列基本概念:1.计算机的硬件基本组成;2.计算机中机器指令的设计;3.计算机中机器指令的执行过程;4.微程序控制器的工作原理。

5.微指令的格式设计原则;在此基础上设计可以运行一些基本机器指令的微程序的设计三.具体要求1.通过使用作者开发的微程序分析和设计仿真软件,熟悉介绍的为基本模型机而设计的微程序的执行过程。

必须充分理解并正确解释下些问题:(1)微程序中的微指令的各个字段的作用。

哪些字段是不译码的,哪些字段是直接译码的,哪些字段又可以看成是字段间接编码的。

(2)微程序中的微指令是否是顺序执行的,如果不是,那么次地址是如何产生的。

什么情况下,次地址字段才是将要执行的微指令的地址。

(3)在微程序中如何根据机器指令中的相关位实现分支,据此,在设计机器指令时应如何避免和解决与其它指令的微指令的微地址冲突。

(4)哪些微指令是执行所有指令都要用到的。

(5)解释一条机器指令的微程序的各条微指令的微地址是否连续?这些微指令的微地址的安排的严重原则是什么?(6)为什么读写一次内存总要用两条微指令完成?(7)机器程序中用到的寄存器是R0,是由机器指令中哪些位决定的?如果要用R1或R2,是否要改写微程序或改写机器指令?如果要,应如何改写?2.在原有5条机器指令的基础上增加实现下述各功能的机器指令,试设计相应的机器指令的格式并改写原来的微程序使其可以运行所有的机器指令。

新增加的机器指令的功能是:求反指令NOT RS,RD :/(RS) →(RD)与指令AND RD,(addr):(RD)与(addr)→(RD)异或指令XOR RD,(addr):(addr)异或(RD)→(RD)或指令OR RD,(addr):(RD)或(addr)→(RD)减法指令SUB RD,RS :(RS)减(RD)→(RD)其中的RS、RD可以是R0、R1、R2中的任何一个。

计算机原理课程设计阶乘

计算机原理课程设计阶乘

计算机原理课程设计阶乘一、课程目标知识目标:1. 学生能理解阶乘的概念,掌握计算阶乘的基本方法。

2. 学生能了解计算机中循环结构的应用,理解递归算法在计算阶乘中的实现过程。

3. 学生掌握计算机程序设计中阶乘相关问题的解决方法。

技能目标:1. 学生能运用所学知识编写计算阶乘的程序,具备一定的编程实践能力。

2. 学生能通过分析、设计、调试程序,提高问题解决能力和逻辑思维能力。

3. 学生能够运用递归思想优化计算阶乘的算法,提高编程技巧。

情感态度价值观目标:1. 学生对计算机科学产生兴趣,树立探究精神和创新意识。

2. 学生通过团队协作解决问题,培养沟通能力和团队精神。

3. 学生在解决问题的过程中,形成严谨、细致、负责的学习态度。

课程性质:本课程为计算机原理课程设计,旨在让学生通过实际操作,掌握计算阶乘的基本原理和方法,提高编程实践能力。

学生特点:本课程针对的是高年级学生,他们已经具备了一定的计算机编程基础,具有较强的逻辑思维能力和问题解决能力。

教学要求:课程要求学生在理解阶乘概念的基础上,学会编写计算阶乘的程序,并能对算法进行优化。

同时,注重培养学生的团队协作能力和创新精神。

通过本课程的学习,使学生能够将所学知识应用于实际问题中,提高综合运用能力。

二、教学内容1. 阶乘概念及其性质- 阶乘定义- 阶乘的数学性质2. 计算阶乘的方法- 递推法- 递归法- 循环法3. 计算机程序设计中的阶乘实现- 编程语言的选择- 阶乘程序设计- 程序调试与优化4. 阶乘应用案例- 阶乘在数学问题中的应用- 阶乘在计算机科学中的应用5. 教学案例分析与讨论- 案例展示- 案例分析与讨论- 团队协作解决问题教学内容安排与进度:第一课时:阶乘概念及其性质,学习阶乘定义和数学性质。

第二课时:计算阶乘的方法,学习递推法、递归法和循环法。

第三课时:计算机程序设计中的阶乘实现,进行编程实践和程序调试。

第四课时:阶乘应用案例,探讨阶乘在数学和计算机科学中的应用。

计算机专业课程设计

计算机专业课程设计

计算机专业课程设计一、课程目标知识目标:1. 理解计算机专业课程设计的基本概念、原则和方法;2. 掌握运用所学的编程语言、数据结构与算法,解决实际问题;3. 了解计算机系统的基本组成、工作原理及其在各领域的应用。

技能目标:1. 能够运用分析、设计的方法,独立完成小型计算机项目的需求分析和设计;2. 培养阅读和理解计算机相关技术文档的能力,提高自学能力;3. 学会使用专业软件工具进行项目开发和调试,提高实际操作能力。

情感态度价值观目标:1. 培养学生的团队合作意识,学会与他人共同解决问题;2. 激发学生对计算机专业的兴趣,提高学习的积极性和主动性;3. 树立正确的价值观,认识到计算机技术在国家和社会发展中的重要作用,增强社会责任感。

课程性质:本课程为计算机专业核心课程,旨在培养学生的编程能力、项目设计和实践能力。

学生特点:学生已具备一定的编程基础,具有较强的逻辑思维能力和学习兴趣。

教学要求:注重理论与实践相结合,强调学生动手实践,培养学生的创新能力和实际操作能力。

将课程目标分解为具体的学习成果,以便于后续的教学设计和评估。

二、教学内容1. 计算机专业课程设计概述- 课程设计的基本概念- 课程设计的原则- 课程设计的方法2. 编程语言与数据结构- 常用编程语言的特点与应用场景- 数据结构的基本概念与分类- 常用数据结构及其算法实现3. 计算机系统组成与应用- 计算机硬件系统- 计算机软件系统- 计算机在各领域的应用案例4. 项目需求分析与设计- 需求分析的方法与步骤- 设计模式与架构- 项目文档编写规范5. 项目开发与调试- 编程规范与技巧- 软件测试方法与策略- 调试工具与技巧6. 团队合作与沟通- 团队合作的重要性- 沟通技巧与方法- 项目管理与协作工具教学内容安排与进度:1. 第1-2周:计算机专业课程设计概述2. 第3-4周:编程语言与数据结构3. 第5-6周:计算机系统组成与应用4. 第7-8周:项目需求分析与设计5. 第9-10周:项目开发与调试6. 第11-12周:团队合作与沟通教材章节关联:1. 《计算机组成原理》第1-3章,介绍计算机硬件系统;2. 《数据结构与算法》第1-5章,介绍数据结构及其算法实现;3. 《软件工程》第1-2章,介绍需求分析、设计与文档编写;4. 《编程实践》第1-2章,介绍编程规范与技巧;5. 《项目管理与团队协作》第1-2章,介绍团队合作与沟通。

计算机组成原理课程设计报告

计算机组成原理课程设计报告

计算机组成原理课程设计实验报告目录一、程序设计 (1)1、程序设计目的 (1)2、程序设计基本原理 (1)二、课程设计任务及分析 (6)三、设计原理 (7)1、机器指令 (7)2、微程序流程图 (9)3、微指令代码 (10)4、课程设计实现步骤 (11)四、实验设计结果与分析 (15)五、实验设计小结 (15)六、参考文献 (15)一、程序设计1、程序设计目的(1)在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本模型计算机。

(2使用简单模型机和复杂模型机的部分机器指令,并编写相应的微程序,具体上机调试掌握整机概念。

(3)掌握微程序控制器的组成原理。

(4)掌握微程序的编写、写入,观察微程序的运行。

(5)通过课程设计,使学生将掌握的计算机组成基本理论应用于实践中,在实际操作中加深对计算机各部件的组成和工作原理的理解,掌握微程序计算机中指令和微指令的编码方法,深入理解机器指令在计算机中的运行过程。

2、程序设计基本原理(1)实验模型机结构[1] 运算器单元(ALU UINT)运算器单元由以下部分构成:两片74LS181构成了并-串型8位ALU;两个8位寄存器DR1和DR2为暂存工作寄存器,保存参数或中间运算结果。

ALU的S0~S3为运算控制端,Cn为最低进位输入,M为状态控制端。

ALU的输出通过三态门74LS245连到数据总线上,由ALU-B控制该三态门。

[2] 寄存器堆单元(REG UNIT)该部分由3片8位寄存器R0、R1、R2组成,它们用来保存操作数用中间运算结构等。

三个寄存器的输入输出均以连入数据总线,由LDRi和RS-B根据机器指令进行选通。

[3] 指令寄存器单元(INS UNIT)指令寄存器单元中指令寄存器(IR)构成模型机时用它作为指令译码电路的输入,实现程序的跳转,由LDIR控制其选通。

[4] 时序电路单元(STATE UNIT)用于输出连续或单个方波信号,来控制机器的运行。

《计算机组成原理》课程设计_两个数的乘法运算

《计算机组成原理》课程设计_两个数的乘法运算

《计算机组成原理》课程设计报告课程设计题目:两个数的乘法运算小组成员:….完成日期:第十一周模型机设计实验一、实验目的综合运用所学计算机原理知识,设计并实现较为完整的模型计算机。

其功能为:输入两个数,进行两个正数(二进制4位)的乘法运算,输出结果。

二、实验内容编写程序,运行程序,观察并记录运行结果。

三、实验仪器1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱一台2、排线若干3、PC机一台四、预备知识1、数据格式8位,其格式如下:其中第7位为符号位,数值表示范围是:-1≤X<127。

2、指令格式模型机设计四大类指令共十六条,其中包括算术逻辑指令、I/O指令、访问存储器、转移指令和停机指令。

(1)算术逻辑指令规定:算术逻辑指令的名称、功能和具体格式见表2—3。

(2)访存指令及转移指令模型机设计2条访存指令,即存数(STA)、取数(LAD),2条转移指令,即无条件转移(负均可)本模型机规定变址寄存器RI指定为寄存器R2。

(3)I/O指令其中,在IN 指令中,addr=01,选中“输入”中的开关组作为输入设备,在OUT指令中,addr=10时,表示选中“输出单元”中的数码块作为输出设备。

(4)停机指令HALT指令,机器码为60H,用于实现停机操作。

3、指令系统复杂模型机共有16条基本指令,其中算术逻辑指令7条,访问内存指令和程序控制指令4条,输入输出指令2条,其它指令1条。

表2-3列出了各条指令的格式、汇编符号、指令功能。

我们依然采用复杂模型机指令系统中的部分指令。

五、实验的机器指令程序如下:地址内容助记符说明00 14 IN R0 ; 作计数器用,00000001→R001 15 IN R1 ; 输入X的值,0000xxxx→R102 05 STA R1 ; X→22H03 2204 15 IN R2 ; 输入Y→R2,0000xxxx→R205 06 STA R2 ; R2→23H06 2307 42 CLR R2 ; R2清零08 06 STA R2 ; 存入结果R2→24H09 240A 02 LAD R2 ; 提取[23H]→R20B 230C 6A RRC R2,R2 ; R2带进位右循环一位→R2 0D 06 STA R2 ; 循环结果→23H0E 230F 02 LAD R2 ; 提取结果S,[24H]→R210 2411 0C BZC [15H] ; 有进位跳转到15H12 1513 08 JMP [18H] ; 无条件跳转到[18H]14 1815 01 LAD R1 ; 提取X→R116 2217 56 ADC R1,R2 ; R1+R2→R218 6A RRC R2,R2 ; R2带进位右循环一位→R219 06 STA R2 ; 循环结果→24H1A 241B70 RLC R0,R0 ; R0带进位左循环一位→R0 1C 0C BZC [20H] ; 有进位跳转到20H1D 201E 08 JMP [0AH] ; 无条件跳转到[0AH]1F 0A20 2A OUT R2 ; 输出R2中的结果21 60 HATL ; 停机22 XX23 XX24 XX六、程序机器指令和微程序以上程序的机器指令如下:$P0014 $P0115 $P0205 $P0322$P0416 $P0506 $P0623 $P0772$P0806 $P0924 $P0A02 $P0B23$P0C6A $P0D06 $P0E23 $P0F02$P1024 $P110C $P1215 $P1308$P1418 $P1501 $P1622 $P1756$P186A $P1906 $P1A24 $P1B70$P1C0C $P1D20 $P1E08 $P1F0A$P202A $P2160微程序如下$M00018108 $M0101ED82 $M0200C050$M0300A004 $M0400E098 $M0501B406$M06959B41 $M07298838 $M0801ED8A$M0901ED8C $M0A00A01E $M0B018001$M0C00201F $M0D019801 $M0E19880F$M0F019801 $M1001ED83 $M11001001$M12030401 $M13018016 $M143D9A01$M1501A205 $M16318207 $M1731820E$M18009001 $M19028401 $M1A05DB81$M1B0180DC $M1C018001 $M1D05DB8D$M1E070A08 $M1F068A09七、复杂模型机的数据通路框图WE图2-7复杂模型机数据通路框图八、复杂模型机实验接线图接到指令单元接到开关单元九、复杂模型机实验流程图十、课程设计总结1、成员总结体会…2、遇到的问题和解决的方法等1)寄存器不够用。

计算机简单工作原理教案

计算机简单工作原理教案

计算机简单工作原理教案标题:计算机简单工作原理教案引言概述:计算机是现代社会不可或者缺的工具,而了解计算机的简单工作原理对于学习和使用计算机至关重要。

本教案将介绍计算机的简单工作原理,包括计算机的基本组成、数据的表示和处理、存储器的作用、运算器的功能以及控制器的工作原理。

一、计算机的基本组成1.1 中央处理器(CPU):负责执行计算机指令和控制计算机的运行。

1.2 输入设备:用于将外部数据输入到计算机中,如键盘、鼠标等。

1.3 输出设备:用于将计算机处理后的结果输出,如显示器、打印机等。

二、数据的表示和处理2.1 二进制系统:计算机使用二进制系统来表示和处理数据。

2.2 位和字节:计算机中最基本的数据单位是位(0或者1),8位组成一个字节。

2.3 数据的运算:计算机通过运算器对数据进行加减乘除等运算。

三、存储器的作用3.1 主存储器:用于存储计算机中的程序和数据。

3.2 辅助存储器:用于长期存储大量的程序和数据,如硬盘、光盘等。

3.3 缓存存储器:位于CPU内部,用于提高数据访问速度。

四、运算器的功能4.1 算术逻辑单元(ALU):负责进行算术和逻辑运算。

4.2 寄存器:用于存储运算过程中的中间结果和操作数。

4.3 控制单元:负责控制计算机的运行,包括指令的解码和执行。

五、控制器的工作原理5.1 程序计数器(PC):存储当前指令的地址。

5.2 指令寄存器(IR):存储当前指令。

5.3 控制信号:根据指令的不同,控制信号将被发送给相应的部件,以执行相应的操作。

通过本教案的学习,学生将了解计算机的基本组成、数据的表示和处理、存储器的作用、运算器的功能以及控制器的工作原理。

这将为他们进一步学习计算机原理和编程打下坚实的基础。

同时,对于普通用户来说,了解计算机的简单工作原理也将匡助他们更好地使用计算机,解决一些常见的问题。

计算机课程设计任务书

计算机课程设计任务书

计算机课程设计任务书全文共四篇示例,供读者参考第一篇示例:计算机课程设计任务书一、课程名称:计算机应用课程设计二、课程编号:COMP101三、授课教师:XXX四、课程简介:计算机应用课程设计是一门针对计算机专业学生的实践性课程,旨在培养学生独立分析问题、设计解决方案的能力。

通过本课程的学习,学生将深入了解计算机应用的基本原理和实践技巧,掌握各类应用软件的开发与设计方法,培养实践动手能力和团队合作精神。

五、课程目标:1. 理解计算机应用的基本原理和技术;2. 掌握各类应用软件的开发和设计方法;3. 能够独立分析问题,设计解决方案;4. 培养实践动手能力和团队合作精神。

六、课程内容:1. 计算机应用基础知识介绍2. 软件开发工具及技术3. 基本软件应用开发4. 软件测试与调试技术5. 软件项目管理与团队合作七、实践任务:1. 设计一个简单的桌面应用软件,实现基本的功能:如文本编辑、图形绘制等;2. 运用所学的软件开发技巧,设计一个网页应用程序,实现数据交互和动态效果;3. 结合实际案例,进行软件测试与调试,找出问题并解决;4. 分组进行软件项目管理的实践,体验团队协作的重要性。

八、实践作业要求:1. 按时提交每个阶段的实践作业,包括设计文档、代码和测试报告;2. 在团队合作实践中,积极参与讨论和合作,分工明确,任务完成及时;3. 完成个人项目设计和实现,具有一定的创新性和实用性。

九、考核方式:1. 课堂表现(15%)2. 实践作业(40%)3. 期末考核(45%)十、课程教材:1. 《计算机应用基础》2. 《软件开发技术》3. 《软件测试与调试指南》十一、参考资料:1. https:///2. https:///3. https:///以上为本课程的设计任务书,希望同学们认真学习和实践,掌握计算机应用的基本原理与技术,提升实践能力和团队合作意识。

祝大家学习愉快!第二篇示例:任务书二、任务目标1. 通过本次课程设计,学生要掌握Java、Python或C++等编程语言的基础知识和程序设计技巧。

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

课程设计说明书计算机组成原理算法实现(四)专业 计算机科学与技术学生姓名 王亚飞 班级 D 计算机132 学号1320704223 指导教师 花小朋 完成日期2016年1月22日1 课程设计目的本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。

2 课程设计内容与要求2.1 题目计算机组成原理算法实现(四)2.2 功能能够实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

(1)系统进入(主)窗体的设计:菜单需要在输入口令正确后方可激活使用。

口令输入错误时要给出重新输入口令的提示。

(2)选择主窗体中“定点小数真值还原”时进入下图所示的窗体:在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。

输入一个定点小数形式的机器数(如:1.1001)后,按“原—〉真值”、“反—〉真值”、“补—〉真值”或“移—〉真值”按钮中的任一个后,将在第二个文本框中显示对应的真值。

选择“返回”按钮时回到主窗体。

(3)选择主窗体中的“定点小数单符号位补码加减运算”时进入如下图所示的窗体:操作时首先选择“输入”按钮输入参与运算的数据,然后再选操作按钮。

当单击“加法”、“减法”第三、四个文本框显示对应的结果。

选择“返回”按钮时回到主窗体。

(4)选择主窗体中的“定点小数原码乘法”时进入如下图所示的窗体:操作时首先选择“输入”按钮输入参与运算的数据,然后再选操作按钮。

当单击“乘法”时第三个文本框显示对应的结果。

选择“返回”按钮时回到主窗体。

(5)选择主窗体中的“浮点数的加减运算”时进入下图所示的窗体:先选择“输入”按钮输入参与运算的数据,再选操作按钮。

当单击“加法”和“减法”时下列文本框显示对应的结果:加法的阶码和尾数、减法的阶码和尾数。

选择“返回”按钮时回到主窗体。

(6)选择主窗体中的“帮助”进入下图所示的窗体:阅读完文字后,可使用“关闭”按钮返回主窗口。

3 功能模块详细设计3.1 功能介绍3.2实现方法(1)登录界面设计思路界面:整个布局使用了LinearLayout,设置 android:orientation="vertical"就可以让所有控件以水平方式来排列,LinearLayout作为容器来承载控件,布局中第一个控件是TextView,值为“计算机组成原理算法实现(4)”,第二个控件是EditText,EditText是文本输入框,最后一个控件是Button控件,用于确定来绑定事件。

功能:Buttton绑定了一个监听点击的一个事件,在这个方法体中,主要写了,获得EditText的字符串消息和Intnet跳转,Intent是Android中的一个类,用于控件不同地Activity跳转,从而实现可以在手机上看到不同的画面,这里的Intent 跳转到主界面,这也是程序的唯一入口地址。

当口令正确,就可以进入主界面,如果连续三次错误程序将被锁死,无法打开。

(2)主界面设计思路界面:在主界面中使用了NavigationView,NavigationView采用最Google最新的Material Design,它是一个很新并且重要的Material Design组件。

在Material Design中,Navigation drawer导航抽屉,被设计用于应用导航,提供了一种通用的导航方式,体现了设计的一致性。

而NavigationView的典型用途就是配合之前v4包的DrawerLayout,作为其中的Drawer部分,即导航菜单的本体部分。

NavigationView是一个导航菜单框架,使用menu资源填充数据,使我们可以更简单高效的实现导航菜单。

它提供了不错的默认样式、选中项高亮、分组单选、分组子标题、以及可选的Header。

功能:这里的导航菜单设置了四个ITEM,分别是“机器数的真值还原”,“定点小数符号位的补码加减运算”,“定点小数原码的乘法运算”和“浮点数的加减运算”,点击对应的ITEM分别会跳到相应的界面,从而实现了界面的跳转,具体的操作将会在别人Activity处理。

(3)机器数的真值还原设计思路界面:在这个UI中,设置了较多的控件,首先第一个是EditText,用于输入信息,第二个和第三个控件都是TextView,不同的是第一个只是用来提示用户下面是真值,所以这里的Text属性就被设置了“真值是”,第三个真正用来显示所求的结果的,然后依次放了几个Button,用来触发事件。

功能:第一个Button是原码求真值的,我们所输入的是定点小数所以是符合原码的不用再做处理,第二个Button是“反码-->真值”,当得到所输入的数据后,对这个定点小数小数点以后的数据进行取反,取反的数据再与符号位连接起来就得到“反码-->真值”的值了。

第三个Button是用来“补码-->真值”,因为补码是在反码基础上取反加1就好,所以可以复用求反码的方法,在此基础上加1,便取到补码到真值的值了。

第四个Button是“移码”复用第三个Button的方法,只要对符号位替换掉就好了。

(4)定点小数的单符号位的补码加减运算设计思路界面:UI布居中,有两个EditText,分别输入两个定点小数,两个TextView用来显示求和的结果,和相减的结果,四个Button按钮用来触发事件。

功能:点击“减法”会获得两个输入框中补码相加的结果,在TextView中显示,点击“加法”会对两个输入框的值进行相加,加的结果会显示在TextView中,以供用户观察。

点击“返回”会直接退出这个界面,回到主界面,点击“清除”会清除输入框中的值。

代码处理首先是取得两个ExitText中的值,程序得到的值会进行判断是正是负,如果是正的直接处理,如果是负的会把它写成加一个负数的形式,调用相加的方法,最后加上符号位,最后返回一个字符串。

(5)定点小数原码乘法运算设计思路界面:UI中有两个EditText,一个TextView以及三个Button。

功能:点击输入会获得第一个EditText的焦点,点击乘法会对两个输入框的值进行相乘,乘的结果会显示在TextView中,以供用户观察。

点击“返回”会直接退出这个界面,回到主界面。

定点小数原码乘法的原理是,符号位相同得正,不同为负,然后对后边字符串中的内容进行遍历,第一个数的最后一位依次与第二个数的个个位置的数相乘,保存在一个字符串数组中,最后对这个数组进行二进制加法运算,返回这个结果。

(6)浮点数的加减运算设计思路界面:UI布居中,有四个EditText,分别输入两个浮点小数,四个TextView用来显示求和的结果,和相减的结果,四个Button按钮用来触发事件。

功能:点击“输入”会获得第一个EditText的焦点,点击乘法会对四个输入框的值进行浮点数加减,乘的结果会显示在TextView中,以供用户观察。

点击“返回”会直接退出这个界面,回到主界面。

4 设计小结为期一周的课程设计就这样结束了。

在程序设计的时也遇到了很多的问题,刚刚看到这个题目时觉得挺简单,后来慢慢的发现并非如此。

当你真正要去做一个东西的时候,会面临比平常多的问题。

经过本次课程设计,发现做软件真的需要做很多工作,不仅仅是敲代码。

通过此次课程设计,使我更加扎实的掌握了有关Android方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

过而能改,善莫大焉。

在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。

最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。

这次课程设计终于顺利完成了,在设计中遇到了很多问题。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。

同时,设计让我感触很深。

使我对抽象的理论有了具体的认识。

参考文献[1] 白中英. 计算机组成原理(第五版)[M]. 北京: 科学出版社, 2010.[2]耿祥义《Java2实用教程》[M].北京:清华大学出版社2006.08部分代码Util.javapackage com.wyf.king.myapplication;public class Util {/****** 求补码* @param str String** @return String*/public String getBuMa(String str){String buMa;if(NotRight(str)){return "数据不会法!!!";}else if(str.charAt(0)=='0'){System.out.println("我是正数");return str;}else {buMa=str.substring(0,2)+QuFan(str.substring(2,str.length()));System.out.println("前两个是"+str.substring(0, 2));System.out.println("我是负数");return buMa;}}/*** 对字符串取反* @param str String* @return String*/public String QuFan(String str){System.out.println("取反的字符串是"+str);str=str.replace("1","*");str=str.replace("0","1");str=str.replace("*","0");System.out.println("取反后是:"+str);return str;}public boolean NotRight(String str) {// Pattern pattern = pile("[0-1]"); // Matcher matcher = pattern.matcher(str);// if (matcher.find()) {// return true;// }return false;}/*** 定点小数加法运算* @param one String* @param two String* @return String*/public String DingJiaJian(String one,String two) {one=getBuMa(one);two=getBuMa(two);String result="";int len;String temp=null;if(one.length()<two.length()){temp=one;one=two;two=temp;}boolean jinwei[]=new boolean[one.length()];{len=two.length();result=one.substring(len);System.out.println("len是从这里开始的"+result);for(int i=len-1;i>=0;i--){if(one.charAt(i)=='.'){jinwei[i]=true;result="."+result;continue;}intsum=(int)(one.charAt(i)+two.charAt(i));System.out.println(sum);System.out.println("one的值是"+one.charAt(i)+"two的值是"+two.charAt(i)+"sum是"+sum);System.out.println('2');if(sum==98){jinwei[i]=true;if((i+1)<two.length()&&jinwei[i+1]) {temp="1"+result;result=temp;}else {temp="0"+result;result=temp;}}else if (sum==97){if((i+1)<two.length()&&jinwei[i+1]==true) {temp="0"+result;result=temp;jinwei[i]=true;}else {temp="1"+result;result=temp;jinwei[i]=false;}}else if (sum==96) {if(jinwei[i+1]){temp="1"+result;result=temp;}else {temp="0"+result;result=temp;}jinwei[i]=false;}else {}if(i==0){if(jinwei[0]&&jinwei[2]||!jinwei[0]&&!jinwei[2]){return result;}}}}return "内存溢出";}public String DingJianFa(String one,String two) {System.out.println("two is"+two);if(two.charAt(0)=='0'){two="1"+two.substring(1);}else {two="0"+two.substring(1);}return DingJiaJian(one, two);}/*** 原码乘法运算* @param one String* @param two String* @return String*/public String YuanCheng(String one,String two) {String result;String temp="";//保留正负号if(one.charAt(0)==two.charAt(0))result="0.";else {result="1.";}String a=result;result="0";one=one.substring(2);two=two.substring(2);char first[]=one.toCharArray();char second[]=two.toCharArray();int len1=first.length;int len2=second.length;char aa[]=new char[100];if(len1<len2){aa=first;first=second;second=aa;}String meiHang[]=new String[second.length*second.length];int len=first.length;for(int i=0;i<len;i++){for(int j=0;j<second.length;j++){if(first[i]=='1'&&second[i]=='1'){temp="1"+temp;}else{temp="0"+temp;}}for(int j=1;j<=i;j++)temp=temp+"0";meiHang[i]=temp;temp="";System.out.println("每行的数据:"+meiHang[i]);result=ErJiaFa(meiHang[i],result);}return a+result;}/******************二进制加法器************************/public String ErJiaFa(String one,String two){String result="";int len=0;String temp=null;if(one.length()<two.length()){temp=one;one=two;two=temp;}boolean jinwei[]=new boolean[one.length()+2];int len1=one.length();int len2=two.length();for (int i = 0; i < len1-len2; i++){two="0"+two;}for (int i = len1-1;i>=0; i--){char a=one.charAt(i);char b=two.charAt(i);if((a=='1'&&b=='1'&&(jinwei[i+1]==true))){result="1"+result;jinwei[i]=true;}elseif((a=='1'&&b=='1'&&jinwei[i+1]==false)){result="0"+result;jinwei[i]=true;}elseif((a=='0'&&b=='0'&&jinwei[i+1]==true)){result="1"+result;}elseif((a=='0'&&b=='0'&&jinwei[i+1]==false)){result="0"+result;}elseif(jinwei[i+1]==true&&(a=='1'&&b=='0'||a=='0'&&b==' 1')){result="0"+result;jinwei[i]=true;}elseif(jinwei[i+1]==false&&((a=='1'&&b=='0')||(a=='0'&&b =='1'))){result="1"+result;jinwei[i]=false;System.out.println("我错了"+result);}System.out.println("result"+result);}if (jinwei[0]){result="1"+result;}return result;}}FuDianShuUtil.javapackage com.wyf.king.myapplication;/*** Created by King on 2016/1/20.*/public class FuDianShuUtil {public String FuDianShuJia(String j1 ,String j2,String t1,String t2){String result1=null,result2=null;String s2_=t1;char b1_[]=new char[s2_.length()-1];s2_.getChars(0,2,b1_,0);s2_.getChars(3,s2_.length(),b1_,2);C.原_补(b1_);String s2=new String(b1_);String s4_=t2;char b2_[]=new char[s4_.length()-1];s4_.getChars(0,2,b2_,0);s4_.getChars(3,s4_.length(),b2_,2);C.原_补(b2_);String s4=new String(b2_);String s1=j1;char a1[]=s1.toCharArray();C.原_补(a1);String s3=j2;char a2[]=s3.toCharArray();C.原_补(a2);B.减(a1,a2,a1); //对阶C.原_补(a1);int p=C.二_十(new String(a1,2,3));char b1[]=new char[p+s2.length()];for(int i=0;i<p+s2.length();i++) b1[i]='0';char b2[]=new char[p+s4.length()];for(int i=0;i<p+s2.length();i++) b2[i]='0';if(a1[0]=='0'){s1.getChars(0, s1.length(), a1, 0);s2.getChars(0, s2.length(), b1, 0);s4.getChars(0, s4.length(), b2, p);}else{s3.getChars(0, s3.length(), a1, 0);s2.getChars(0, s2.length(), b1, p);s4.getChars(0, s4.length(), b2, 0);}B.加(b1, b2, b1); //尾数相加String s=new String(b1);if(s.startsWith("01")||s.startsWith("10")) //右规{for(int i=b1.length-1;i>=1;i--) b1[i]=b1[i-1];C.加一(a1);}else if(s.startsWith("00")) //左规{int t=s.indexOf("1")-2 ;for(int i=0;i<b1.length-t;i++) b1[i]=b1[i+t]; //左移for(int i=b1.length-t;i<b1.length;i++) b1[i]='0';String t_=Long.toBinaryString(t);char a1_[]=new char[5];for(int i=0;i<5;i++) a1_[i]='0';t_.getChars(0,t_.length(),a1_,a1.length-t_.length());B.减(a1, a1_, a1);}else if(s.startsWith("11")){int t=s.indexOf("0")-2 ;for(int i=0;i<b1.length-t;i++) b1[i]=b1[i+t];for(int i=b1.length-t;i<b1.length;i++) b1[i]='0';String t_=Long.toBinaryString(t);char a1_[]=new char[5];for(int i=0;i<5;i++) a1_[i]='0';t_.getChars(0,t_.length(),a1_,a1.length-t_.length());B.减(a1, a1_, a1);}if(b1[b1.length-p]=='1') //舍入{String code=new String(b1,0,b1.length-p);char c[]=code.toCharArray();C.加一(c);b1=c;String code_=new String(b1);if(code_.startsWith("01")||code_.startsWith("10")) //右规{for(int i=c.length-1;i>=1;i--) c[i]=c[i-1];C.加一(a1);}}if(a1[0]=='0'&&a1[1]=='1'||a1[0]=='1'&&a1[1]=='0'){return "结果溢出@结果溢出";}else{C.原_补(a1);if(a1[0]=='0') { a1[0]=' '; a1[1]=(char)('+');}else {a1[0]=' '; a1[0]=(char)('-');}String code1=new String(a1);// result1=code1;C.原_补(b1);if(b1[0]=='0') { b1[1]='0'; b1[0]=(char)('+');}else {b1[1]='0'; b1[0]=(char)('-');}StringBuffer code2_=new StringBuffer(new String(b1));code2_.insert(2,".");String code2=new String(code2_);// result=code2;return code1+"@"+code2;}}public String FuDianShuJian(String j1 ,String j2,String t1,String t2){String result=null;String s2_=t1;char b1_[]=new char[s2_.length()-1];s2_.getChars(0,2,b1_,0);s2_.getChars(3,s2_.length(),b1_,2);C.原_补(b1_);String s2=new String(b1_);String s4_=t2;char b2_[]=new char[s4_.length()-1];s4_.getChars(0,2,b2_,0);s4_.getChars(3,s4_.length(),b2_,2);C.原_补(b2_);String s4=new String(b2_);String s1=j1;char a1[]=s1.toCharArray();C.原_补(a1);String s3=j2;char a2[]=s3.toCharArray();C.原_补(a2);B.减(a1,a2,a1); //对阶C.原_补(a1);int p=C.二_十(new String(a1,2,3));char b1[]=new char[p+s2.length()];for(int i=0;i<p+s2.length();i++) b1[i]='0';char b2[]=new char[p+s4.length()];for(int i=0;i<p+s2.length();i++) b2[i]='0';if(a1[0]=='0'){s1.getChars(0, s1.length(), a1, 0);s2.getChars(0, s2.length(), b1, 0);s4.getChars(0, s4.length(), b2, p);}else{s3.getChars(0, s3.length(), a1, 0);s2.getChars(0, s2.length(), b1, p);s4.getChars(0, s4.length(), b2, 0);}B.减(b1, b2, b1); //尾数相String s=new String(b1);if(s.startsWith("01")||s.startsWith("10")) //右规{for(int i=b1.length-1;i>=1;i--) b1[i]=b1[i-1];C.加一(a1);}else if(s.startsWith("000")) //左规{int t=s.indexOf("1")-2 ;for(int i=0;i<b1.length-t;i++) b1[i]=b1[i+t]; //左移for(int i=b1.length-t;i<b1.length;i++) b1[i]='0';String t_=Long.toBinaryString(t);char a1_[]=new char[5];for(int i=0;i<5;i++) a1_[i]='0';t_.getChars(0,t_.length(),a1_,a1.length-t_.length());B.减(a1, a1_, a1);}else if(s.startsWith("111")){int t=s.indexOf("0")-2 ;for(int i=0;i<b1.length-t;i++) b1[i]=b1[i+t];for(int i=b1.length-t;i<b1.length;i++) b1[i]='0';String t_=Long.toBinaryString(t);char a1_[]=new char[5];for(int i=0;i<5;i++) a1_[i]='0';t_.getChars(0,t_.length(),a1_,a1.length-t_.length());B.减(a1, a1_, a1);}if(b1[b1.length-p]=='1') //舍入{String code=new String(b1,0,b1.length-p);char c[]=code.toCharArray();C.加一(c);b1=c;String code_=new String(b1);if(code_.startsWith("01")||code_.startsWith("10")) //右规{for(int i=c.length-1;i>=1;i--) c[i]=c[i-1];C.加一(a1);}}if(a1[0]=='0'&&a1[1]=='1'||a1[0]=='1'&&a1[1]=='0'){result= "结果溢出@结果溢出";}else{C.原_补(a1);if(a1[0]=='0') { a1[0]=' '; a1[1]=(char)('+');}else {a1[0]=' '; a1[0]=(char)('-');}String code1=new String(a1);// result1=code1;C.原_补(b1);if(b1[0]=='0') { b1[1]='0'; b1[0]=(char)('+');}else {b1[1]='0'; b1[0]=(char)('-');}StringBuffer code2_=new StringBuffer(new String(b1));code2_.insert(2,".");String code2=new String(code2_);// result2=code2;result= code1+"@"+code2;}return result;}}class C{static void 原_补(char a[]) //双符号位原-补{String s=new String(a);if(s.startsWith("1")){s.getChars(stIndexOf("1"), s.length(), a, stIndexOf("1"));s=s.substring(2,stIndexOf("1"));s=s.replaceAll("0", ";");s=s.replaceAll("1", "'");s=s.replaceAll(";", "1");s=s.replaceAll("'", "0");s.getChars(0,s.length(),a,2);}}static int 二_十(String s){int p=0,m=0;for(int i=s.length()-1;i>=0;i--){char c=s.charAt(i);int a=Integer.parseInt(""+c);p=p+(int)(a*Math.pow(2,m));m++;}return p;}static void 加一(char a[]){String s=new String(a);s.getChars(0,stIndexOf("0"),a,0);Stringss=s.substring(stIndexOf("0"),s.length());ss=ss.replaceAll("0", ";");ss=ss.replaceAll("1", "'");ss=ss.replaceAll(";", "1");ss=ss.replaceAll("'", "0");ss.getChars(0,ss.length(),a,stIndexOf("0"));}}class B{static void 加(char a1[],char a2[],char b[]){int temp=0;int n=a1.length-1;for(int i=n,j=n,m=n;i>=0;i--,j--,m--){if(a1[i]=='0'&&a2[j]=='0'&&temp==0){b[m]='0';temp=0;}elseif(a1[i]=='0'&&a2[j]=='1'&&temp==0||a1[i]=='1'&&a2[j ]=='0'&&temp==0||a1[i]=='0'&&a2[j]=='0'&&temp==1){b[m]='1';temp=0;}elseif(a1[i]=='1'&&a2[j]=='1'&&temp==0||a1[i]=='0'&&a2[j ]=='1'&&temp==1||a1[i]=='1'&&a2[j]=='0'&&temp==1){b[m]='0';temp=1;}elseif(a1[i]=='1'&&a2[j]=='1'&&temp==1){b[m]='1';temp=1;}}}static void 减(char a1[],char a2[],char b[]){String s=new String(a2);s.getChars(stIndexOf("1"), s.length(), a2, stIndexOf("1"));s=s.substring(0,stIndexOf("1"));s=s.replaceAll("0", ";");s=s.replaceAll("1", "'");s=s.replaceAll(";", "1");s=s.replaceAll("'", "0");s.getChars(0,s.length(),a2,0);B.加(a1,a2,b);}}。

相关文档
最新文档