计算机组成原理逻辑运算

合集下载

数字逻辑与计算机组成原理:第二章 数据的表示与运算

数字逻辑与计算机组成原理:第二章  数据的表示与运算
数字逻辑与计算机组成原理
第二章 数据的表示与运算
第一节 数的表示
一、无符号数和有符号数
1、无符号数:
没有符号的数,寄存器中的每一位都可用 来存放数据
机器字长为n位,无符号数的表示范围 为0~2n-1
反映无符号数的表示范围
8位 16 位
0 ~ 255 0 ~ 65535
有两种常用的无符号表示法: ◆ 非负数码:表示0或一个正数
(1) 定义
整数
0,x
2n > x ≥ 0
[x]反 = ( 2n+1 – 1) + x 0 ≥ x > 2n(mod 2n+1 1)
x 为真值
n 为整数的位数
如 x = +1101
x = 1101
[x]反 = 0,1101
[x]反 = (24+1 1) 1101 = 11111 1101
用 逗号 将符号位
= 1,0010
和数值部分隔开
小数 x
[x]反 = ( 2 – 2-n) + x
1>x≥ 0 0 ≥ x > 1(mod 2 2-n)
x 为真值 n 为小数的位数
如 x = + 0.1101
x = 0.1010
[x]反 = 0.1101
[x]反 = (2 2-4) 0.1010
= 1.1111 0.1010
有符号小数: +0.1011,在机器中表示为
-0.1011,在机器中表示为
第一节 数的表示
一、无符号数和有符号数 2、有符号数
有符号整数: +1101,机器中表示为
-1101, 机器中表示为
第一节 数的表示
一、无符号数和有符号数

计算机组成原理---逻辑运算114页PPT

计算机组成原理---逻辑运算114页PPT
39、没有不老的誓言,没有不变的承 诺,踏 上旅途 ,义无 反顾。 40、对时间的价值没有没有深切认识 的人, 决不会 坚韧勤 勉。谢谢!源自计算机组成原理---逻辑运算
36、“不可能”这个字(法语是一个字 ),只 在愚人 的字典 中找得 到。--拿 破仑。 37、不要生气要争气,不要看破要突 破,不 要嫉妒 要欣赏 ,不要 托延要 积极, 不要心 动要行 动。 38、勤奋,机会,乐观是成功的三要 素。(注 意:传 统观念 认为勤 奋和机 会是成 功的要 素,但 是经过 统计学 和成功 人士的 分析得 出,乐 观是成 功的第 三要素 。
51、 天 下 之 事 常成 于困约 ,而败 于奢靡 。——陆 游 52、 生 命 不 等 于是呼 吸,生 命是活 动。——卢 梭
53、 伟 大 的 事 业,需 要决心 ,能力 ,组织 和责任 感。 ——易 卜 生 54、 唯 书 籍 不 朽。——乔 特
55、 为 中 华 之 崛起而 读书。 ——周 恩来

计算机组成原理--实验二算术逻辑运算实验

计算机组成原理--实验二算术逻辑运算实验

计算机组成原理--实验⼆算术逻辑运算实验实验⼆算术逻辑运算实验⼀、实验⽬的(1)了解运算器芯⽚(74LS181)的逻辑功能。

(2)掌握运算器数据的载⼊、读取⽅法,掌握运算器⼯作模式的设置。

(3)观察在不同⼯作模式下数据运算的规则。

⼆、实验原理1.运算器芯⽚(74LS181)的逻辑功能74LS181是⼀种数据宽度为4个⼆进制位的多功能运算器芯⽚,封装在壳中,封装形式如图2-3所⽰。

5V A1 B1 A2 B2 A3 B3 Cn4 F3BO A0 S3 S2 S1 S0 Cn M F0 F1 F2 GND图2-374LS181封装图主要引脚有:(1)A0—A3:第⼀组操作数据输⼊端。

(2)B0—B3:第⼆组操作数据输⼊端。

(3)F0—F3:操作结果数据输⼊端。

(4)F0—F3:操作功能控制端。

(5)Cn:低端进位接收端。

(6)(7)M:算数/逻辑功能控制端。

芯⽚的逻辑功能见表2-1.从表中可以看到当控制端S0—S3为1001、M为0、Cn为1时,操作结果数据输出端F0—F3上的数据等于第⼀组操作数据输⼊端A0—A3上的数据加第⼆组操作数据输⼊端B0—B3上的数据。

当S0—S3、M、Cn上控制信号电平不同时,74LS181芯⽚完成不同功能的逻辑运算操作或算数运算操作。

在加法运算操作时,Cn、Cn4进位信号低电平有效;减法运算操作时,Cn、Cn4借位信号⾼电平有效;⽽逻辑运算操作时,Cn、进位信号⽆意义。

2.运算器实验逻辑电路试验台运算器实验逻辑电路中,两⽚74LS181芯⽚构成⼀个长度为8位的运算器,两⽚74LS181分别作为第⼀操作数据寄存器和第⼆操作数据寄存器,⼀⽚74LS254作为操作结果数据输出缓冲器,逻辑结构如图2-4所⽰。

途中算术运算操作时的进位Cy 判别进位指⽰电路;判零Zi和零标志电路指⽰电路,将在实验三中使⽤。

第⼀操作数据由B-DA1(BUS TO DATA1)负脉冲控制信号送⼊名为DA1的第⼀操作数据寄存器,第⼆操作数据由B-DA2(BUS TO DATA2)负脉冲控制信号送⼊名为DA2的第⼆操作数据寄存器。

计算机组成原理实验报告 算术逻辑运算单元实验

计算机组成原理实验报告 算术逻辑运算单元实验

西华大学数学与计算机学院实验报告课程名称:计算机组成原理年级:2011级实验成绩:指导教师:祝昌宇姓名:蒋俊实验名称:算术逻辑运算单元实验学号:312011*********实验日期:2013-12-15一、目的1. 掌握简单运算器的数据传输方式2. 掌握74LS181的功能和应用二、实验原理(1)ALU单元实验构成1、结构试验箱上的算术逻辑运算单元上的运算器是由运算器由2片74LS181构成8字长的ALU 单元。

2、2片74LS373作为2个数据锁存器(DR1、DR2),8芯插座ALU-OUT作为数据输入端,可通过短8芯扁平电缆,把数据输入端连接到数据总线上。

3、运算器的数据输出由一片74LS244(输出缓冲器)来控制,8芯插座ALU-OUT作为数据输出端,可通过短8芯扁平电缆把数据输出端连接到数据总线上。

(2)ALU单元的工作原理数据输入锁存器DR1的EDR1为低电平,并且D1CK有上升沿时,把来自数据总线上的数据打入锁存器DR1。

同样,使EDR2为低电平,并且D2CK有上升沿时,把来自数据总线上的数据打入锁存器DR2。

算术逻辑运算单元的核心是由2片74LS181构成,它可以进行2个8位二进制数的算术逻辑运算,74LS181的各种工作方式可通过设置其控制信号来实现(S0、S1、S2、S3、M、CN)。

当实验者正确设置了74LS181的各个控制信号,74LS181会运算数据锁存器DR1、DR2内的数据。

由于DR1、DR2已经把数据锁存,只要74LS181的控制信号不变,那么74LS181的输出数据也不会发生改变。

输出缓冲器采用74LS244,当控制信号ALU-O为低电平时,74LS244导通,把74LS181的运算结果输出到数据总线;ALU-O为高电平时,74LS244的输出为高阻。

图1 算术逻辑单元原理图三、使用环境计算机组成原理实验箱四、实验步骤(一).逻辑或运算实验1.把ALU-IN(8芯的盒型插座)与CPT-B板上的二进制开关单元中J1插座相连(对应二进制开关H16~H23), 把ALU-OUT(8芯的盒型插座)与数据总线上的DJ2相连。

数字逻辑与计算机组成原理

数字逻辑与计算机组成原理

数字逻辑与计算机组成原理数字逻辑和计算机组成原理是计算机科学中非常重要的两个学科,它们涉及到计算机硬件的设计、逻辑电路的实现以及计算机的组成和工作原理。

数字逻辑主要关注数字信号的处理和逻辑运算,而计算机组成原理则着眼于计算机内部各个部件的组成和相互协作。

一、数字逻辑1.1 逻辑门逻辑门是数字逻辑中的最基本组成部分,它通过将输入信号按照逻辑运算规则进行处理,生成输出信号。

常见的逻辑门包括与门、或门、非门、异或门等。

这些逻辑门可以通过晶体管、集成电路等电子器件来实现。

1.2 组合逻辑电路组合逻辑电路由多个逻辑门组成,用于实现特定的逻辑功能。

在组合逻辑电路中,输入信号即时产生输出信号,不受过去输入组合的影响。

常见的组合逻辑电路有译码器、编码器、多路选择器等。

1.3 时序逻辑电路时序逻辑电路是基于组合逻辑电路的基础上加入了时钟信号的逻辑电路。

它不仅根据输入信号产生输出信号,还受到时钟信号的控制。

时序逻辑电路常用于存储器、寄存器、时序器等的设计。

二、计算机组成原理2.1 计算机的基本组成计算机由中央处理器(CPU)、存储器(内存)、输入设备、输出设备以及各种外部设备组成。

中央处理器是计算机的核心,负责进行各种运算和控制操作。

存储器用于存储程序和数据,可以分为主存储器和辅助存储器。

2.2 指令执行过程计算机的指令执行过程包括取指令、译码指令、执行指令和写回结果四个阶段。

取指令阶段从主存储器中读取指令,并将其送入指令寄存器。

译码指令阶段对指令进行译码,确定其操作类型和操作数。

执行指令阶段根据指令的操作类型进行相应的运算。

最后,在写回结果阶段将运算结果写入存储器或寄存器。

2.3 数据通路与控制器计算机的数据通路用于传输和处理数据,包括算术逻辑单元(ALU)、寄存器、数据总线等部件。

控制器负责控制数据通路和各个部件的工作,根据指令的要求生成控制信号。

三、数字逻辑与计算机组成原理的关系数字逻辑和计算机组成原理密切相关,二者相互依存。

《计算机组成原理》实验报告---8位算术逻辑运算实验

《计算机组成原理》实验报告---8位算术逻辑运算实验

.'.计算机专业类课程实验报告课程名称:计算机组成原理学 院:信息与软件工程学院专 业:软件工程学生姓名:学 号:指导教师:日 期: 2012 年 12 月 15 日电子科技大学实验报告一、实验名称:8位算术逻辑运算实验二、实验学时:2三、实验内容、目的和实验原理:实验目的:1.掌握算术逻辑运算器单元ALU(74LS181)的工作原理。

2.掌握模型机运算器的数据传送通路组成原理。

3.验证74LS181的组合功能。

4.按给定数据,完成实验指导书中的算术/逻辑运算。

实验内容:使用模型机运算器,置入两个数据DR1=35,DR2=48,改变运算器的功能设定,观察运算器的输出,记录到实验表格中,将实验结果对比分析,得出结论。

实验原理:1.运算器由两片74LS181以并/串形式构成8位字长的ALU。

.'. 2.运算器的输出经过一个三态门(74LS245)和数据总线相连。

3.运算器的两个数据输入端分别由两个锁存器(74LS273)锁存。

4.锁存器的输入连至数据总线,数据开关(INPUT DEVICE)用来给出参与运算的数据,并经过一三态门(74LS245)和数据总线相连。

5.数据显示灯(BUS UNIT)已和数据总线相连,用来显示数据总线内容。

实验器材(设备、元器件):模型机运算器四、实验步骤:1. 仔细查看试验箱,按以下步骤连线1)ALUBUS连EXJ32) ALU01连BUS13) SJ2连UJ24) 跳线器J23上T4连SD5) LDDR1,LDDR2,ALUB,SWB四个跳线器拨在左边6) AR跳线器拨在左边,同时开关AR拨在“1”电平2. 核对线路,核对正确后接通电源3. 用二进制数据开关KD0-KD7向DR1和DR2寄存器置入8位运算数据。

