线性表的基本运算及多项式的算术运算

线性表的基本运算及多项式的算术运算
线性表的基本运算及多项式的算术运算

#include

class Polynominal;

class Term

{

public:

Term(int c,int e);

Term(int c,int e,Term *nxt);

Term* InsertAfter(int c,int e);

private:

int coef;

int exp;

Term* link;

friend ostream & operator <<(ostream &,const Term &); friend class Polynominal;

};

Term::Term(int c,int e):coef(c),exp(e)

{

link=0;

}

Term::Term(int c,int e,Term *nxt):coef(c),exp(e)

{

link=nxt;

}

Term* Term::InsertAfter(int c,int e)

{

link=new Term(c,e,link);

return link;

}

ostream &operator <<(ostream & out ,const Term&val) {

if (val.coef==0)

{

return out;

}

out<

switch (val.exp)

{

case 0:break;

case 1:out<<"x";break;

default:out<<"x^"<

}

return out;

}

class Polynominal

{

public:

Polynominal();

~Polynominal();

void AddTerms(istream &in);

void Output(ostream & out)const;

void Output()const;

void PolyAdd(Polynominal &r);

void PolyMultiplication(Polynominal &r);

private:

Term* theList;

friend ostream & operator <<(ostream &,const Polynominal&); friend istream & operator >>(istream &,Polynominal &);

friend Polynominal & operator +(Polynominal &,Polynominal &); friend Polynominal & operator *(Polynominal &,Polynominal &); };

Polynominal::Polynominal()

{

theList=new Term(0,-1);

theList->link=theList;

}

Polynominal::~Polynominal()

{

Term* p=theList->link;

while (p!=theList)

{

theList->link=p->link;

delete p;

p=theList->link;

}

delete theList;

}

void Polynominal::AddTerms(istream &in)

{

Term *q=theList;

int c,e;

for (;;)

{

cout<<"Input a term (coef,exp):\n"<

cin>>c>>e;

if (e<0)

{

break;

}

q=q->InsertAfter(c,e);

}

}

void Polynominal::Output(ostream & out)const {

int first=1;

Term *p=theList->link;

cout<<"The polynominal is:\n"<

for(;p!=theList;p=p->link)

{

if(!first&&(p->coef>0))

cout<<"+";

first=0;

cout<<*p;

}

cout<<"\n"<

}

void Polynominal::Output()const

{

int first=1;

Term *p=theList->link;

cout<<"The polynominal is:\n"<

for(;p!=theList;p=p->link)

{

if(!first&&(p->coef>0))

cout<<"+";

first=0;

cout<<*p;

}

cout<<"\n"<

}

void Polynominal::PolyAdd(Polynominal &r) {

Term *q,*q1=theList,*p;

p=r.theList->link;

q=q1->link;

while(p->exp>=0)

{

while(p->expexp)

{

q1=q;

q=q->link;

}

if (p->exp==q->exp)

{

q->coef=q->coef+p->coef;

if (q->coef==0)

{

q1->link=q->link;

delete (q);

q=q1->link;

}

else

{

q1=q;

q=q->link;

}

}

else

{

q1=q1->InsertAfter(p->coef,p->exp);

}

p=p->link;

}

}

void Polynominal::PolyMultiplication(Polynominal &r)

{

Term *q, *q1=theList,*p,*t; //q1指向头结点

Polynominal *s,w; //指针s用于申请动态空间,w做临时储存器

p=r.theList->link; //p指向第一个要处理的节点

q=q1->link; //q1是q的前驱,p和q就指向两个操作项

while(p->exp>=0&&q->exp>=0)

{

s=new Polynominal; //申请动态空间

t=s->theList->link; //t指向新申请的空间

t->InsertAfter(q->coef*p->coef,q->exp+p->exp); //在新申请的空间中插入两项相乘结果

if (q->link!=theList) //判断遍历是否结束

q=q->link;

else

{

p=p->link;

q=q1->link; //由于二项式链表是循环链表,此句即为q指向头结点

}

w.PolyAdd(*s); //在临时储存器中插入s

}

delete s; //释放动态空间s

Term * m=theList->link; //以下几句为将原来节点删除while (m!=theList)

{

theList->link=m->link;

delete m;

m=theList->link;

}

theList->link=theList;

this->PolyAdd(w); //将w付给this指针

}

ostream& operator<<(ostream & out ,const Polynominal &x)

{

x.Output(out);

return out;

}

istream & operator>>(istream &in ,Polynominal &x)

