第7章自动作155 下载 操作码 代码 Load(装载)10h Store(保存) Add(加) (停止) 为了执行以上例子中提到的三组加法,需要用控制面板把下面这些数保存到代砍AM阵列中: 20h Add 20h Add 0007h: IOh Load 20hAdd th store O0OBh: FFh Halt 你可能想把这个RAM阵列中的内容与存放累加数据的RAM阵列的内容作一比较。你会发 现代码RAM中的每个代码或者对应于数据RAM中一个要装入或加到累加器的数,或者表示 个要存回到存储器中的数。这样的数字代码通常称作指令码或操作码,它们“指示”电路 执行某种“操作”。 前面谈到过,早期自动加法器的8位锁存器的输出需要作为数据RAM阵列的输入,这就 是“保存”指令的功能。另外还需要一个改变:以前,8位加法器的输出是作为锁存器的输入 但现在为了实现“装载”指令,数据RAM的输出有时候也要作为8位锁存器的输入,这种改 变需要2-1数据选择器。改进的自动加法器如下图: 控制面板 ap代码 控制面板 数据 8位加法 2-1选择器 8位锁存
操作码 代码 L o a d(装载) 1 0 h Store (保存) 11 h Add (加) 2 0 h Halt ( 停止) F F h 为了执行以上例子中提到的三组加法,需要用控制面板把下面这些数保存到代码R A M阵列中: 你可能想把这个R A M阵列中的内容与存放累加数据的 R A M阵列的内容作一比较。你会发 现代码R A M中的每个代码或者对应于数据 R A M中一个要装入或加到累加器的数,或者表示 一个要存回到存储器中的数。这样的数字代码通常称作指令码或操作码,它们“指示”电路 执行某种“操作”。 前面谈到过,早期自动加法器的 8位锁存器的输出需要作为数据 R A M阵列的输入,这就 是“保存”指令的功能。另外还需要一个改变:以前,8位加法器的输出是作为锁存器的输入, 但现在为了实现“装载”指令,数据 R A M的输出有时候也要作为 8位锁存器的输入,这种改 变需要2 - 1数据选择器。改进的自动加法器如下图: 第17章 自 动 操 作 155 下载 控制面板 控制面板 16位计数 器 8位加法 器 8位锁存 器 代码 数据 2-1选择器
156编的奥 下载 上图中少了一些东西,但它显示了各种组件间的8位数据通路,一个16位计数器为2个 RAM阵列提供地址。通常,数据RAM阵列输出到8位加法器上执行加法指令。8位锁存器的 输入可能是数据RAM阵列的输出也可能是加法器的输出,这需要2-1选择器来选择。通常 锁存器的输出又流回到加法器,但对“保存”指令而言,它又作为数据RAM阵列的输入 上图中缺少的是控制这些组件的信号,统称为控制信号。它们包括16位计数器的时钟(Clk) 和清零(Clr)输入,8位锁存器的Clk和CIr输入,数据RAM阵列的写入(W)输入以及2-1选择器的 选择(S)输入。其中有一些信号明显基于代码RMM阵列的输出,例如,若代码RAM阵列的输 出表示装载指令,则2-1选择器的S输入必须为0(选择数据RAM阵列的输出)。仅当操作码为保 存指令时,数据RAM阵列的W输入才为1。这些控制信号可以由逻辑门的各种组合来产生。 利用最小数量的附加硬件和新增的操作码,也能让这个电路从累加器中减去一个数。第1 步是扩充操作码表: 操作码 Load Store 加法和减法只通过操作码的最低有效位来区分。若操作码为21h,除了在数据RAM阵列 的输出数据输入到加法器之前取反并且加法器的进位输入置1外,电路所做的几乎与电路执行 加法指令所做的完全相同。在下面这个改进的有一个反相器的自动加法器里,C信号可以完 成这两项任务: x令代码 16位计数 控制面板 数据 2-1选择器 8位镁存器
上图中少了一些东西,但它显示了各种组件间的 8位数据通路,一个 1 6位计数器为 2个 R A M阵列提供地址。通常,数据 RAM 阵列输出到8位加法器上执行加法指令。 8位锁存器的 输入可能是数据 R A M阵列的输出也可能是加法器的输出,这需要 2 - 1选择器来选择。通常, 锁存器的输出又流回到加法器,但对“保存”指令而言,它又作为数据 R A M阵列的输入。 上图中缺少的是控制这些组件的信号,统称为控制信号。它们包括1 6位计数器的时钟(C l k) 和清零( C l r )输入,8位锁存器的C l k和C l r输入,数据 R A M阵列的写入( W )输入以及2 - 1选择器的 选择( S )输入。其中有一些信号明显基于代码 RAM 阵列的输出,例如,若代码 RAM 阵列的输 出表示装载指令,则2 - 1选择器的S输入必须为0(选择数据R A M阵列的输出)。仅当操作码为保 存指令时,数据R A M阵列的W输入才为1。这些控制信号可以由逻辑门的各种组合来产生。 利用最小数量的附加硬件和新增的操作码,也能让这个电路从累加器中减去一个数。第 1 步是扩充操作码表: 操作码 代码 L o a d 1 0 h S t o r e 11 h A d d 2 0 h S u b t r a c t (减) 2 1 h H a l t FFh 加法和减法只通过操作码的最低有效位来区分。若操作码为 2 1 h,除了在数据 R A M阵列 的输出数据输入到加法器之前取反并且加法器的进位输入置 1外,电路所做的几乎与电路执行 加法指令所做的完全相同。在下面这个改进的有一个反相器的自动加法器里, C0信号可以完 成这两项任务: 156 编码的奥秘 下载 控制面板 16位计数 器 控制面板 代码 数据 反相器 8位加法器 2-1选择器 8位锁存器
Chinapul.com 下载 第7章自动果作157 现在假设把56h和2Ah相加再减去38h,可以按下图所显示的存储在两个RAM阵列中的操 码和数据进行计算 结果放在此处 装载操作完成后,累加器中的数为56h。加法操作完成后,累加器中的数为56h加上2Ah的 和,即80h。减法操作使数据RAM阵列的下一个数(38h)按位取反,变为C7h。加法器的进 位输入置为1时,取反的数C7h与80h相加 其结果为48h。(按十进制,86加42减56等于72。) 还有一个未找到适当解决方法的问题是加法器及连到其上的所有部件的宽度只有8位。以 往唯一的解决方法就是连接两个8位加法器(或其他的两个部件),形成16位的设备 但也有更便宜的解决方法。假设要加两个16位数,例如: 76ABh +232Ch 这种16位加法同单独加最右边的字节(通常称作低字节) ABh + 2Ch DTh 然后再加最左边的字节,即高字节 99h 得到的结果一样,为99D7h。因此,如果像这样把两个16位数保存在存储器中 000k10hIed000k想 低字节结果 10h Load 20hsdd 高字节结果 H
现在假设把5 6 h和2 A h相加再减去3 8 h,可以按下图所显示的存储在两个 R A M阵列中的操 作码和数据进行计算: 装载操作完成后,累加器中的数为 5 6 h。加法操作完成后,累加器中的数为 5 6 h加上2 A h的 和,即8 0 h。减法操作使数据 R A M阵列的下一个数(3 8 h)按位取反,变为C 7 h。加法器的进 位输入置为1时,取反的数C 7 h与8 0 h相加: C 7 h + 80h + 1h 4 8 h 其结果为4 8 h。(按十进制,8 6加4 2减5 6等于7 2。) 还有一个未找到适当解决方法的问题是加法器及连到其上的所有部件的宽度只有 8位。以 往唯一的解决方法就是连接两个 8位加法器(或其他的两个部件),形成1 6位的设备。 但也有更便宜的解决方法。假设要加两个 1 6位数,例如: 7 6 A B h + 232Ch 这种1 6位加法同单独加最右边的字节(通常称作低字节): A B h + 2Ch D 7 h 然后再加最左边的字节,即高字节 7 6 h + 23h 99h 得到的结果一样,为9 9 D 7 h。因此,如果像这样把两个 1 6位数保存在存储器中: 第17章 自 动 操 作 157 下载 “代码” “数据” 结果放在此处 “代码” “数据” 低字节结果 高字节结果