①调拨8位数据开关KD0-KD7为01100101(35H),准备向DR1送二进制数据。

②数据输出三态缓冲器门控信号ALUB=1(关闭)。

③数据输入三态缓冲器门控信号SWB=0(打开)。

计算机组成原理第4章

计算机组成原理第4章
第4章 数值的机器运算
本章学习要求
• 掌握:定点补码加法和减法运算方法 • 理解:3种溢出检测方法 • 理解:补码移位运算和常见的舍入操作方法 • 了解:串行加法器与并行加法器 • 理解:进位产生和进位传递 • 掌握:定点原码、补码乘法运算方法 • 掌握:定点原码、补码加减交替除法运算方法 • 理解:浮点加减乘除运算 • 理解:逻辑运算 • 了解:运算器的基本结构及浮点协处理器
第4章 数值的机器运算
设操作数信号为4、3、2、1、(最低 位信号为1)。向最低位进位的信号为C0、 Gi、Pi 分别是各位的进位产生函数和进位 传递函数。
(1)完善第4位先行进位信号的逻辑表达 式。 C4=G4+P4G3+……
(2)基于操作数,试述表达式中各项的 实际含义。
第4章 数值的机器运算
[-Y]补=[[Y]补]变补
第4章 数值的机器运算
2.补码减法(续)
“某数的补码表示”与“变补”是两个不 同的概念。一个负数由原码转换成补码时,符 号位是不变的,仅对数值位各位变反,末位加 “1”。而变补则不论这个数的真值是正是负, 一律连同符号位一起变反,末位加“1”。[Y]补 表示的真值如果是正数,则变补后[-Y]补所表示 的真值变为负数,反之亦然。
第4章 数值的机器运算
16位单级先行进位加法器
S1 6~S1 3
S1 2~S9
S8~S5
S4~S1
C16 4位CLA C12 4位CLA C8 4位CLA C4 4位CLA
加法器
加法器
加法器
加法器
C0
A1 6~A1 3
A1 2~A9
B1 6~B1 3
B1 2~B9
A8~A5 B8~B5

计算机组成原理:逻辑运算及其实现

计算机组成原理:逻辑运算及其实现

Y=000lllll,利用8个逻辑与门即可实现,如图所示:
于是 Z=X·Y=00000101
3 “逻辑或( )”运算
运算规则:有1则1,常用“+ ”或“ V ”来表示 实现方法:“逻辑或”可直接由逻辑或门电路来实现,记做 X V Y=Z;
作用:“逻辑或”运算常用来‘合并字段”。 例如:X=00001001,Y=11010000,利用8个独立的逻辑或门,可将X的低
数据与文字的表示方法我们已经知道,那么计算机是怎么对它们进行 处理,运算的呢,计算机运算有算数及逻辑运算。我们先看看逻辑 运算及其实现方法。
2·2 逻辑运算及其实现
参加逻辑运算的操作数均为不带符号的二进制数。利用逻辑运算可以进行 两个数的比较,或者从某个数中选取某几位等操作,逻辑运算主要有“逻辑 非”、“逻辑与”、“逻辑或”和“逻辑异或”运算。
1 “逻辑非”运算 运算规则:对二进数取反。 实现方法:“逻辑非”运算可由反相器来实现,常用逻辑符号如图所示。
2 “逻辑与( )”又称作“逻辑乘”: 运算规则:有0则0 实现方法:可直接由“与门’来实现,常用逻辑符号如所示。
作用: 在计算机中,“逻辑与”运算常用来“分离字段”。 例如:X=10110101,如果需要取出X低端的5位,那么可将Y定义为:
ቤተ መጻሕፍቲ ባይዱ现如图所示。
于是Z=00010000不等于0,说明X不等于Y,反之,若Z=0则X=Y
② 除此之外,异或门还可用来将某个数(X)以正、反两种方式输出。 例如:X=10010111,使用8个异或门如图所示。 当Y=0时,Z=X=10010111, 当Y=1时,Z=X=01101000。
至于其他的逻辑运算,比如“移位”也是逻辑运算,将X左移一位得2X, 将X右移一位得x / 2 ,依此类推,还有由多种逻辑运算组合起来构成的“与 非”、“或非”、“与或非”运算等均属于逻辑运算的范畴,不再说明

计算机组成原理 运算器实验—算术逻辑运算实验

计算机组成原理  运算器实验—算术逻辑运算实验

实验报告一、实验名称运算器实验—算术逻辑运算实验二、实验目得1、了解运算器得组成原理。

2、掌握运算器得工作原理.3、掌握简单运算器得数据传送通路。

4、验证运算功能发生器(74LS181)得组合功能.三、实验设备TDN-CM++计算机组成原理教学实验系统一套,导线若干。

四、实验原理实验中所用得运算器数据通路如图1-1所示。

其中两片74LSl81以串行方式构成8位字长得ALU,ALU得输出经过一个三态门(74LS245)与数据总线相连.三态门由ALU—R控制,控制运算器运算得结果能否送往总线,低电平有效。

为实现双操作数得运算,ALU得两个数据输入端分别由二个锁存器DR1、DR2(由74LS273实现)锁存数据。

要将数据总线上得数据锁存到DRl、DR2中,锁存器得控制端LDDR1与DDR2必须为高电平,同时由T4脉冲到来。

数据开关(“INPUTDEVICE”)用来给出参与运算得数据,经过三态(74LS245)后送入数据总线,三态门由SW—B控制,低电平有效。

