首页 理论教育计算机导论中算法基本操作总结

计算机导论中算法基本操作总结

【摘要】:分析各种典型问题的算法,可以归纳整理出算法中的基本操作集合。一般来说,算法中的基本操作包含如下几种类型:数据传送:从某个内存单元中取出数值放于某个寄存器中;把某个寄存器中的数值放于某个内存单元中。例如,计算两个二进制数乘积pro=x*y问题,图3-1给出了两个二进制数相乘的方法,根据图3-1所示的方法,可以编写出用基本操作表示的处理该问题的算法。

首先看一个最简单的算法,该算法要求计算两个二进制数的和。我们知道,计算机中要处理的数据都存放在内存中,处理后的结果数据也存储在内存中。

设被加数放于内存单元x中,加数放于内存单元y中,内存单元sum为存放和的单元,二进制数求和算法即为:把地址x中的数值加上地址y中的数值,其和放于内存单元sum中。

我们在第2章讲过,内存单元的地址是用很多位0、1符号表示的(通常为20位或更多位),这样,包括了三个内存地址加法操作的0、1编码将会很长,而很多操作都可仅包含一个内存单元地址,这些操作的0、1编码将会很短。为了处理方便和提高效率,我们希望所有操作的编码长度基本相同。我们可以增加若干个临时数据存放地,规定每次要处理的数据都先存放在这些临时数据存放地中,由于这些临时数据存放地个数很少(例如4个),其编码长度就很短(例如2位)。这些临时数据存放地就是下面讲的中央处理器中的寄存器。寄存器既可以用来临时存放要处理的数据,也可以用来临时存放内存单元的地址。

这样,二进制数求和问题的算法可以表示为:

(1)从内存单元x中取出被加数放于寄存器A;

(2)寄存器A中的数值加上内存单元y中的数值,其和放于寄存器A中;

(3)把寄存器A中的数值存于内存单元sum中。

上述二进制数求和算法中包含了三种不同的操作:从某个内存单元中取出数值放于某个寄存器中;把某个寄存器中的数值加上某个内存单元中的数值,其和存于寄存器中;把某个寄存器中的数值存于某个内存单元中。

分析各种典型问题的算法,可以归纳整理出算法中的基本操作集合。一般来说,算法中的基本操作包含如下几种类型:

(1)数据传送:从某个内存单元中取出数值放于某个寄存器中;把某个寄存器中的数值放于某个内存单元中。

(2)算术运算:把某个寄存器中的数值加上某个内存单元中的数值,其和存于寄存器中;把某个寄存器中的数值减去某个内存单元中的数值,其差存于寄存器中;把一个寄存器中的数值加上另一个寄存器中的数值,其和存于第三个寄存器中;把一个寄存器中的数值减去另一个寄存器中的数值,其差存于第三个寄存器中。

(3)逻辑运算:两个寄存器中的数值进行逻辑与(AND)运算,结果放于第三个寄存器中:两个寄存器中的数值进行逻辑或运算(OR),结果放于第三个寄存器中;把某个寄存器中的数值求反(NOT),结果放于另一个寄存器中。

(4)移位:按照某个寄存器中的数值把某个寄存器中的数值左移或右移。

(5)转移:转移到某个内存单元地址去执行程序(实现方法是把操作数部分的数值赋予程序计数器)。

(6)输入/输出:从键盘输入数据,把数据输出显示在屏幕上。

(7)控制:结束程序的运行。(www.chuimin.cn)

我们归纳出了算法中的所有基本操作,就可以把算法中的操作步骤表示为基本操作,这样,算法就表示成了基本操作的集合。

例如,计算两个二进制数乘积pro=x*y问题,图3-1给出了两个二进制数相乘的方法,根据图3-1所示的方法,可以编写出用基本操作表示的处理该问题的算法。

图3-1 二进制数相乘

设被乘数放于内存单元x中,乘数放于内存单元y中,内存单元pro为存放乘积的单元,分析图3-1所示的二进制数相乘过程可知,用基本操作表示的两个二进制数相乘的算法如下:

(1)从内存单元x中取出被乘数放于寄存器A;

(2)从内存单元y中取出乘数放于寄存器B;

(3)把寄存器C置为0;

(4)若寄存器B中最低位为0,则转移到步骤(6);

(5)把寄存器C中的数值和寄存器A中的数值相加,和存于寄存器C中;

(6)把寄存器A中的数值左移一位;

(7)把寄存器B中的数值右移一位;

(8)若寄存器B中的位数尚未移完,则转移到步骤(4);

(9)把寄存器C中的乘积存于内存单元pro中。

可见,利用基本操作可以编写出两个二进制数相乘的复杂问题的算法。