{

x.AddTerms(in);

return in;

}

Polynominal & operator +(Polynominal &a,Polynominal &b)

{

a.PolyAdd(b);

return a;

}

Polynominal & operator *(Polynominal &a,Polynominal &b)

{

a.PolyMultiplication(b);

return a;

}

int main()

{

Polynominal p,q;

cin>>p;

cout<

cin>>q;

cout<

//q=q+p;

q=q*p;

cout<

return 0;

}

线性表顺序存储结构上的基本运算

实验项目名称:线性表的顺序存储结构上的基本运算 (所属课程:数据结构--用C语言描述) 院系:计算机科学与信息工程学院专业班级:网络工程 姓名:000000 学号:0000000000 实验日期:2016.10.20 实验地点:A-06 406 合作者:指导教师:孙高飞 本实验项目成绩:教师签字:日期: (以下为实验报告正文) 一、实验目的 本次实验的目的掌握顺序表的存储结构形式及其描述和基本运算的实现;掌握动 态链表结构及相关算法设计 实验要求:输入和验证程序例题。正确调试程序,记录程序运行结果。完成实验报 告。 二、实验条件 Windows7系统的电脑,vc++6.0软件,书本《数据结构--用c语言描述》 三、实验内容 3.1 根据41页代码,用c语言定义线性表的顺序存储结构。 3.2 根据42页算法2.1实现顺序表的按内容查找。 3.3 根据43页算法2.2实现顺序表的插入运算。 3.4 根据45页算法2.3实现顺序表的删除运算。 四、实验步骤 3.2实验步骤 (1)编写头文件,创建ElemType。 (2)根据根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。

(3)根据42页算法2.1实现顺序表的按内容查找,创建Locate函数。 (4)创建main函数,输入SeqList L的数据元素。 (5)输入要查找的数据元素的值,调用Locate函数,输出结果。 3.3实验步骤 (1)编写头文件,创建ElemType。 (2)根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。 (3)根据43页算法2.2实现顺序表的插入运算,创建InsList函数。 (4)创建printList函数,逐项输出顺序表内的元素及顺序表元素的个数。 (5)创建main函数,输入插入的元素和其位置,调用printLinst函数输出顺序表,调用IntList函数,再次调用printLinst函数输出顺序表。 3.4实验步骤 (1)编写头文件,创建ElemType。 (2)根据根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。 (3)根据45页算法2.3实现顺序表的删除运算,创建DelList函数。 (4)创建printList函数,逐项输出顺序表内的元素及顺序表元素的个数。 (5)创建main函数,输入删除元素的位置,调用printLinst函数输出顺序表,调用DelList函数,再次调用printLinst函数输出顺序表。 五、实验结果 (1)实验3.2顺序表的按内容查找 # include typedef int Elemtype; typedef struct{ Elemtype elem[100]; int last; }SeqList; int Locate(SeqList L,Elemtype e){ int i; i=0;

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

实验报告 、实验名称 运算器实验—算术逻辑运算实验 、实验目的 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 脉冲到来。 数据开关“( INPUT DEVICE")用来给出参与运算的数据,经过三态 (74LS245) 后送入数据总线,三态门由SW—B控制,低电平有效。数据显示灯“( BUS UNIT") 已和数据总线相连,用来显示数据总线上的内容。 图中已将用户需要连接的控制信号用圆圈标明(其他实验相同,不再说明),其中除T4 为脉冲信号外,其它均为电平信号。由于实验电路中的时序信号均已连至“W/R UNIT ”的相应时序信号引出端,因此,在进行实验时,只需将“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 为高电平有效。 对单总线数据通路,需要分时共享总线,每一时刻只能由一组数据送往总线。

C51的基本运算