数据显示灯(“B USUNIT")已与数据总线相连,用来显示数据总线上得内容.图中已将用户需要连接得控制信号用圆圈标明(其她实验相同,不再说明),其中除T4为脉冲信号外,其它均为电平信号。

由于实验电路中得时序信号均已连至“W/RUNIT”得相应时序信号引出端,因此,在进行实验时,只需将“W/R UNIT"得T4接至“STATE UNIT"得微动开关KK2得输入端,按动微动开关,即可获得实验所需得单脉冲.ALU运算所需得电平控制信号S3、S2、S1、S0、Cn、M、LDDRl、LDDR2、ALU-B、SW-B均由“SWITCH UNIT ”中得二进制数据开关来模拟,其中Cn、ALU—B、SW一B为低电平有效LDDR1、LDDR2为高电平有效。

对单总线数据通路,需要分时共享总线,每一时刻只能由一组数据送往总线。

五、实验内容1.输入数据通过三态门74LS245后送往数据总线,在数据显示灯与数码显示管LED上显示。

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

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

实验题目运算器实验一、算术逻辑运算器1.实验目的与要求:1.掌握算术逻辑运算器单元ALU(74LS181)的工作原理。

2.掌握简单运算器的数据传送通道。

3.验算由74LS181等组合逻辑电路组成的运算功能发生器运算功能。

4.能够按给定数据,完成实验指定的算术/逻辑运算。

2.实验方案:(一)实验方法与步骤1实验连线按书中图1-2在实验仪上接好线后,仔细检查正确与否,无误后才接通电源。

每次实验都要接一些线,先接线再开电源,这样可以避免烧坏实验仪。

2 用二进制数据开关分别向DR1寄存器和DR2寄存器置数。

3 通过总线输出寄存器DR1和DR2的内容。

(二)测试结果3.实验结果和数据处理:1)SW-B=0时有效,SW-B=1时无效,因其是低电平有效。

ALU-B=0时有效,ALU-B=1时无效,因其是低电平有效。

S3,S2,S1,S0高电平有效。

2)做算术运算和逻辑运算时应设以下各控制端:ALU-B SW-B S3 S2 S1 S0 M Cn DR1 DR23)输入三态门控制端SW-B和输出三态门控制端ALU-B不能同时为“0”状态,否则存在寄存器中的数据无法准确输出。

4)S3,S2,S1,S0是运算选择控制端,有它们决定运算器执行哪一种运算;M是算术逻辑运算选择,M=0时,执行算术运算,M=1时,执行逻辑运算;Cn是算术运算的进位控制端,Cn=0(低电平),表示有进位,运算时相当于在最低位上加进位1,Cn=1(高电平),表示无进位。

逻辑运算与进位无关;、ALU-B是输出三态门控制端,控制运算器的运算结果是否送到数据总线BUS上。

低电平有效。

SW-B是输入三态门的控制端,控制“INPUT DEVICE”中的8位数据开关D7~D0的数据是否送到数据总线BUS上。

低电平有效。

5)DR1、DR2置数完成后之所以要关闭控制端LDDR1、LDDR2是为了确保输入数据不会丢失。

6)A+B是逻辑运算,控制信号状态000101;A加B是算术运算,控制信号状态100101。

计算机组成原理与汇编语言3

计算机组成原理与汇编语言3
第三章 数值运算及运算器
补码加减运算
注意:求一个数的补码: 正数时,补码和原码相同; 负数时, 对原码除符号位外求反加1。
例1: 1: y = -0.0110 [y]补 = 1.1010 例2: y = 0.0111 [y]补 = 0.0111 [-y]补 = 1.1001 [-y]补 = 0.0110
第三章 数值运算及运算器
例(3):按位清
设:A=10010010,将A最高位清“0” 设:B=01111111 10010010 A ∧ 01111111 B ——————— 00010010 A
第三章 数值运算及运算器
例(4):按位测试
设:A=10010010,测A最高位是否为“1”; 设: B=10000000 10010010 ∧ 10000000 ——————— 10000000 结果不全为“0”,表明被测码的被测位为“1”。 结果为全“0”,表明被测码的被测位为“0”。
第三章 数值运算及运算器
(一)对进位公式的分析 设相加的两个n位操作数为: A=An-1An-2…Ai..A0 B=Bn-1Bn-2…Bi..B0
Ci+1 = AiBi + (Ai⊕Bi) Ci —— 进位逻辑表达式 设:Gi = AiBi —— 进位产生函数(Carry Generate Function)
二、溢出检测
1. 采用一个符号位判断
规则: • 当两个同号数相加,若所得结果符号与两数符号不同, 则表明溢出。 • 设An、Bn分别表示两个操作数的符号; Sn表示结果 的符号, 则有: 溢出=AnBnSn + AnBnSn
63+66=129 0,0111111 + 0,1000010 1,0000001

计算机组成原理---逻辑运算

计算机组成原理---逻辑运算
(32)
1.4.4 逻辑图
把相应的逻辑关系用逻辑符号和连线表示 出来,就构成了逻辑图。 A B C D F=AB+CD &
& 1
F
(33)
1.4.5 逻辑函数四种表示方式的相互转换
一、逻辑电路图逻辑代数式
A A
1 &
AB
B B
1
≥1
Y=A B+AB
&
AB
(34)
二、真值表卡诺图 真值表
A 0 0 1 B 0 1 0 Y 1 1 1
注意 括号
F1 A B C D 0
F1 (A B) (C D) 1
注意括号
F1 AC BC AD BD
与或式
(26)
§1.4 逻辑函数的表示法
真值表:将逻辑函数输入变量取值的不同组合 与所对应的输出变量值用列表的方式 一一对应列出的表格。

在逻辑代数中,逻辑函数的变量只能取两个 值(二值变量),即0和1,中间值没有意义。 0和1表示两个对立的逻辑状态,不是数值0和1
(18)
1.3.1 逻辑代数的基本运算规则
加运算规则:
0+0=0 ,0+1=1 ,1+0=1,1+1=1
A 0 A , A 1 1, A A A, A A 1
故此逻辑代数式并非是最简单的形式,需要化简
(36)
§1.5 逻辑函数的化简
逻辑函数化简的意义:逻辑表达式越简单,实 现它的电路越简单,电路工作越稳定可靠。 乘积项的项数最少。 每个乘积项中变量个数最少。
最简与或式
利用逻辑代数的基本公式
逻辑函数的公式化简法就是运用逻辑代数的基本公式、 定理和规则来化简逻辑函数。

计算机组成原理逻辑运算

计算机组成原理逻辑运算

计算机组成原理逻辑运算逻辑运算是计算机组成原理中非常重要的一部分,它通过对输入的逻辑值进行组合和操作,得到输出的逻辑值。

计算机中最基本的逻辑运算包括与、或、非三种运算。

与运算,又被称为逻辑乘法,它有两个输入,如果两个输入都是1,那么输出为1,否则输出为0。

其真值表如下:输入A,输入B,输出Y-------,-------,-------0,0,00,1,01,0,01,1,1或运算,又被称为逻辑加法,它有两个输入,如果两个输入中有至少一个是1,那么输出为1,否则输出为0。

其真值表如下:输入A,输入B,输出Y-------,-------,-------0,0,00,1,11,0,11,1,1非运算,又被称为逻辑反演,它只有一个输入,如果输入是1,那么输出为0;如果输入是0,那么输出为1、其真值表如下:输入A,输出Y-------,-------0,11,0除了这三种基本的逻辑运算,还有其他一些常用的逻辑运算,如异或(XOR)、与非(NAND)、或非(NOR)等。

这些逻辑运算可以通过基本的逻辑门电路进行实现。

基本的逻辑门电路主要包括与门(AND Gate)、或门(OR Gate)、非门(NOT Gate)、与非门(NAND Gate)、或非门(NOR Gate)、异或门(XOR Gate)等。

这些逻辑门电路可以通过逻辑电路图进行表示。

例如,与门的逻辑电路图如下所示:```_____A--AND,---B---,_____```图中A和B是输入端口,Y是输出端口,AND是与门。

根据与门的定义,只有当A和B的输入同时为1时,输出Y才会是1、否则,输出Y为0。

通过组合这些基本逻辑门电路,可以实现复杂的逻辑运算。

例如,通过与门和非门的组合,可以实现与非门的功能;通过或门和非门的组合,可以实现或非门的功能。

逻辑运算在计算机组成原理中广泛应用,包括算术逻辑单元(ALU),寄存器,控制单元等等。

这些逻辑运算的实现方式和原理都是基于逻辑门电路和逻辑电路图的。

计算机组成原理计算机的运算方法(共56张PPT)精选全文

计算机组成原理计算机的运算方法(共56张PPT)精选全文

