编码:隐匿在计算机软硬件背后的语言(8)--自动操作(三)

上一篇文章中,我们修改了指令格式,一个指令为三个字节,通过这种方式我们可以自由访问RAM阵列中的地址,使得取数据以及对数据运算更加灵活。但是上文中的组织结构仍然存在不足。比如我们要进行乘法运算,例如A7h×1Ch,乘法实际上由加法运算得到结果。也就是1Ch个A7h进行累加的结果。如果用上面的结构,我们需要先写一个A7h×1的加法实现,如下图所示



如上图所示进行完一次加法之后,我们还有写(1Ch-1)次相同的指令,也就是在重复27次相同操作,或者在上图的0012h处添加一条Halt指令,然后按27次复位(计数器回到0000h处开始执行)。无论哪一种方法都需要重复相同的运算。除了重复以外,我们还会消耗很多的存储空间,如果相乘的两个数很大时,存储空间还可能不足。另一方面,如果其他存储空间存放着重要的数据,这种方式有可能会覆盖掉其他地址的数据。所以目前的这些指令不足以完成我们的工作。于是我们需要另外一种指令。

基于以上的问题,我们增加了一条跳转(jump)指令。如图所示


代码为30h。jump指令通过作用于16位计数器(地址)实现。jump也占三个字节,后两个字节存储要跳转到的地址。当遇到jump指令时。计数器就会输出jump指令代码后的16位地址。这个我们通过下面的D型边沿触发器(包含预置和清零)电路来实现。


左边上面的输入为数据位,下面为时钟;中间上面为置位,下面为清零;右边上面为输出,下面为输出的非。当置位为1时,输出Q为1;当清零为1时,输出Q为0,置位和清零不允许同时为1。如果想加载一个新的值(1位),可以像下图一样组织


当置位为0时,无论A为什么值,置位输入(D触发器中上端口)为0,清零段只受复位控制;

当置位为1时,如果A为1,则置位段为1,输出为1,如果A为0,则清零输入为1,输出为0;也就是当置位为1时,输出与A相同。这样我们就实现了加载A的功能。对于16位计数器,我们需要16个上图一样的电路来控制。当需要跳转时,使置位为1,同时使16位计时器的输入为16位锁存器(此时存储jump指令后两个字节的地址)的输出,这样就可以实现跳转。电路图如下所示,


锁存器的输出作为16为计数器的输入和2-1选择器的输入,当需要跳转时,16为计数器置位为1,这样其输入就是jump指令后的地址,也就是锁存器的输出;需要访问某个地址时,RAM地址输入选择2-1选择器的锁存器连接端的信号。这样就实现了地址的自由访问。

这样我们的确实现了跳转,但是还有一个问题,这个跳转如何停止?

目前来说,这个跳转无法停止,乘法(累加)将无休止的进行下去。所以我们的跳转需要是条件跳转(Conditional jump)。我们需要下图的结构来实现条件跳转。


左边用一个或非门来接收加法器的输出,这样,当加法器的输出全部为0时,零标志位才会输出1。有了条件跳转之后我们增加4条指令,如下图所示


同时halt指令码该为FFh,这样可以控制跳转条件。这里用到了非零跳转,下面会说明。

下图是0012h地址之后的指令图


上图执行完一次后,就会完成A7h×1的运算,此时同时把0013h处的数也就是累加的次数1Ch同001Eh处的数(也就是halt)相加,相加后结果是001Bh,累加次数减一,然后加001Bh存回到0013h,接下跳转到0000h处进行下一次累加。在进行27次之后,0013h地址处的值是1,它与FFh相加后得到0,此时零标志位为1。不再跳转,运算结束。

到目前为止,我们的这个组织结构可以称为计算机了,当然它还很原始。

能否控制循环(重复操作)是计算机和计算器的区别。一台数字计算机主要由4部分组成:处理器、存储器以及至少一个输入设备和一个输出设备。我们设计的计算机中,存储器就是64KRAM阵列,输入设备是开关,输出设备是灯泡。其余的部分都可以视为处理器,这个处理器是8位的。输入到存储器中的数值和指令等数据被称作软件,相比于硬件,软件更容易修改。

一直以来,我们用数值或者英文短语来表示机器执行的指令,通常机器码都分配了对应的助记符。我们上面提到的命令对应的助记符如下图所示


有了助记符,类似于“把1003h地址处的字节加载到累加器”就可以简洁地表示为

LOD A, [1003h]

A代表累加器,A和 [1003h]都是LOD指令的操作数,[]表示加载到累加器的是 1003h地址中存储的字节而非1003h。有了助记符,上面的乘法就可以表示为如下形式


在编码时最好不要用实际的数字地址,因为他们是可变的,用标号来指代存储器中的地址空间是个较好的方法

采用标号,上述计算过程又变为



上面就是汇编语言,还可以用中文添加注释,在需要添加注释的行后用分后即可。

到这里为止,我们就回顾了计算器和计算机的形成过程,当然现在的计算机更加发达。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假若你才1 0岁,你的好朋友与你临街而住,而且你们卧室的窗户面对着面。每天晚上, 当父母像平常一样很早催你上床睡觉时,你可能还想与好朋友交流思想、发现、小秘密、传 闻、笑话和梦想,没有人可以责备你,毕竟,渴望交流是大多数人的天性。 当你们卧室还亮着灯时,你和你的好朋友可以临窗舞动手臂、打手势或以身体语言来交 流思想,但复杂一些的交流就有些困难了。而且一旦父母宣布“熄灯”,交流也就无法继续进 行了。 如何联系呢?用电话吗? 1 0岁的小孩子屋里有电话吗?即使有,你们的谈话可能被偷听。 如果家里的电脑通过电话线联了网,它可能会提供无声的帮助,不过很不幸,它也不会在你 的房间里。 你和朋友采用的方法是用手电筒。所有的人都知道手电筒是为孩子们藏在被窝里看书而 发明的,它也适合在黑暗中用来交流。它无声无息,且光的方向性很好,不会从卧室的门缝 中泄露而使家人起疑。 用手电筒的光可以交谈吗?这值得一试。一年级你就学过在纸上写字母和单词,把这种 方法运用到手电筒上看起来也合情合理。你所需做的就是临窗而站,用光画出字母。画字母 ‘O’,就打开电筒,在空中画个圈,然后关上开关;字母‘ I’则是画竖直的一笔。但是你很 快发现这种方法行不通,当你注视来去飞舞的光柱时,会发现在脑海中将它们组合起来不是 件容易的事,这些光划成的圈圈杠杠太不准确了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值