计算机功能机器指令,科学网—机器指令计算机 - 姜咏江的博文

姜咏江

什么是机器指令计算机?要回答中国问题,先要说清楚什么是机器指令。所谓的机器指令是完成一定功能可带有一定格式的微程序名称,这种名称只能数表示。

一、机器指令解释

例如微指令计算机中(见我上篇博文),微指令程序:

1000001;x→A

0100001;y→B

0010010;x+y→O

1000001;x→A

0100001;y→B

0011010;x-y→O

分别确定了两个数相加和相减的基本功能。假如我们将前者用“00000001”表示,后者用“00000010”表示,我们就可以用这两个二进制数代表两个微程序,就称它们是机器指令,前者是加,后者是减。

这个例子中变量(寄存器)x、y是隐含的,不需要指出。如果需要指出,须将x、y编成数表示。假如这样的x、y有8个,那么就可以用3位数表示,那么这两个加、减指令就必须写成14位数,后加的6位中有3位数表示x,另外3位数表示y。我们将前面“00000001” “00000010”称为指令“操作码”,后面的6位数称为“操作数”。这样一来,机器指令的一般格式就为:操作码 操作数。

习惯上人们将操作码放在左面,操作数放在右面,其实怎样放都可以,只要能够识别就行。

一个计算机的表数位数是固定的,如何设计操作码和操作数的位数,需要统筹安排。一般来说,计算机组成越复杂,指令的格式会相应的复杂一些。

因为计算机是物理器件,是以逻辑电路为基础的,因而只能通过二进制数相互传递信息,也就是“计算机只能识别二进制数”。

二、机器指令计算机

机器指令的微程序是固定的。机器指令的固定微程序又叫“例行程序”。要执行一个机器指令,就必须将例行程序的每条微指令按顺序执行一遍(假如没有重复执行),这需要事先将例行程序保存在某处,并且能够按顺序送到计算机控制字上,这叫机器指令执行。简单的办法是将例行程序放到存储器中,并设法将机器指令和它的例行程序的首地址对应起来,以便能够依据机器指令迅速找到例行程序,并执行例行程序。

如下图1所示,依据机器指令查找例行程序,然后将微指令送到各控制线执行。

fba4330d74058e5e05633d9e21dfa79b.png

图 1    基本机器指令计算机

与微指令计算机相比,程序员只要将机器指令送到计算机的相关设备中,机器就能够执行它的例行程序,从而避免了程序员逐条输入微指令,这就是计算机指令计算机的最基本特征。

随着自动化执行的需求,人们将机器指令程序放到了存储器中,并设法让机器指令逐条取出执行,于是就出现了如图2所示的情况。

2187330e000e052810b403f48ada5c8c.png

图 2    复杂机器指令计算机

虽然经过此番演变,程序员仍然要编写机器指令程序,因而没有改变机器指令计算机的性质。为了逐条将机器指令从程序送出,设备增加了程序计数器PC。为了找到指令的例行程序,人们增设了微程序地址译码和微程序计数器。为了加快速度,人们将例行程序选择和执行用逻辑电路来实现,因而出现了所谓的控制矩阵,进而出现了控制器。为了机器程序和数据的输入输出,人们又增设了输入输出设备,但至今为止,程序员实际的程序书写结果仍然是机器指令程序,也就是最终到达计算机程序存储器的仍然是机器指令程序。

三、软硬件的接口

我主张可以变化和移动的信息就是软件。从计算机使用的角度来看,程序员能够直接使用的信息就应改被定义成软件。不论何种方式的机器指令计算机,程序员最终都是使用机器指令来工作的,而机器指令程序向下的工作都可以使用硬件电路完成,因而软件的起点定在机器指令处比较合适。

对于已经成型的机器指令计算机,我们能够改变的东西只有程序和数据,而可以改变程序的最低层并不是微指令,而是机器指令,因而不能够将现在这种成型计算机的微指令程序(例行程序)称为软件,尽管可以用存储器将微程序装填进去,但在计算机运行中,这些例行程序并不变化。

对于微指令计算机来说,程序员使用的微指令是不断变化的,因而那里的微指令程序应该是软件。

如果用可变与不可变来定义软硬件,那么计算机运行中一切不可改变或转移的东西,都可以称为硬件,否则就是软件。

2010-3-31

转载本文请联系原作者获取授权,同时请注明本文来自姜咏江科学网博客。

链接地址:http://wap.sciencenet.cn/blog-340399-307654.html

上一篇:微指令计算机

下一篇:高级语言指令计算机

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
细菌觅食算法(Bacterial foraging optimization algorithm)是一种基于细菌群体行为的优化算法,它最初由美国生物学家E. coli细菌在食物搜索过程中表现出的行为启发而来。该算法通过模拟细菌在寻找食物、分泌基质、移动、感应等行为,来寻找问题的最优解。细菌觅食算法已经成功应用于多个领域,包括图像处理、信号处理、模式识别、机器学习等。 在MATLAB中实现细菌觅食算法,可以参考以下步骤: 1. 定义目标函数:根据需要优化的问题,定义一个目标函数。 2. 设计细菌觅食算法的参数:包括细菌数量、迭代次数、细菌感应范围、化学素浓度等。 3. 初始化:随机生成一组细菌位置。 4. 迭代寻优:在每一次迭代中,计算每个细菌的适应度,根据细菌周围的化学素浓度和感应范围来更新细菌的位置,最终得到最优解。 5. 输出结果:输出最优解及相应的函数值。 以下是一个简单的MATLAB代码示例: ```matlab % 定义目标函数 fun = @(x) x(1)^2 + x(2)^2; % 设计细菌觅食算法的参数 N = 50; % 细菌数量 T = 100; % 迭代次数 c = 0.1; % 化学素消耗速率 d = 0.2; % 拉近距离的比例因子 e = 0.1; % 扰动参数 % 初始化 x = rand(N,2)*10-5; % 随机生成位置 s = zeros(N,1); % 初始化化学素浓度 for i = 1:N s(i) = fun(x(i,:)); end % 迭代寻优 for t = 1:T for i = 1:N % 计算每个细菌的适应度 f = fun(x(i,:)); % 感应范围内的细菌平均化学素浓度 s_ave = sum(s(abs(x(i,1)-x(:,1))<0.5 & abs(x(i,2)-x(:,2))<0.5))/sum(abs(x(i,1)-x(:,1))<0.5 & abs(x(i,2)-x(:,2))<0.5); % 更新细菌位置 x(i,:) = x(i,:) + d*(s_ave-s(i))*sign(randn(1,2)) + e*randn(1,2); x(i,:) = max(min(x(i,:),5),-5); % 位置限制在[-5,5]之间 % 更新化学素浓度 s(i) = (1-c)*s(i) + c*f; end end % 输出结果 [minf,idx] = min(s); xmin = x(idx,:); fprintf('最优解为(%f,%f),函数值为%f\n',xmin(1),xmin(2),minf); ``` 需要注意的是,细菌觅食算法的效果受到参数的影响,需要根据具体问题进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值