C51的基本运算 1) C51的算术和赋值运算 (1)算术运算符和算术表达式 C51语言一共支持5种算术运算符号。 运算符意义说明 +加法运算或正值符号 -减法运算或负值符号 *乘法运算符号 /除法运算符号,求整5/2,结果为2 %除法运算符号,求余5%2,结果为 1 在C51语言中把用算术运算符和括号将运算对象连接起来的式子称为算术表达式,运算对象包括常量、变量、函数、数组和结构等。 在算术表达式中需要遵守一定的运算优先级,规定先乘(余),后加减,括号优先级最高,同级别从左到右,规律和数学计算相同。2)赋值运算符和赋值表达式 赋值运算符包括普通赋值运算符和复合赋值运算符两种,普通的赋值运算符使用“=”,复合赋值运算符是在普通赋值运算符之前加上其他运算符所构成的赋值符。使用赋值运算符连接的变量和表达式构成赋值表达式。 赋值运算表达式举例: a=3*z; a+=b; /*等同于a=a+b* 赋值运算涉及变量类型的转换,一般分为两种: 一种是自动转换,一种是强制转换。 自动转换:不使用强制类型转化符,而是直接将赋值运算符号右边表达式或变量的值类型转化为左边的类型,一般是从“低字节宽度”向“高字节宽度”转换。 类型说明 浮点型和整型浮点类型变量转化为整型时小数点部分被省略,只保留整数部分;反之只把整型修改为浮点型 单、双精度浮点型单精度变量转化为双精度时在尾部添0,反之进行四舍五入的截断操作 字符型和整型字符型变量转化为整型时,仅仅修改其类型;反之只保留整型的低八位

强制转换:使用强制类型转化符来将一种类型转化为另一种类型,强制类型转化符号和变量类型相同。 强制类型转化举例 double(y); /*将y转化为double类型*/ int(x); z=unsigned char(x+y); /*将double类型数据y和int类型数据x相加之后转化为unsigned char类型赋给z/* 1)逻辑运算 C51语言有3种逻辑运算符。 ①逻辑与:&&。 ②逻辑或:∥。 ③逻辑非:!。 使用逻辑运算符将表达式或变量连接起来的表达式称为逻辑表达式,逻辑运算内部运算次序是先逻辑非后逻辑与和逻辑或,相同等级时从左到右,逻辑表达式的值为“真”或“假”,在C51系统中使用“0”代 表“假”,使用“非0”代表逻辑“真”,但是逻辑运算表达式结果只能使用“1”来表示“真” 。 逻辑表达式。 若a=3,b=6,则 !a=0; /*a=3,为真,则!a为假0*/ a&&b=1; a∥b=1; 3)关系运算 C51语言有6种关系运算,如下所示。 ①小于:<。 ②大于:>。 ③小于等于:≤。 ④大于等于:≥。 ⑤如果等于:= =。 ⑥如果不等于:!=。 关系运算符。 如果x,y,z的值分别为4,3,2,则 x>y=1; y+z<y=0 x>y>z=0;

组成原理实验1 8位算术逻辑运算

淮海工学院计算机工程学院实验报告书 课程名:《计算机组成原理》 题目:实验一8位算术逻辑运算 实验 班级: 学号: 姓名:

1、目的与要求 1)掌握算术逻辑运算器单元ALU(74LS181)的工作原理。 2)掌握简单运算器的数据传送通路组成原理。 3)验证算术逻辑运算功能发生器74LSl8l的组合功能。 4)按给定数据,完成实验指导书中的算术/逻辑运算。 2、实验设备 ZYE1601B计算机组成原理教学实验箱一台,排线若干。 3、实验步骤与源程序 l) 按下列步骤连接实验线路,仔细检查无误后,接通电源。 ⑴ ALUBUS连EXJ3; ⑵ ALUO1连BUS1; ⑶ SJ2连UJ2; ⑷跳线器J23上T4连SD; ⑸ LDDR1、LDDR2、ALUB、SWB四个跳线器拨在左边(手动方式); ⑹ AR跳线器拨在左边,同时开关AR拨在“1”电平。 2) 用二进制数码开关KD0~KD7向DR1和DR2寄存器置数。方法:关闭ALU输出三态门(ALUB`=1),开启输入三态门(SWB`=0),输入脉冲T4按手动脉冲发生按钮产生。设置数据开关具体操作步骤图示如下: LDDR1=1 LDDR1=0 说明:LDDR1、LDDR2、ALUB`、SWB`四个信号电平由对应的开关LDDR1、LDDR2、ALUB、SWB 给出,拨在上面为“1”,拨在下面为“0”,电平值由对应的显示灯显示,T4由手动脉冲开关给出。 ⑶检验DR1和DR2中存入的数据是否正确,利用算术逻辑运算功能发生器 74LS181的逻辑功能,即M=1。具体操作为:关闭数据输入三态门SWB`=1,打开ALU输出三态门ALUB`=0,当置S3、S2、S1、S0、M为1 1 1 1 1时,总线指示灯显示DR1中的数,而置成1 0 1 0 1时总线指示灯显示DR2中的数。 ⑷验证74LS181的算术运算和逻辑运算功能(采用正逻辑) 在给定DR1=35、DR2=48的情况下,改变算术逻辑运算功能发生器的功能设置,观察运算器的输出,填入表2.1.1中,并和理论分析进行比较、验证。。 4、测试数据与实验结果 实验数据记录

