第一次循环之后,位于地址0004h和0005h处的16位数等于A7h与1的乘积,这和我们的设计相符。在上图中,地址1003h处的字节通过Load指令载入到累加器,该字节是1Ch。把这个数和001Eh地址的字节相加后,恰好遇到的是Halt指令,当然这是一个合法的数。FFh与1Ch相加的结果与从1Ch中减去1的结果相同,都是1Bh,因为这个数不等于0,所以零标志位是0,1Bh这个结果会存回到1003h地址。下一条要执行的指令是JumpIf Not Zero,零标志位没有置为1,因此发生跳转。接下来要执行的一条指令位于0000h地址。
需要记住的是,Store指令不会影响零标志位的值。只有 Add、Subtract、Add with Carry、Subtract with Borrow 这些指令才能影响零标志位的值,因此它的值与最近执行上述某个指令时所设置的值相同。
经过两次循环后,1004h和1005h地址所保存的16位数等于A7h与2的乘积。1Bh与FFh的和等于1Ah,不为0,因此仍然返回到顶部执行。
当执行到第28次循环时,1004h和1005h地址保存的16 位数等于A7h和1Ch的乘积。1003h地址保存的值是1,它和FFh相加的结果是0,因此零标志位被置位!JumpIfNot Zero 指令不会再跳转到 0000h 地址,相反,下一条要执行的指令即 Halt 指令。这样,我们就完成了全部的工作。
现在可以断言,我们一直不断完善的这组硬件构成的机器确实可以被称为计算机(computer)。当然,它还很原始,但毕竟是一台真正的计算机。条件跳转指令将它与我们以往设计的加法器区别开来,能否控制重复操作或者循环(looping)是计算机(computer)和计算器(calculator)的区别。这里演示了该机器如何用条件跳转实现两个数的乘法运算,用类似的方法还可以进行两个数的除法运算。而且,这不仅仅局限于8位数,它可以对16位、24位、32位,甚至更高位的数进行加、减、乘、除运算。而且,既然它能完成这些运算,那么对于开平方根、取对数、三角函数等运算也完全可以胜任。
既然我们已经装配了一台计算机,因此可以使用计算机相关词汇了。
我们装配的计算机属于数字计算机(digital computer),因为它只处理离散数据。曾经还有一种模拟信号计算机(analog computer),但现在已经非常少见了。(数字数据就是离散数据,即这些数据是一些确定的离散值;模拟数据是连续的,并且在整个取值区间
编码隐匿在计算机软硬件背后的语言
244