10 0001 0000
0000
0001
……
……
1001
1010
0
00110000
1
00110001
……
9
00111001
A
16 0001 0110
1111
F
由于ASCII码低四位与BCD码相同,转换方便。 ASCII码左移四位得BCD码, BCD码前加0011得ASCII码。
一般采用二进制运算的计算机中不采用BCD码,矫正不方便。 商用计算机中采用BCD码,专门设置有十进制运算电路。
八进制数与十六进制数之间,可将二进制数作为中介进行转换。
、数值的处理(数制转换)
3) BCD码(十进制):P214-215
如果计算机以二进制进行运算和处理时,只要在输入输出处理时进
行二 / 十进制转换即可。
但在商业统计中,二 / 十进制转换存在两个问题:
(1)转换占用实际运算很大的时间; (2)十进制的,无法用二进制精确表示;
例:将(0. 1)10转换成二进制数 ( 要求5位有效位) 。
结果
0.1×2
最高位 0 .2×2
… 0 .4×2
0 .8×2
1 .6×2
1 .2×2
0 .4×2
直到乘积的小数部分为0,
或结果已满足所需精度要求为止.
0 .8×2
最低位 1 .6000
可能永远乘不完,小数部分不为0, 意味存在一点误差。
2 105
余数
结果
2 52
1
2 26
0
2 13
0
26
1
23
0
21
1
0
1
直到商等于0为止

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

计算机组成原理 -实验一运算器组成实验_
12
三.实验内容
验证74LS181的算术运算和逻辑运算功能(采 用正逻辑)
改变运算器的功能设置,观察运算器的输出。
SW-B=1、ALU-B=0保持不变 在给定DR1=65、DR2=A7的情况下,改变运算器的功
能设置,观察运算器的输出,填入下表中,并和理论分 析进行比较、验证。 例如:置S3 S2 S1 S0 M CN为 1 0 0 1 0 1 运算器做加 法运算;
45
4.实验步骤
4.对源程序进行编译
在左方Source in Project栏中选中第二行ispLSI1032-70LJ84, 在右方Process for current Source栏中双击第七行JEDEC File按钮,则开始编译。如果编译正确,则生成可下载的文 件JEDEC File,即使出现警告提示,也表示已成功生成了可 下载文件。如果提示错误,则需要修改程序,然后重新编译。
40
3.实验原理
对该器件的逻辑系统设计是通过使用硬件描述 语言活原理图输入来实现的,硬件描述语言有 ABEL、VHDL等多种语言。
为了方便同学学习,这里以硬件描述语言进行 编程,描写器件功能,下面用ABEL语言编程 来实现一个加法器。
41
4.实验步骤
1.安装EDA。
打开计算机电源,进入windows系统,安装上述 ispDesignEXPERT软件,安装完成后,桌面和开始菜单中 则建有ispDesignEXPERT软件图标。
5
三.实验内容
图中已将用户需要连接的控制信号用圆圈标明(其 他实验相同,不再说明),其中除T4为脉冲信号, 其它均为电平信号。由于实验电路中的时序信号均 已连至“W/R UNIT”的相应时序信号引出端,因此, 在进行实验时,只需将“W/R UNIT”的T4接至 “STATE UNIT”的微动开关KK2的输出端,按动微 动开关,即可获得实验所需的单脉冲,而S3、S2、 S1、S0 、Cn、M、LDDR1、LDDR2、ALU-B、 SW-B各电平控制信号用“SWITCH UNIT”中的二 进制数据开关来模拟,其中Cn、ALU-B、SW-B为 低电平有效,LDDR1、LDDR2为高电平有效。

计算机组成原理逻辑运算

计算机组成原理逻辑运算

(7)
§1.2 基本逻辑关系
逻辑:指事物的前因和后果所遵循的规律 逻辑状态:逻辑“真”为“1”,逻辑“假”为 “0” 基本逻辑关系:与 ( and ) 或 (or ) 非 ( not ) 与逻辑:决定事件发生的各条件中,所有条件都 具备,事件才会发生(成立) 规定: A E B F 开关合为逻辑“1” 开关断为逻辑“0”
=1
提出A 反变量吸收
(38)
利 用 逻 辑 代 数 的 基 本 公 式
例2:F
AB A B BC B C
(AB A B ) (BC B C) AB A B(C C)
五、反演定理
德 • 摩根 (De • Morgan)定理:
AB A B
A B AB
可以用列真值表的方法证明:
A 0 0 1 1 B 0 1 0 1 AB 0 0 0 1
AB
A
1 1 0 0
B
AB
1 1 1 0
1 0 1 0
1 1 1 0
(24)
反演定理内容:将函数式 F 中所有的
A 0 0 0 0 1 1 1 1
B C 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1
F 0 0 0 0 0 1 1 1
(28)
1.4.2 逻辑函数式
逻辑代数式:把逻辑函数的输入、输出关 系写成与、或、非等逻辑运算的组合 式。也称为逻辑函数式,通常采用 “与或”的形式。 例:
F ABC ABC ABC ABC ABC
利用卡诺图化简
卡诺图适用于输入变量为3、4个的逻辑代数式的 化简;化简过程比公式法简单直观。
(37)
利用逻辑代数的基本公式

计算机组成原理---逻辑运算114页PPT

计算机组成原理---逻辑运算114页PPT

60、生活的道路一旦选定,就要敢地 走到底 ,决不 回头。 ——左
计算机组成原理---逻辑运算
41、俯仰终宇宙,不乐复何如。 42、夏日长抱饥,寒夜无被眠。 43、不戚戚于贫贱,不汲汲于富贵。 44、欲言无予和,挥杯劝孤影。 45、盛年不重来,一日难再晨。及时 当勉励 ,岁月 不待人 。
56、书不仅是生活,而且是现在、过 去和未 来文化 生活的 源泉。 ——库 法耶夫 57、生命不可能有两次,但许多人连一 次也不 善于度 过。— —吕凯 特 58、问渠哪得清如许,为有源头活水来 。—— 朱熹 59、我的努力求学没有得到别的好处, 只不过 是愈来 愈发觉 自己的 无知。 ——笛 卡儿

8位算术逻辑运算计算机组成原理实验一

8位算术逻辑运算计算机组成原理实验一

《计算机组成与结构》课程实验报告实验名称 算术逻辑运算 实验序号 1 实验日期 2013.3.29姓 名院系计算机班 级 学 号 专 业计算机科学与技术指导教师成 绩一、实验目的及要求1.掌握简单运算器的数据传送通路组成原理。

2. 验证算术逻辑运算功能发生器74LS181的组合功能。

三、实验内容1.用二进制数码开关KD0-KD7向DR1 和DR2 计数器指数。

方法:关闭ALU 输出三态门(ALUB ’=0),开启输入三态门(swb=0),输入脉冲T4按手动脉冲发生按钮产生。

ALUB=1 LDDR1=1 KD0-D7=00110101 SWB=0 LDDR2=0T4=KD0-D7=01001000 ALUB=1 SWB=1 LDDR1=0,LDDR2=1T4=2.检查DR1和DR2中存入的数据是否正确,利用算术逻辑运算功能发生器74LS181的逻辑功能,即M=1具体操作为:关闭数据输入三态门swb=1打开ALU 输出三态门ALUB=0.当置S2,S3,S1,S0,M 为 1 1 1 1 1时,总线指示灯显示DR1中的数,而置10101时总线指示灯显示DR2中的数。

说明:LDDRl 、LDDR2、ALUB ’、SWB ’四个信号电平由对应的开关LDDRl 、LDDR2、ALUB 、SWB 给出,拨在上面为“1”,拨在下面为“0”,电平值由对应的显示灯显示,T4由手动脉冲开关给出。

3.验证74LS181的算术运算和逻辑运算功能(采用正逻辑)在给定DRl =35、DR2=48的情况下,改变算术逻辑运算功能发生器的功能设置,观察运算器的输出,填入实验报告表中,并和理论分析进行比较、验证。

4.实验连接图 开输入三态门 数据存入寄存器DR1 数据开关置数 数据开关置数 开输入三态门二、实验准备1.仔细阅读实验指导书,弄清楚实验步骤和实验原理。

实验中所用的运算器数据通路如图所示。

其中运算器由两片74LSl81以并/串形成8位字长的ALU构成。

计算机组成原理-算术逻辑运算单元实验

计算机组成原理-算术逻辑运算单元实验

计算机组成原理-算术逻辑运算单元实验实验报告学院:计算机科学学院专业:计算机应用技术2022年10月25日姓名班级课程名称实验名称操文健计应(2)班计算机组成原理成算术逻辑运算单元实验不带进位位逻辑或运算实验1.实验目的1.掌握简单运算器的数据传输方式2.掌握74LS181的功能和应用学号2022030311043指导老师王松绩2.实验内容1.完成不带进位位算术,逻辑运算实验。

2.按照实验步骤完成实验项目,了解算术逻辑运算单元的运行过程3.实验环境科技大楼D208计算机组成原理实验室4.实验方法和步骤(含设计)1.把控制信号D1CKD2CKEDR1EDR2ALU-OCNMS3S2S1S0接入开关信号PLS1孔PLS1孔H8孔H7孔H6孔H5孔H4孔H3孔H2孔H1孔H0孔ALU-IN(8芯的盒型插座)与右板上的二进制开关单元中J01插座相连(对应二进制开关H16~H23),把ALU-OUT(8芯的盒型插座)与数据总线上的DJ2相连。