《8位算术逻辑运算实验》

3.2 算术逻辑运算部件 1位全加器 n 位并行加法器 ALU 单元 乘、除 法器 运算器 3.2.1 加法单元 若:+1101,+1111 两数相加,且分别放入A 、B 两个寄存器。 0 0 1 1 0 1 (补码、双符号位表示) +) 0 0 1 1 1 1 0 1 1 1 0 0 第3位:输入量: Ai(1),Bi(1), C i-1(1) 本位进位 C i ∑i C i-1 A i B i 低位进位 本位操作数 输入、输出量之间的关系式: Σi =(A B i C i-1 (1) C i = A i B i A B i )C i-1 (2) 根据上式,得出一位全加器的逻辑电路图: 根据(1)式得: 如果三个输人中1的个数为奇数,则本位和为1,否则为0。 根据(2)式得: 当本位的两个输入A i 、B i 均为1时,不管低位有无进位C i-1传来,都必然产生进位C i ;若C i-1为1,只要A i 、B i 中有一个为1,也必然产生进位。 i-1 i-1 i i i i (a ) (b ) 进位链 选择逻 辑控制 移位器 寄存器组 选择器

3.3.1 2并行加法器与进位逻辑结构 一、串行加法器 1.定义:如果每步只求一位和,将n 位加分成n 步实现,这样的加法器称为串行 加法器。 2.组成: 1 个一位全加器 1个移位寄存器:从低到高串行提供操作数相加; 1个寄存器 1个触发器 3.特点:结构简单,速度极慢。 二、并行加法器 1.定义:如果用n 位全加器一步实现n 位相加,即n 位同步相加,这样的加法器称为并行加法器。 2.组成: n 位加法器 并行加法器 串行进位链 进位链 并行进位链 根据(指C i-1 )输入量提供时间的不同,将进位链分为带串行进位链的并行加法器,带并行进位链的并行加法器。 加法器的运算速度不仅与全加器的运算速度有关,更主要的因素是取决于进位传递速度。 3.进位信号的基本逻辑: C i = A i B i +(A i )C i-1 令Gi= A i B i 进位产生函数 Pi = A i ,进位传递函数 4.串行进位链 (1)定义:各级进位信号直接依赖于低一级的进位信号 (2)关系式: C 1 = G 1 + P 1C 0 C 2 = G 2 + P 2C 1 C 3 = G 3 + P 3C 2 。。。。。。。。。 C n = G n + P n C n-1 (3)结构图:

汇编语言基本算术运算实验

贵州大学实验报告 学院:专业:班级: 姓名学号实验组实验时间指导教师成绩实验项目名称汇编语言基本算术运算 实验目的 1.进一步熟悉CCS进行程序编译,调试的步骤. 2.掌握进行算术运算的常用指令,以及伪指令的作用. 3.掌握汇编语言进行整数运算,小数运算以及双操作数运算.浮点运算的方法.注意双操作数运算所允许使用的辅助寄存器. 实 验 要 求 根据本实验的特点、要求和具体条件,采用教师简单讲解,学生自己动手操作的形式。 实 验 原 理 利用软件对指令进行仿真分析。 实 验 仪 器 计算机一台 实验步骤1、计算 z=x+y-w .title “example.asm” .mmregs STACK .usect “stack”,10H .bss x,1 .bss y,1 .bss w,1 .bss z,1

.def start .data table: .word 10,26,23 .text Start: STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #2 MVPD table,*AR1+ CALL SUMB end: B end SUMB: LD @x,A ADD @y,A SUB @w,A LD #1,DP STL A,@z RET .end 2、乘加运算 .tiltle “example.asm” .mmregs STACK .usect “stack”,10H .bss a,4 .bss x,4 .bss y,1 .def start .data table .word 1,2,3,4 .word 8,6,4,2 .text start: STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #7 MVPD table,*AR1+ CALL SUM end: B end SUM: STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,@Y RET .end

dsp实验1-基本算数运算

电子科技大学通信与信息工程学院标准实验报告 (实验)课程名称DSP设计与实现 电子科技大学教务处制表

