但如果在地址 0012h 处放置一条 Jump指令会怎样呢?这个指令使得计数器再次从0000h处开始计数。
$$
0 . 0 1 1 2 \mathrm { h } : \left[ \begin{array} { c } { \mathrm { 3 ( ) h } } \\ { \mathrm { o { ( 0 ) h } } } \\ { \mathrm { o { ( h ) } } } \\ { \mathrm { o { ( 0 h ) } } } \end{array} \right] ^ { \sharp \sharp } \overline { { \mathfrak { H } } } ^ { \sharp } \overline { { \mathfrak { H } } } ^ { \sharp } \overline { { \mathfrak { H } } } ^ { \sharp } \overline { { \mathfrak { H } } } 0 . 0 0 0 \mathrm { h } \dot { \mathfrak { L } } \overline { { \mathfrak { H } } } : \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } : \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overset { \cdot } { \mathfrak { H } } \overline { { \mathfrak { H } } } \overset { \cdot } { \mathfrak { H } } \overline { { \mathfrak { H } } } \overset { \cdot } { \mathfrak { H } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } : \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } : \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } : \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } : \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } : \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak { H } } } \overline { { \mathfrak \mathfrak { H } } } \overline { { \mathfrak \mathfrak { H } } } \overline { \mathfrak \mathfrak { H } } \overline { \mathfrak { H } \mathfrak }
$$
这的确是一个巧妙的方法。第一次执行完指令之后,位于存储器的1004h和1005h地址的16位数等于A7h乘1,然后Jump指令使下一条指令从存储器顶部开始执行。第二次执行指令后,该16位数等于A7h乘2,最后其结果可以等于A7h乘1Ch。但是,这个过程不会停止下来,它会一直反复执行下去。
我们需要的是这样一种Jump指令,它只让这个过程重复执行所需要的次数,这种指令就是条件跳转指令,它并不难实现。要实现它,要做的第一步是增加一个与进位锁存器类似的1位锁存器。该锁存器被称为零锁存器(Zerolatch),这是因为只有当8位加法器的输出全部为0时,它锁存的值才是1。
使或非门的输出为1的唯一方法是其所有的输入全为 $\scriptstyle \mathbf { 0 } _ { \circ }$ 与进位锁存器的时钟输入一样,只有当 Add、Subtract、Add with Carry、Subtract with Borrow 这些指令执行时,零锁存器才锁存1个数,该数称做零标志位(Zero flag)。注意,它是以一种似乎是相反的方式工作的:当加法器的输出全为0时,零标志位等于1;当加法器的输出不全为0时,零标志位等于0。
有了进位锁存器和零锁存器以后,我们可以为指令表新增4条指令。
编码——隐匿在计算机软硬件背后的语言
242