2.把D1CK 和D2CK用连线连到脉冲单元的PLS1上,把EDR1,EDR2,ALU-O,S0,S1,S2,S3,CN,M接入二进制开关(请按右表连线)·按启停单元中的运行按钮,使实验平台处于运行状态。

·二进制开关H16~H23作为数据输入,置33H(对应开关如下表)。

H23H22H21H20H19H18H17D7D60D51D41D30D20D11H16D01数据总线表8位数据33H置各控制信号如下:H8H7H6H5H4H3S31H2S21H1S11H0S00EDR1EDR2ALU-OCNM0·按脉冲单元中的PLS1脉冲按键,在D1CK上产生一个上升沿,把33H打入DR1数据锁存器,通过逻辑笔或示波器来测量确定DR1寄存器(74LS374)的输出端,检验数据是否进入DR1中。

·二进制开关H16~H23作为数据输入,置55H(对应开关如下表)。

徐洁《计算机组成原理与汇编语言程序设计》课后 答案

徐洁《计算机组成原理与汇编语言程序设计》课后 答案

徐洁《计算机组成原理与汇编语言程序设计》课后答案第一章答案1.计算机中的基本逻辑运算有哪些?–与运算:当两个操作数都为1时,结果为1,否则为0。

符号:&–或运算:当两个操作数中至少有一个为1时,结果为1,否则为0。

符号:|–非运算:对操作数中的每一位取反。

符号:~2.什么是数据在计算机中的表示形式?数据在计算机中的表示形式是用二进制数表示的。

计算机中的所有数据(包括数字、字符、图像、声音等)都是通过二进制码来表示的。

3.简述冯·诺依曼体系结构的特点。

冯·诺依曼体系结构的特点包括:存储程序方式、以二进制表示数据和指令、指令和数据存储在同一存储器中、按顺序执行指令、指令由控制器解释执行。

4.简述冯·诺依曼计算机的工作原理。

冯·诺依曼计算机的工作原理是,首先将程序和数据存储在存储器中,然后由控制器按照指令的顺序解释执行这些指令,并在执行过程中对数据进行处理,最后将结果存储到相应的位置。

5.什么是存储器的层次结构?存储器的层次结构指的是计算机系统中不同层次的存储器之间的关系和连接方式。

通常从上到下可以分为:高速缓存、内存(主存)、磁盘存储器等。

第二章答案1.什么是字长?字长是指计算机中一次能处理的二进制位数,它决定了计算机能处理的数据的大小范围。

例如,一个字长为16位的计算机,可以处理的最大数据范围是0~65535。

2.简述定点数的表示方法。

定点数是一种用二进制数表示的数,可以表示整数、小数或带符号的数。

定点数的表示方法有原码表示法、反码表示法和补码表示法等。

3.简述浮点数的表示方法。

浮点数是一种表示实数的方法,可以表示带有小数点的数。

浮点数的表示方法包括符号位、指数位和尾数位三部分,其中指数位用来表示小数点的位置,尾数位用来表示实际的数值。

4.什么是ASCII码? ASCII码是一种用来表示字符的编码系统,它使用一个字节(8位)来表示一个字符。

ASCII码包括128个字符,包括数字、字母、标点符号等。

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

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

2 课程设计内容与要求内容:计算机组成原理算法实现(五)要求:课题③能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。

3 功能模块详细设计3.1 主窗体设计系统进入(主)窗体的设计:菜单需要在输入口令正确后方可激活使用。

口令输入错误时要给出重新输入口令的提示,三次口令输入错误应该禁止使用。

具体现实如下:窗体由visual studio 2017 中c#窗体设计中的各种UI插件完成,如label、button、textbox、messagebox等插件组合完成,在插件的使用中还可以改变字体背景大小颜色,例如我插入了图片,label背景颜色为透明。

插件还可以输入口令后直接回车进入在进入此页面后,未显示任何菜单栏选项,只有正确输入口令后方可进入菜单窗体进行能使用,三次失败后便立即退出,此处用到了if(equal())语句,只有密码相等才可以效果图如下:这些弹窗均由messagebox插件完成。

3.2菜单窗体这些便是这次实验设计的所完成的主要功能,包括逻辑运算、定点整数的补码加减,定点整数的原码乘法,浮点数的加减运算.此外,窗体的交替由 hide()和show()方法表示。

3.3 逻辑运算窗体设计逻辑运算分为逻辑加、逻辑非,逻辑乘和逻辑异,即上课所学的交非并异或四种逻辑运算,主要由textbox插件接收输入的数字,然后通过if语句判断进行结果输出,如非运算就是“1”→“0”,“0”→“1”,通过数组遍历,一个一个往后检查直至全部替换完毕,逻辑乘即是并,逻辑非关键代码如下所示:if (a[i] == '0') d[i] = '1';if (a[i] == '1') d[i] = '0';}c = new string(d);通过实体化具体输出后进行数组遍历改变,同理其余的逻辑运算只需要加上if 语句条件,结果效果如下图所示:另外,输入按钮由foucus()函数控制,点击输入后无论鼠标原来在哪,都会重新在第一行,返回依然是hide() 和show()函数,即隐藏此页面,显示菜单窗体。

3.4 定点整数的单符号位加减运算加减运算通过求出原码反码补码然后利用补码进行加法运算,运用到了自定义函数,附于附录之中。

首先定义原码函数,即将符号位换位0或1表示,接着运用if函数进行取反,最后判断最后一位求出补码。

效果图如下如果是减法的话,便是求出第二个数相反数的补码,再次相加,此时再自定义三个函数,唯一区别在于原码,即如果是“+”是“0”,而“-”是“1”,最后补码套用加法函数这样:this.no4.Text=(AddBinary(BM(FM(YM(this.no1.Text))),BM(FM(JYM(this.no2.Te xt)))));效果图如下:3.5 定点整数的原码乘法窗体设计定点整数原码的乘法,是基于加法之上的,在进行每一次求积的过程时,都需要将乘积保存下来,按照我的设计思路,实现方法如下所述:首先,创建BYM()函数,这个函数的目的是将带符号的定点整数化为原码进行此后的运算,然后开始一位一位的进行乘法运算,最后,乘法的关键,自定义了一个乘法函数YMYWmultip(),自己理解的位置的关系进行加法,最后,通过逻辑异或运算,即同号为0,保证结果的符号正确。

3.6 浮点数的加减运算窗体设计浮点数的加减运算是上课时老师一步一步做的,在实现这个功能时,逻辑是与写题时相同的,首先将阶码和尾数变成原码,接着反码、补码。

第一步,对阶,第一个数和第二个数进行对阶,产生偏移量改变阶码,第二步,尾数求和,尾数的补码相加,第三步,规格化,再次产生偏移量,改变阶码,继而进行尾数处理,最后,判断溢出。

再次让补码变成原码输出。

而减法不同的便是尾数求和这一步,原理与前面的单符号位加减运算相同,区别在于符号位由一位变为两位。

以上均要判断正负溢出,具体在代码之中,效果图如下:3.7 窗体的美观设计在c#窗体设计中,有许多可以美观优化的地方,这些均可以使用插件的属性进行设计改变。

如:颜色,字体大小,名称,背景图片都可以在这一栏进行设计,比如,我在插件background中插入图片,其余插件为透明色,边框为粉红,窗体弹出设为居中,使窗体更美观简洁。

4 设计小结这次计算机组成原理课设大大提升了我的c#编程能力,原先没有掌握的的数据类型转换,基本函数也在大脑中留下了记忆,在这次实验中,同学们积极讨论,使自己对于补码和浮点数的相关知识得到了夯实巩固,其原理得到了理解,感谢于同学的帮助,原先我们大部分是编程控制台代码,这一次,是窗体设计,受益良多,自身又得到了提高。