电 子 科 技 大 学 实 验 报 告 一、实验室名称:DSP 实验室 二、实验项目名称:基本算术运算 三、实验学时:4 四、实验原理: (1) 定点DSP 中数据表示方法 C54X 是16位的定点DSP 。一个16位的二进制数既可以表示一个整数,也可以表示一个小数。当它表示一个整数时,其最低位(D0)表示02,D1位表示12,次高位(D14)表示142。如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。例如,07FFFH 表示最大的正数32767(十进制),而0FFFFH 表示最大的负数-1(负数用2的补码方式显示)。当需要表示小数时,小数点的位置始终在最高位后,而最高位(D15)表示符号位。这样次高位(D14)表示12-,然后是22-,最低位(D0)表示152 -。所以04000H 表示小数0.5,01000H 表示小数125.02 3=-,而0001H 表示16位定点DSP 能表示的最小的小数(有符号)152-=0.8125。在后面的实验中,除非有特别说明,我们指的都是有符号数。 在C54X 中,将一个小数用16位定点格式来表示的方法是用152乘以该小数,然后取整。 从上面的分析可以看出,在DSP 中一个16进制的数可以表示不同的十进制数,或者是整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘除时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。 (2) 实现16定点加法 C54X 中提供了多条用于加法的指令,如ADD ,ADDC ,ADDM 和ADDS 。其中ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32位扩展精度加法),而ADDM

线性表的基本操作

Status initlist_sq(sqlist &L)//构造一个空的线性表L { L.elem=(elemtype *)malloc(list_init_size * sizeof(elemtype)); if(!L.elem)exit(OVERFLOW); L.length=0; L.listsize= list_init_size; return OK; }//initlist_sq Status destroylist_sq(sqlist &L)//销毁线性表L { L.length=0; L.listsize=0; free(L.elem); return OK; }//destroylist_sq Status clearlist_sq(sqlist &L)//将线性表L重置为空表 { L.length=0; return OK; }//clearlist_sq Status listempty_sq(sqlist L)//判断线性表L是否为空表,是返回TRUE,否返回FALSE { if(L.length==0) return TRUE; else return FALSE; }//listempty_sq Status listlength_sq(sqlist L)//返回线性表L中数据元素个数 { return 0; }//listlength_sq Status getelem_sq(sqlist L,int i,elemtype &e)//用e返回L中的第i个数据元素的值{ e=L.elem[i-1]; return OK;

}//getelem_sq Status locateelem_sq(sqlist L,elemtype e,compare())//在顺序线性表L中查找第1个值与e满足compare()的元素的位序 //若找到,则返回其在L中的位序,否则返回0 { int i=1; elemtype *p=L.elem; while(i<=L.length && !(*compare)(*p++,e)) ++i; if(i<=L.length) return i; else return 0; }//locateelem_sq Status priorelem_sq(sqlist L,elemtype cur_e,elemtype &pre_e) //若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱, //否则操作失败,pre_e无定义 { int i=1; elemtype *p; p=L.elem; for(i=1;i<=L.length;i++) { if((*p++==cur_e) && i!=1) pre_e=L.length[i-1]; else return ERROR; } return OK; }//priorelem_sq Status nextelem_sq(sqlist L,elemtype cur_e,elemtype &next_e) //若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继, //否则操作失败,next_e无定义 { int i=1; elemtype *p; p=L.elem; for(i=1;i<=L.length;i++)

16位算术逻辑运算实验

16 位算术逻辑运算实验 一、实验内容 1、实验原理 实验中所用16位运算器数据通路如图3-3所示。其中运算器由四片74LS181以并/串形成16位字长的ALU构成。低8位运算器的输出经过一个三态门74LS245(U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUS1~6中的任一个相连,低8位数据总线通过LZD0~LZD7显示灯显示;高8位运算器的输出经过一个三态门74LS245(U33`)到ALUO1`插座,实验时用8芯排线和高8位数据总线BUSD8~D15插座KBUS1或KBUS2相连,高8位数据总线通过LZD8~LZD15显示灯显示;参与运算的四个数据输入端分别由四个锁存器74LS273(U29、U30、U29`、U30、)锁存,实验时四个锁存器的输入并联后用8芯排线连至外部数据总线EXD0~D7插座EXJ1~EXJ3中的任一个;参与运算的数据源来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,输入的数据通过LD0~LD7显示。

本实验用到6个主要模块:⑴低8位运算器模块,⑵数据输入并显示模块,⑶数据总线显示模块,⑷功能开关模块(借用微地址输入模块),⑸高8位运算器模块,⑹高8位(扩展)数据总线显示模块。根据实验原理详细接线如下(接线⑴~⑸同实验一): ⑴ALUBUS连EXJ3; ⑵ALUO1连BUS1; ⑶SJ2连UJ2; ⑷跳线器J23上T4连SD; ⑸LDDR1、LDDR2、ALUB、SWB四个跳线器拨在左边(手动方式); ⑹AR跳线器拨在左边,同时开关AR拨在"1"电平; ⑺ALUBUS`连EXJ2;

实验二 算术运算实验

实验二算术运算实验 一、实验目的 1、掌握MASM for Windows 环境下的汇编语言编程环境使用; 2、掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 3、掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志 位的影响及测试方法; 4、掌握无符号数和有符号数运算区别及编程方法; 5、掌握BCD 码调整指令的使用方法 二、软硬件实验环境 1、硬件环境:惠普64 位一体化计算机及局域网; 2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。 三、实验基本原理 算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。 1) 标志位 在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。 表1标志名和状态符号的对照表参照表 2) 加减法指令 ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。 3) 乘除法指令

MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV 表示带符号数除法指令。 4) 符号位扩展指令 CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。 5) BCD码的调整指令 在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。 组合的BCD码加法调整指令DAA; 组合的BCD码减法调整指令DAS; 非组合的BCD码加法调整指令AAA; 非组合的BCD码减法调整指令AAS; 乘法的非组合BCD码调整指令AAM; 除法的非组合BCD码调整指令AAD。 8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。 表2数据类型的数据运算表 四、实验步骤与内容 1)对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响: ①实验分析 本实验要求简单,仅对指定三组数进行基本运算。只需使用ADD、SUB、MUL、DIV四个运算命令,并以MOV命令作为数值转移的手段即可。运算结果和状态标志的情况可以通过debug调试中的T命令进行逐步查看。 需要注意的主要有以下几点: 1.在进行加法和乘法运算时,会出现对高位的进位扩展。因此,在记录结

数据结构_实验1_线性表的基本操作

实验1 线性表的基本操作 一、需求分析 目的: 掌握线性表运算与存储概念,并对线性表进行基本操作。 1.初始化线性表; 2.向链表中特定位置插入数据; 3.删除链表中特定的数据; 4.查找链表中的容; 5.销毁单链表释放空间; 二、概要设计 ●基础题 主要函数: 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 实验步骤: 1,初始化顺序表 2,调用插入函数 3,在顺序表中查找指定的元素 4,在顺序表中删除指定的元素 5,在顺序表中删除指定位置的元素 6,遍历并输出顺序表 ●提高题

要求以较高的效率实现删除线性表中元素值在x到y(x和y自定义)之间的所有元素 方法: 按顺序取出元素并与x、y比较,若小于x且大于y,则存进新表中。 编程实现将两个有序的线性表进行合并,要求同样的数据元素只出现一次。 方法: 分别按顺序取出L1,L2的元素并进行比较,若相等则将L1元素放进L中,否则将L 1,L2元素按顺序放进L。 本程序主要包含7个函数 主函数main() 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 提高题的程序 void Combine(List* L1,List* L2,List* L) void DeleteList3(List* L,int x,int y) 二、详细设计 初始化线性表InitList(List* L,int ms) void InitList(List* L,int ms) { L->list=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); L->size=0; L->MAXSIZE=LIST_INIT_SIZE;

《计算机组成原理》实验报告---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连EXJ3 2) ALU01连BUS1 3) SJ2连UJ2 4) 跳线器J23上T4连SD 5) LDDR1,LDDR2,ALUB,SWB四个跳线器拨在左边 6) AR跳线器拨在左边,同时开关AR拨在“1”电平 2. 核对线路,核对正确后接通电源 3. 用二进制数据开关KD0-KD7向DR1和DR2寄存器置入8位运算数据。

实验二 算术运算类操作实验 (基础与设计)

实验二算术运算类操作实验 (基础与设计) 一、实验要求和目的 1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 2、掌握各类运算类指令对各状态标志位的影响及测试方法; 3、熟悉汇编语言二进制多字节加减法基本指令的使用方法; 4、熟悉无符号数和有符号数乘法和除法指令的使用; 5、掌握符号位扩展指令的使用。 6、掌握BCD 码调整指令的使用方法 二、软硬件环境 1、硬件环境:计算机系统 windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 本实验主要进行算术运算程序设计和调试,涉及到的知识点包括: 1.加减法处理指令 主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。 2.乘除法指令和符号位扩展指令 主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW 和从字扩展到双字的指令CWD。3.BCD 码的调整指令 主要有非压缩的BCD 码加法调整指令DAA,压缩的BCD 码减法调整指令DAS,非压缩的BCD 码加法调整指令AAA,非压缩的BCD 码减法调整指令AAS,乘法的非压缩BCD码调整指令AAM,除法的非压缩BCD 码调整指令AAD。 8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对下表所示的数据类型进行数据运算。 四、实验内容与步骤 1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。 设计流程:

