奎克的藏经阁 · 原书印刷页

编码 隐匿在计算机软硬件背后的语言 · 第 242 页

PDF 物理页索引 258 · 编码隐匿在计算机软硬件背后的语言

书名
编码 隐匿在计算机软硬件背后的语言
作者
未记录
印刷页
242
PDF 物理页
258(从 0 开始)
章节
编码隐匿在计算机软硬件背后的语言
UUID
38270854-596f-4a26-8183-db8c968c6020
来源类型
original_book
页面 SHA-256
523c5e5fa53b6ba117bd1a1fa59bf85fc4eddb1be2ccc3d6ff56cde5afcc62b6

但如果在地址 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