参考文献[1] 白中英. 计算机组成原理(第五版)[M]. 北京: 科学出版社, 2010.[1] 明日科技. c#从入门到精通(第三版)[M]. 北京: 清华大学出版社, 2010.附录代码主窗体代码public partial class Form1 : Form{int n = 3;public Form1(){InitializeComponent();}private void groupBox1_Enter(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){string kl = this.textBox1.Text;if (kl.Equals("")){n--;MessageBox.Show("口令不能为空!你还有" + n + "次机会");}else{if (kl.Equals("111")){MessageBox.Show("登录成功!");new Form7().Show();this.Hide(); }else{n--;MessageBox.Show("口令错误!你还有"+n+"次机会");}}if (n < 1) { this.Close(); }}private voidtextBox1_TextChanged(object sender, EventArgs e) {}private void Form1_Load(object sender, EventArgs e){}}菜单代码:public partial class Form7 : Form{public Form7(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){new Form2().Show();this.Hide();}private void button2_Click(object sender, EventArgs e){new Form3().Show();this.Hide();}private void button3_Click(object sender, EventArgs e){new Form4().Show();this.Hide();}private void button4_Click(object sender, EventArgs e){new Form5().Show();this.Hide();}private void Form7_Load(object sender, EventArgs e){ }}逻辑运算窗体代码:namespace WindowsFormsApp1{public partial class Form2 : Form{public Form2(){InitializeComponent();}private void label2_Click(object sender, EventArgs e){}private void button6_Click(object sender, EventArgs e){new Form7().Show();this.Hide();}private void button1_Click(object sender, EventArgs e){no1.Focus();}private void label1_Click(object sender, EventArgs e){}private void button2_Click(object sender, EventArgs e) {string a = this.no1.Text;char[] b = a.ToCharArray();string c = this.ans.Text;int l = this.no1.Text.Length;char[] d = new char[l];for (int i = 0; i < l; i++){if (b[i] != '0' && b[i] != '1') {MessageBox.Show("只能输入0或1");}else{if(a[i] == '0') d[i] = '1';if(a[i] == '1') d[i] = '0'; }c = new string(d);this.ans.Text = c;}}private void button3_Click(object sender, EventArgs e){string a = this.no1.Text;char[] b = a.ToCharArray();string c = this.ans.Text;string f = this.no2.Text;char[] g = f.ToCharArray();int l = this.no1.Text.Length;char[] d = new char[l];for (int i = 0; i < l; i++){if (b[i] != '0' && b[i] != '1') {MessageBox.Show("只能输入0或1");}else{if(a[i]=='0'&& g[i]=='0') d[i] = '0';else d[i] = '1';}}c = new string(d);this.ans.Text = c;}private void button4_Click(object sender, EventArgs e){string a = this.no1.Text;char[] b = a.ToCharArray();string c = this.ans.Text;string f = this.no2.Text;char[] g = f.ToCharArray();int l = this.no1.Text.Length;char[] d = new char[l];for (int i = 0; i < l; i++){if (b[i] != '0' && b[i] != '1') {MessageBox.Show("只能输入0或1");}else{ if (a[i] == '1' && g[i] == '1') d[i] = '1';else d[i] = '0'; }}c = new string(d);this.ans.Text = c;}private void button5_Click(object sender, EventArgs e){string a = this.no1.Text;char[] b = a.ToCharArray();string c = this.ans.Text;string f = this.no2.Text;char[] g = f.ToCharArray();int l = this.no1.Text.Length;char[] d = new char[l];for (int i = 0; i < l; i++){if (b[i] != '0' && b[i] != '1') { MessageBox.Show("只能输入0或1");}else{if(a[i] == g[i]) d[i] = '0';else d[i] = '1';}}c = new string(d);this.ans.Text = c;}private void no1_TextChanged(object sender, EventArgs e){}private void Form2_Load(object sender, EventArgs e){} }}定点整数的单符号位补码加减运算窗体:namespace WindowsFormsApp1{public partial class Form3 : Form{public Form3(){InitializeComponent();}public string YM(string n){string ym;if (n.Substring(0, 1) == "+"){//输入的是正数,符号位输出0ym = "0" + n.Substring(1,n.Length - 1);}else if (n.Substring(0, 1) == "-") {ym = "1" + n.Substring(1,n.Length - 1);}//输入的是负数,符号位输出1else{MessageBox.Show("请输入符号");return"数据出错!";}return ym;}public string JYM(string n){string jym;if (n.Substring(0, 1) == "+"){//输入的是正数,符号位输出0jym = "1" + n.Substring(1,n.Length - 1);}else if (n.Substring(0, 1) == "-") {jym = "0" + n.Substring(1,n.Length - 1);}//输入的是负数,符号位输出1else{MessageBox.Show("请输入符号");return"数据出错!";}return jym;}public string JFM(string jym){string jfm = jym.Substring(0, 1);if (jym.Substring(0, 1) == "0"){//输入的是正数jfm = jym;}else if(jym.Substring(0, 1) == "1") {for (int i = 1; i < jym.Length; i++){if (jym.Substring(i, 1) == "0") jfm = jfm + "1";else if(jym.Substring(i, 1) == "1") jfm = jfm + "0";}}return jfm;}public string FM(string ym){string fm=ym.Substring (0,1);if (ym.Substring(0, 1) == "0"){//输入的是正数fm=ym;}else if (ym.Substring(0, 1) == "1") {for(int i=1;i<ym.Length; i++) {if (ym.Substring(i, 1) == "0") fm = fm + "1";else if(ym.Substring(i, 1) == "1") fm = fm + "0";}}return fm;}private static string AddBinary(string a, string b){//找出最长的加1,留1位进位var max = Math.Max(a.Length,b.Length) + 1;//按总长度补位,以便统一处理,否则要考虑边界var a2 = a.PadLeft(max, '0');var b2 = b.PadLeft(max, '0');//定义list存中间计算结果var list = new List<int>();//进位标志var carryFlag = false;for (int i = max - 1; i >= 0; i--) {var add =int.Parse(a2[i].ToString()) +int.Parse(b2[i].ToString());//计算当前位的值,如果之前进位标志为真,则额外+1if (carryFlag) add++;//大于等于2时,此时仍然需要进位,带入下一次循环carryFlag = add >= 2;//存入中间计算结果list.Add(add % 2);}//定义结果var res = string.Empty;//反转,list是按逆序从低位到高位的 list.Reverse();//遍历输出到reslist.ForEach(r => { res +=r.ToString(); });//取消最高位0res = res.Substring(1, res.Length - 1);//res = res.TrimStart('0');//如果空了,返回0if (res.Length == 0) res = "0";//返回结果return res;}public string BM(string fm){string bm = fm.Substring(0, 1);if (fm.Substring(0, 1) == "0"){//输入的是正数bm = fm;}else if (fm.Substring(0, 1) == "1") {if(fm.Substring(fm.Length - 1, 1) == "0") bm = fm.Substring (0,fm.Length -1) + "1";else if(fm.Substring(fm.Length - 1, 1) == "1") bm = AddBinary(fm, "1");}return bm;}public string JBM(string jfm){string jbm = jfm.Substring(0, 1);if (jfm.Substring(0, 1) == "0"){//输入的是正数jbm = jfm;}else if(jfm.Substring(0, 1) == "1") {if (jfm.Substring(jfm.Length - 1, 1) == "0") jbm = jfm.Substring (0,jfm.Length -1) + "1";else if(jfm.Substring(jfm.Length - 1, 1) == "1") jbm = AddBinary(jfm, "1");}return jbm;}private void label5_Click(object sender, EventArgs e){}private void label3_Click(object sender, EventArgs e){}private void button4_Click(object sender, EventArgs e){new Form7().Show();this.Hide();}private void button1_Click(object sender, EventArgs e){no1.Focus();}private void Form3_Load(object sender, EventArgs e){}private void no1_TextChanged(object sender, EventArgs e){}private void button2_Click(object sender, EventArgs e ){this.no3.Text =AddBinary(BM(FM(YM(this.no1.Text))),BM(FM(YM(this.no2.Text))));}private void no4_TextChanged(object sender, EventArgs e){}private void button3_Click(object sender, EventArgs e){/*MessageBox.Show(YM(this.no1.Text)); MessageBox.Show(FM(YM(this.no1.Text))); MessageBox.Show(BM(FM(YM(this.no1.Text)))); MessageBox.Show(YM(this.no2.Text)); MessageBox.Show(FM(YM(this.no2.Text)));MessageBox.Show(BM(FM(YM(this.no2.Text))));*/this.no4.Text =(AddBinary(BM(FM(YM(this.no1.Text))),BM(FM(JYM(this.no2.Text)))));}}}定点整数的原码乘法public static string BYM(string n)//无符号原码 {string ym;if (n.Substring(0, 1) == "+"){//输入的是正数,符号位输出0ym = n.Substring(1, n.Length - 1);}else if (n.Substring(0, 1) == "-") {ym = n.Substring(1, n.Length - 1);}//输入的是负数,符号位输出1else{MessageBox.Show("请输入符号");return"数据出错!";}string temp = ym.Substring(0, 1);if (ym.Length < 8){for(int m = 1; m <= 8 - ym.Length; m++){temp = temp + "0";}}return ym;}public string YMYWmultip(string bcym, string cym){int bclen = bcym.Length;int clen = cym.Length;string sum = "0";//string []sum = new string[] { };for (int i = clen - 1; i >= 0; i--) {if (cym.Substring(i, 1) == "1") {//MessageBox.Show(bcym.PadRight(bclen + clen - i - 1, '0'));sum = AddBinary(sum, bcym.PadRight(bclen + clen - i - 1, '0'));}}return sum;}private static string AddBinary(string a, string b){//找出最长的加1,留1位进位var max = Math.Max(a.Length,b.Length) + 1;//按总长度补位,以便统一处理,否则要考虑边界var a2 = a.PadLeft(max, '0');var b2 = b.PadLeft(max, '0');//定义list存中间计算结果var list = new List<int>();//进位标志var carryFlag = false;for (int i = max - 1; i >= 0; i--) {var add =int.Parse(a2[i].ToString()) +int.Parse(b2[i].ToString());//计算当前位的值,如果之前进位标志为真,则额外+1if (carryFlag) add++;//大于等于2时,此时仍然需要进位,带入下一次循环carryFlag = add >= 2;//存入中间计算结果list.Add(add % 2);}//定义结果var res = string.Empty;//反转,list是按逆序从低位到高位的 list.Reverse();//遍历输出到reslist.ForEach(r => { res +=r.ToString(); });//取消最高位0res = res.TrimStart('0');//如果空了,返回0if (res.Length == 0) res = "0";//返回结果return res; }private void button3_Click(object sender, EventArgs e){new Form7().Show();this.Hide();}private voidtextBox1_TextChanged(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){no1.Focus();}private void button2_Click(object sender, EventArgs e){ans.Text = YMYWmultip(BYM(no1.Text), BYM(no2.Text));bool cf1 = true, cf2 = true;if(no1.Text.Substring(0, 1) == "+") {cf1 = true;}else if(no1.Text.Substring(0, 1) == "-") cf1 = false;if(no2.Text.Substring(0, 1) == "+") {cf2 = true;}else if(no2.Text.Substring(0, 1) == "-") cf2 = false;if (cf1 ^ cf2 == true){ans.Text = "-" + ans.Text;}else ans.Text = "+" + ans.Text;}}}浮点数的加减运算namespace WindowsFormsApp1{public partial class Form5 : Form{public Form5(){InitializeComponent();}public static string AddBinary(string a, string b){//找出最长的加1,留1位进位var max = Math.Max(a.Length, b.Length) + 1;//按总长度补位,以便统一处理,否则要考虑边界var a2 = a.PadLeft(max, '0');var b2 = b.PadLeft(max, '0');//定义list存中间计算结果var list = new List<int>();//进位标志var carryFlag = false;for (int i = max - 1; i >= 0; i--) {var add = int.Parse(a2[i].ToString()) + int.Parse(b2[i].ToString());//计算当前位的值,如果之前进位标志为真,则额外+1if (carryFlag) add++;//大于等于2时,此时仍然需要进位,带入下一次循环carryFlag = add >= 2;//存入中间计算结果 list.Add(add % 2);}//定义结果var res = string.Empty;//反转,list是按逆序从低位到高位的 list.Reverse();//遍历输出到reslist.ForEach(r => { res += r.ToString(); });//取消最高位0//res = res.TrimStart('0');//如果空了,返回0if (res.Length == 0) res = "0";//返回结果return res;}public static string BXYM(string n)//变形原码{string ym;if (n.Substring(0, 1) == "+"){//输入的是正数,符号位输出0ym = "00" + n.Substring(1, n.Length - 1);}else if (n.Substring(0, 1) == "-") {ym = "11" + n.Substring(1, n.Length - 1);}//输入的是负数,符号位输出1else if (n.Substring(0, 2) == "01" || n.Substring(0, 2) == "10"){ym = "11" + n.Substring(2, n.Length - 2);} //正溢出或负溢出else if (n.Substring(0, 2) == "11" || n.Substring(0, 2) == "00"){ym = n;}else{MessageBox.Show("请输入符号"); return "数据出错!";}string temp = ym.Substring(0, 2); if (ym.Length < 8){for (int m = 1; m <= 8 - ym.Length; m++){temp = temp + "0";}ym = temp + ym.Substring(2, ym.Length - 2);}return ym;}public static string BXFM(string ym)//变形反码{string fm = ym.Substring(0, 2);if (ym.Substring(0, 2) == "00"){//输入的是正数fm = ym;}else if (ym.Substring(0, 2) == "11") {for (int i = 2; i <= ym.Length - 1; i++){if (ym.Substring(i, 1) == "0"){fm = fm + "1";}else if (ym.Substring(i, 1) == "1") fm = fm + "0";}}//输入的是负数else{MessageBox.Show("请输入符号"); return "数据出错!";}return fm;}public static string BXBM(string fm) //变形补码{string bm = fm.Substring(0, 2);if (fm.Substring(0, 2) == "00"){bm = fm;}else if (fm.Substring(0, 2) == "11") {if (fm.Substring(fm.Length - 1, 1) == "0"){bm = fm.Substring(0, fm.Length - 1) + "1";}else{bm = AddBinary(fm, "1");}}return bm;}public static string AddBinaryF(string input1, string input2){int strlen = Math.Max(input1.Length, input2.Length) + 1;string output;output = AddBinary(BXBM(BXFM(BXYM(input1))),BXBM(BXFM(BXYM(input2))));if (output.Length > strlen){//MessageBox.Show("过长溢出"); output = output.Substring(output.Length - strlen, strlen);}if (output.Substring(0, 2) == "01") {//正溢出output = BXBM(BXFM(BXYM(output)));if (output.Length > strlen){//MessageBox.Show("过长溢出");output = output.Substring(output.Length - strlen, strlen);}MessageBox.Show("存在正溢出,计算补码结果");output = "00" + output.Substring(2, output.Length - 2);}else if (output.Substring(0, 2) == "10"){//负溢出output = BXBM(BXFM(BXYM(output)));if (output.Length > strlen){//MessageBox.Show("过长溢出");output = output.Substring(output.Length - strlen, strlen);}MessageBox.Show("存在负溢出,计算补码结果");output = "11" + output.Substring(2, output.Length - 2);}else if (output.Substring(0, 2) == "11"){//负溢出output = BXBM(BXFM(BXYM(output)));if (output.Length > strlen){//MessageBox.Show("过长溢出");output = output.Substring(output.Length - strlen, strlen);}MessageBox.Show("结果为负,计算补码结果");output = "11" + output.Substring(2, output.Length - 2);}return output;}private void label2_Click(object sender, EventArgs e){}private void TextBox1_TextChanged(object sender, EventArgs e){}private void button4_Click(object sender, EventArgs e){new Form7().Show();this.Hide();}private void button1_Click(object sender, EventArgs e){no1.Focus();}private void button2_Click(object sender, EventArgs e){string e1, e2, m1, m2, m0, e0; string m1r = "", m2r = "";int strlen, erm = 0, mlm = 0;string em = "";string inputcl = "";int e10, e20, e00;if (no3.Text.Substring(0, 1) == "+") {inputcl = "-" + (no3.Text.Substring(1, no3.Text.Length - 1)); }else if (no3.Text.Substring(0, 1) == "-"){inputcl = "+" + (no3.Text.Substring(1, no3.Text.Length - 1)); }//e1 = BXBM(BXFM(BXYM(no1.Text))); //e2 = BXBM(BXFM(BXYM(inputcl))); strlen = Math.Max(no1.Text.Length, no3.Text.Length) + 1;//e0 = AddBinary(e1, e2);//MessageBox.Show(e0.Length +"|"+strlen);//if (e0.Length > strlen)//{ e0 = e0.Substring(e0.Length - strlen, strlen); }m1 = no2.Text.Substring(3, 6);m2 = no4.Text.Substring(3, 6);e1 = Form4.BYM(no1.Text);e2 = Form4.BYM(no3.Text);if (no1.Text.Substring(0, 1) == "+") {e10 = System.Convert.ToInt32(e1, 2) * 1;}else e10 = System.Convert.ToInt32(e1, 2) * -1;if (no3.Text.Substring(0, 1) == "+"){e20 = System.Convert.ToInt32(e2, 2) * 1;}else e20 = System.Convert.ToInt32(e2, 2) * -1;e00 = e10 - e20;if (e00 >= 0){em = no1.Text;erm = e00;MessageBox.Show("阶码对齐,e1大,e2偏移量:" + erm);}else{em = no3.Text;erm = e00 * -1;MessageBox.Show("阶码对齐,e2大,e1偏移量:" + erm);}//for (int i = 0; i <= erm; i++)//{if (em == no1.Text){m2r = m2.Substring(m2.Length - erm, erm);m2 = m2.Substring(0, m2.Length - erm);MessageBox.Show(m2);m2 = m2.PadLeft(6, '0');MessageBox.Show(m2 + "(" + m2r + ")");}else{m1r = m1.Substring(m1.Length - erm, erm); m1 = m1.Substring(0, m1.Length - erm);MessageBox.Show(m1);m1 = m1.PadLeft(6, '0');MessageBox.Show(m1 + "(" + m1r + ")");}m1 = no2.Text.Substring(0, 1) + m1; m2 = no4.Text.Substring(0, 1) + m2; //MessageBox.Show(m1);//MessageBox.Show(m2);m0 = AddBinary(BXBM(BXFM(BXYM(m1))), BXBM(BXFM(BXYM(m2))));//MessageBox.Show(m0);if (m0.Length > 8){//MessageBox.Show("过长溢出"); m0 = m0.Substring(m0.Length - 8, 8);}if (m0.Substring(0, 2) == "01"){//正溢出m0 = BXBM(BXFM(BXYM(m0)));if (m0.Length > 8){//MessageBox.Show("过长溢出");m0 = m0.Substring(m0.Length - 8, 8);}MessageBox.Show("存在正溢出,计算补码结果:" + m0);m0 = "00" + m0.Substring(2, m0.Length - 2);mlm = m0.Substring(2, m0.Length - 2).IndexOf('1');m0 = m0.Substring(2, m0.Length - mlm);for (int o = 0; o <= mlm - 1; o++) {if (m1r.Length > o) m0 = m0 + m1r.Substring(o, 1);if (m2r.Length > o) m0 = m0 + m2r.Substring(o, 1);}m0 = m0.PadRight(8, '0');}else if (m0.Substring(0, 2) == "10") {//负溢出m0 = BXBM(BXFM(BXYM(m0)));if (m0.Length > 8){//MessageBox.Show("过长溢出");m0 = m0.Substring(m0.Length - 8, 8);}MessageBox.Show("存在负溢出,计算补码结果:" + m0);m0 = "11" + m0.Substring(2, m0.Length - 2);mlm = m0.Substring(2, m0.Length - 2).IndexOf('0');m0 = m0.Substring(2, m0.Length - mlm);for (int o = 0; o <= mlm - 1; o++) {if (m1r.Length > o) m0 = m0 + m1r.Substring(o, 1);if (m2r.Length > o) m0 = m0 + m2r.Substring(o, 1);} m0 = m0.PadRight(6, '0');}else if (m0.Substring(0, 2) == "00") {MessageBox.Show("尾码为正."); MessageBox.Show("找 1 " + m0.Substring(2, m0.Length - 2));mlm = m0.Substring(2, m0.Length - 2).IndexOf('1');MessageBox.Show("计算尾数规格化偏移:" + mlm);m0 = m0.Substring(2, 6).Substring(mlm, 6 - mlm);MessageBox.Show("尾数未规格化:" + m0);for (int o = 0; o <= mlm - 1; o++) {if (m1r.Length > o) m0 = m0 + m1r.Substring(o, 1);if (m2r.Length > o) m0 = m0 + m2r.Substring(o, 1);MessageBox.Show("尾数规格化开始:" + m0);}m0 = m0.PadRight(6, '0');m0 = "00" + m0;MessageBox.Show("尾数规格化结束:" + m0);}else if (m0.Substring(0, 2) == "11") {MessageBox.Show("尾码为负,最终将使用补码结果:" + m0);MessageBox.Show("找0 " + m0.Substring(2, m0.Length - 2));mlm = m0.Substring(2, m0.Length - 2).IndexOf('0');MessageBox.Show("计算尾数规格化偏移:" + mlm);m0 = m0.Substring(2, 6).Substring(mlm, 6 - mlm);MessageBox.Show("尾数未规格化:" + m0);for (int o = 0; o <= mlm - 1; o++) {if (m1r.Length > o) m0 = m0 + m1r.Substring(o, 1);if (m2r.Length > o) m0 = m0 + m2r.Substring(o, 1);MessageBox.Show("尾数规格化:" + m0);}m0 = m0.PadRight(6, '0');m0 = "11" + m0;MessageBox.Show("尾数规格化:" + m0);}//e0 = System.Convert.ToString(System.Convert.ToInt32 (em, 2) - mlm, 2);MessageBox.Show("计算阶码偏移,当前阶码:" + em + ",偏移量:" + "-" + System.Convert.ToString(mlm, 2));//e0 = AddBinary(BXBM(BXFM(BXYM(em))),BXBM(BXFM(BXYM("-" + System.Convert.ToString(mlm,2)))));e0 = AddBinaryF(em, "-" + System.Convert.ToString(mlm, 2));MessageBox.Show(e0);if (e0.Length > 5){//MessageBox.Show("过长溢出"); e0 = e0.Substring(m0.Length - 5, 5); }//if (e0.Substring(0,2)=="11") e0 = BXBM(BXFM(e0));if (m0.Substring(0, 2) == "11") m0 = BXBM(BXFM((m0)));if (m0.Length > 8){//MessageBox.Show("过长溢出"); m0 = m0.Substring(m0.Length - 8, 8);}if (m1r.Length > mlm){if (m1r.Substring(mlm, 1) == "1") m0 = AddBinaryF(m0, "+1");}if (m2r.Length > mlm){if (m2r.Substring(mlm, 1) == "1") m0 = AddBinaryF(m0, "+1");}if (m0.Length > 8){//MessageBox.Show("过长溢出"); m0 = m0.Substring(m0.Length - 8, 8);}ans1.Text = e0;ans2.Text = m0;}private void ans4_TextChanged(object sender, EventArgs e){}private void button3_Click(objectsender, EventArgs e){string e1, e2, m1, m2, m0, e0;string m1r = "", m2r = "";int strlen, erm = 0, mlm = 0;string em = "";string inputcl = "";int e10, e20, e00;if (no3.Text.Substring(0, 1) == "+") {inputcl = "-" + (no3.Text.Substring(1, no3.Text.Length - 1)); }else if (no3.Text.Substring(0, 1) == "-"){inputcl = "+" + (no3.Text.Substring(1, no3.Text.Length - 1)); }//e1 = BXBM(BXFM(BXYM(no1.Text))); //e2 = BXBM(BXFM(BXYM(inputcl))); strlen = Math.Max(no1.Text.Length, no3.Text.Length) + 1;//e0 = AddBinary(e1, e2);//MessageBox.Show(e0.Length +"|"+strlen);//if (e0.Length > strlen)//{ e0 = e0.Substring(e0.Length - strlen, strlen); }m1 = no2.Text.Substring(3, 6);m2 = no4.Text.Substring(3, 6);e1 = Form4.BYM(no1.Text);e2 = Form4.BYM(no3.Text);if (no1.Text.Substring(0, 1) == "+") {e10 = System.Convert.ToInt32(e1, 2) * 1;} else e10 = System.Convert.ToInt32(e1, 2) * -1;if (no3.Text.Substring(0, 1) == "+") {e20 = System.Convert.ToInt32(e2, 2) * 1;}else e20 = System.Convert.ToInt32(e2, 2) * -1;e00 = e10 - e20;if (e00 >= 0){em = no1.Text;erm = e00;MessageBox.Show("阶码对齐,e1大,e2偏移量:" + erm);}else{em = no3.Text;erm = e00 * -1;MessageBox.Show("阶码对齐,e2大,e1偏移量:" + erm);}//for (int i = 0; i <= erm; i++)//{if (em == no1.Text){m2r = m2.Substring(m2.Length - erm, erm);m2 = m2.Substring(0, m2.Length - erm);MessageBox.Show(m2);m2 = m2.PadLeft(6, '0');MessageBox.Show(m2 + "(" + m2r + ")");}else{m1r = m1.Substring(m1.Length - erm, erm);m1 = m1.Substring(0, m1.Length - erm);MessageBox.Show(m1);m1 = m1.PadLeft(6, '0');MessageBox.Show(m1 + "(" + m1r + ")");}m1 = no2.Text.Substring(0, 1) + m1; m2 = no4.Text.Substring(0, 1) + m2; //MessageBox.Show(m1);//MessageBox.Show(m2);if (m2.Substring(0, 1) == "+"){m2 = "-" + m2.Substring(1, m2.Length - 1);}elsem2 = "+" + m2.Substring(1, m2.Length - 1);m0 = AddBinary(BXBM(BXFM(BXYM(m1))), BXBM(BXFM(BXYM(m2))));//MessageBox.Show(m0);if (m0.Length > 8){//MessageBox.Show("过长溢出"); m0 = m0.Substring(m0.Length - 8, 8);}if (m0.Substring(0, 2) == "01"){//正溢出m0 = BXBM(BXFM(BXYM(m0)));if (m0.Length > 8){//MessageBox.Show("过长溢出");m0 = m0.Substring(m0.Length - 8, 8);}MessageBox.Show("存在正溢出,计算补码结果:" + m0);m0 = "00" + m0.Substring(2, m0.Length - 2);mlm = m0.Substring(2, m0.Length - 2).IndexOf('1');m0 = m0.Substring(2, m0.Length - mlm);for (int o = 0; o <= mlm - 1; o++) {if (m1r.Length > o) m0 = m0 + m1r.Substring(o, 1);if (m2r.Length > o) m0 = m0 + m2r.Substring(o, 1);}m0 = m0.PadRight(8, '0');}else if (m0.Substring(0, 2) == "10") {//负溢出m0 = BXBM(BXFM(BXYM(m0)));if (m0.Length > 8){//MessageBox.Show("过长溢出");m0 = m0.Substring(m0.Length - 8, 8);}MessageBox.Show("存在负溢出,计算补码结果:" + m0);m0 = "11" + m0.Substring(2, m0.Length - 2);。

相关文档
最新文档