实现顺序表的各种基本运算

实现顺序表的各种基本运算 一、实验目的 了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 1、初始化顺序表; 2、顺序表的插入; 3、顺序表的输出; 4、求顺序表的长度 5、判断顺序表是否为空; 6、输出顺序表的第i位置的个元素; 7、在顺序表中查找一个给定元素在表中的位置; 8、顺序表的删除;9、释放顺序表 三、算法思想与算法描述简图

四、实验步骤与算法实现 #include<> #include<> #define MaxSize 50 typedef char ElemType; typedef struct {ElemType data[MaxSize]; int length; }SqList;//顺序表类型的定义 void InitList(SqList*&L)//初始化顺序表L {L=(SqList*)malloc(sizeof(SqList)); L->length=0; } void DestroyList(SqList*&L)//释放顺序表L {free(L); } int ListEmpty(SqList*L)//判断顺序表L是否为空集{return(L->length==0); } int Listlength(SqList*L)//返回顺序表L的元素个数{return(L->length); } void DispList(SqList*L)//输出顺序表L {int i; if(ListEmpty(L))return; for(i=0;ilength;i++) printf("%c",L->data[i]);

数据结构--线性表的基本运算及多项式的算术运算

数据结构:线性表的基本运算及多项式的算术运算 一、实验目的和要求 实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。 要求: 能够正确演示线性表的查找、插入、删除运算。实现多项式的加法和乘法运算操作。 二、实验环境(实验设备) X64架构计算机一台,Windows 7操作系统, IDE: Dev C++ 5.11 编译器: gcc 4.9.2 64bit 二、实验原理及内容 程序一:实现顺序表和单链表的实现 本程序包含了四个文件,分别是LinearListMain.cpp,linearlist.h,seqlist.h,singlelist.h。分别是主程序,线性表抽象类,顺序储存线性表的实现,链表储存顺序表的实现。 文件之间的关系图:

本程序一共包含了三个类:分别是LinearList(线性表抽象类),SeqList(顺序储存的线性表),SingleList(链表储存的线性表)。类与类之间的关系图如下: 其实,抽象类LinearList规定了公共接口。分别派生了SeqList类和SingleList。

SingleList类与SingleList类分别实现了LinearList类中的所有接口。 程序代码以及分析: Linearlist类: #include using namespace std; template class LinearList { protected: int n; //线性表的长度 public: virtual bool IsEmpty() const=0; //判读是否是空线性表 virtual int Length() const=0; //返回长度 virtual bool Find(int i,T& x) const=0; //将下标为i的元素储存在x中,成功返回true,否则返回false virtual int Search(T x) const=0; //寻找值是x的元素,找到返回true,否则返回false virtual bool Insert(int i,T x)=0; //在下标为i的元素后面插入x

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

实验二算术逻辑运算实验 一、实验目的 (1)了解运算器芯片(74LS181)的逻辑功能。 (2)掌握运算器数据的载入、读取方法,掌握运算器工作模式的设置。 (3)观察在不同工作模式下数据运算的规则。 二、实验原理 1.运算器芯片(74LS181)的逻辑功能 74LS181是一种数据宽度为4个二进制位的多功能运算器芯片,封装在壳中,封装形式如图2-3所示。 5V A1 B1 A2 B2 A3 B3 Cn4 F3 BO A0 S3 S2 S1 S0 Cn M F0 F1 F2 GND 图 2-3 74LS181封装图 主要引脚有: (1)A0—A3:第一组操作数据输入端。 (2)B0—B3:第二组操作数据输入端。 (3)F0—F3:操作结果数据输入端。 (4)F0—F3:操作功能控制端。 (5):低端进位接收端。

(6):高端进位输出端。 (7)M:算数/逻辑功能控制端。 芯片的逻辑功能见表2-1.从表中可以看到当控制端S0—S3为1001、M为0、 为1时,操作结果数据输出端F0—F3上的数据等于第一组操作数据输入端A0—A3上的数据加第二组操作数据输入端B0—B3上的数据。当S0—S3、M、 上控制信号电平不同时,74LS181芯片完成不同功能的逻辑运算操作或算数运算操作。在加法运算操作时,、进位信号低电平有效;减法运算操作时,、 借位信号高电平有效;而逻辑运算操作时,、进位信号无意义。 2.运算器实验逻辑电路 试验台运算器实验逻辑电路中,两片74LS181芯片构成一个长度为8位的运算器,两片74LS181分别作为第一操作数据寄存器和第二操作数据寄存器,一片74LS254作为操作结果数据输出缓冲器,逻辑结构如图2-4所示。途中算术运算操作时的进位Cy判别进位指示电路;判零Zi和零标志电路指示电路,将在实验三中使用。 第一操作数据由B-DA1(BUS TO DATA1)负脉冲控制信号送入名为DA1的第一操作数据寄存器,第二操作数据由B-DA2(BUS TO DATA2)负脉冲控制信号送入名为DA2的第二操作数据寄存器。74LS181的运算结果数据由(ALU TO BUS)低电平控制信号送总线。S0—S3、M芯片模式控制信号同时与两片74LS181的S0—S3、M端相连,保证二者以同一工作模式工作。实验电路的低端进位接收端Ci与低4位74LS181的相连,用于接收外部进位信号。低4为74LS181的与高4位74LS181的上相连,实现高、低4位之间进位信号的传递。高4位之间进位信号的传递。高4位74LS181的送进位Cy判别和进位指示电路。 表2-1 74LS181 芯片逻辑功能表

线性表的基本操作讲解

实验二线性表的基本操作 一、实验目的 1.掌握用C++/C语言调试程序的基本方法。 2.掌握线性表的顺序存储和链式存储的基本运算,如插入、删除等。 二、实验要求 1.C++/C完成算法设计和程序设计并上机调试通过。 2.撰写实验报告,提供实验结果和数据。 3.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。 三、实验内容: 1. 分析并运行以下各子程序的主要功能。 程序1:顺序存储的线性表和运算 #include #define MAXSIZE 100 int list[MAXSIZE]; int n; /*insert in a seqlist*/ int sq_insert(int list[], int *p_n, int i, int x) {int j; if (i<0 || i>*p_n) return(1); if (*p_n==MAXSIZE) return(2); for (j=*p_n+1; j>i; j--) list[j]=list[j-1]; list[i]=x; (*p_n)++; return(0); } /*delete in a seq list*/ int sq_delete(int list[], int *p_n, int i) {int j; if (i<0 || i>=*p_n) return(1); for (j = i+1; j<=*p_n; j++) list[j-1] = list[j]; (*p_n)--; return(0); } void main() {int i,x,temp; printf("please input the number for n\n"); printf("n="); scanf("%d",&n); for (i=0; i<=n; i++) {printf("list[%d]=",i); scanf("%d",&list[i]);}

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

西华大学数学与计算机学院实验报告 课程名称:计算机组成原理年级: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.掌握简单运算器的数据传送通路 目的2.验证运算器功能发生器(74LS181)的组合功能 3.验证带进为控制的算术运算器功能发生器(74LS181)的功能 4.按指定的数据完成几种制定的算术运算 5.验证移位控制的组合功能 实验YY-Z02计算机组成原理教学实验系统一台,排线若干。设备 实验 内容1.实验原理 (算 运算器实验原理图 法、 程 T4______ ALU-B 序、

_____ _____ 进位CyCn 步骤 299-B 判零_____ M 74LS2 电路CyNCn 和方 S0 99 ALU S1 法) (74LS181) S2 S3 _____I/O-RINPUT Ai =“0”B-DA1DA1 (74LS273)DA2

(74LS273)B-DA2 实验中所用的运算器数据通路图如图1-1所示,算术逻辑实验接线图如图1-2所示。图中所示的是由两片段74LS181芯片以并/串形式构成的8位字长的运算器。右方为低压4位运算芯片,左方为高4位运算芯片。低位芯片的进位输出端C(n+4)与高芯片的进位输入端CN相连,高位芯片的进位输出引至外部。两个芯片的控制端S0~S3和M各自相连。 2.实验步骤 1)算数逻辑运算 i.输入单元置数一 ii.设置I/O-R# = 0 iii.ALU-B# =1 iv.B-DA1 _| ̄|_将输入单元的输入数据存入DA1中 v.输入单元置数据二 vi.B-DA2 _| ̄|_将数据存入DA2中 vii.设置S 3 -------S 0、M、Cn根据要求按照定义操作设置完成运算viii. ix. x.I/O-R# = 1 ALU-B = 0运算结果送总线 IO-W ̄|_| ̄总线数据送显示单元显示 数据1.算数逻辑运算

相关文档
最新文档