Chinaopub.com 第19章两种典型的微处理器 微处理器一集成计算机中央处理器(CPU)的所有组件在一个硅芯片上—诞生于1971 年。它的产生有一个很好的开端:第一个微处理器是 Intel4004,其中有2300个晶体管。今天 差不多30年过去了,为家用计算机所制造的微处理器中将近有10000000个晶体管 微处理器实际的作用基本上保持不变。现在的芯片上附加的上百万个晶体管可以做许多有 趣的事情,但在微处理器最初的探索过程中,这些事情更多的是分散我们的注意力而不是给我 们以启迪。为了对微处理器的工作情况获得更清晰的认识,让我们先看一下最初的微处理器。 这些微处理器出现在1974年。在该年度, Intel公司在4月推出了8080, Motorola(摩托罗 拉)一从20世纪50年代开始生产半导体和晶体管产品的公司一在8月份推出了6800。它们 并非是那年仅有的微处理器。同样是在1974年,德克萨斯仪器公司推出了4位的TMS1000,用 在许多计算器、玩具和设备上: National Semiconductor(国家半导体公司)推出了PACE,它 是第一个16位的微处理器。然而,回想起来,8080和6800是两个最具有重大历史意义的芯片。 Intel设定8080最初价格为$360,这是对 IBM System/360的一个讽刺。 IBM System/360是 个大型机系统,由许多大公司使用,要花费几百万美元。(今天,你只花$195就可以买到 个8080芯片。)这并不是说8080可以与 System/360相提并论,但不用几年,IBM公司也将会 正视这些很小的计算机。 8080是一个8位的微处理器,有6000个晶体管,时钟频率为2MHz,可寻址64KB的存储空 间。6800(今天也只卖$195)有大约4000个晶体管,也可寻址64KB的存储空间。第1代6800 的时钟频率为1MHz,但到1977年 Motorola公司发布新款的6800时,其时钟频率已为1.5MHz 和2MHz。 这些芯片称作“单芯片微处理器”,不太准确的名称为“一个芯片上的计算机”。处理器 只是整个计算机的一部分。此外,计算机至少还需要一些随机访问存储器(RAM)、供人们 输入信息到计算机的方法(输入设备),供人们从计算机获取信息的方法(输出设备),以及 其他可把所有这些东西连接在一起的芯片。这些组件将在第21章详细介绍。 从现在起,我们只考察微处理器。描述微处理器时,通常是用框图来画微处理器的内部 组件及它们是如何连接的。但在第17章已有够多的图了,现在,我们将通过观察处理器与外 界的相互作用来了解它的内部。换句话说,为了弄清楚它的作用,可以把微处理器看成是 个黑盒子,它的内部操作不需要做详细研究。我们可以通过测试芯片的输入和输出信号,特 别是芯片的指令集来掌握微处理器的功能 8080和6800都是40管脚的集成电路。这些芯片最普通的IC封装大约是2英寸长,半英寸宽 1/8英寸厚
下载 第19章 两种典型的微处理器 微处理器—集成计算机中央处理器( C P U)的所有组件在一个硅芯片上—诞生于1 9 7 1 年。它的产生有一个很好的开端:第一个微处理器是 Intel 4004,其中有2 3 0 0个晶体管。今天, 差不多3 0年过去了,为家用计算机所制造的微处理器中将近有 10 000 000个晶体管。 微处理器实际的作用基本上保持不变。现在的芯片上附加的上百万个晶体管可以做许多有 趣的事情,但在微处理器最初的探索过程中,这些事情更多的是分散我们的注意力而不是给我 们以启迪。为了对微处理器的工作情况获得更清晰的认识,让我们先看一下最初的微处理器。 这些微处理器出现在 1 9 7 4年。在该年度,I n t e l公司在4月推出了8 0 8 0,M o t o r o l a(摩托罗 拉)—从2 0世纪5 0年代开始生产半导体和晶体管产品的公司—在8月份推出了6 8 0 0。它们 并非是那年仅有的微处理器。同样是在 1 9 7 4年,德克萨斯仪器公司推出了4位的TMS 1000,用 在许多计算器、玩具和设备上; National Semiconductor(国家半导体公司)推出了 PA C E,它 是第一个1 6位的微处理器。然而,回想起来, 8 0 8 0和6 8 0 0是两个最具有重大历史意义的芯片。 I n t e l设定8 0 8 0最初价格为$ 360,这是对IBM System/360的一个讽刺。IBM System/360是 一个大型机系统,由许多大公司使用,要花费几百万美元。(今天,你只花 $ 1 . 9 5就可以买到 一个8 0 8 0芯片。)这并不是说8 0 8 0可以与S y s t e m / 3 6 0相提并论,但不用几年, I B M公司也将会 正视这些很小的计算机。 8 0 8 0是一个8位的微处理器,有6 0 0 0个晶体管,时钟频率为 2 M H z,可寻址6 4 K B的存储空 间。6 8 0 0(今天也只卖$ 1 . 9 5)有大约4 0 0 0个晶体管,也可寻址6 4 K B的存储空间。第1代6 8 0 0 的时钟频率为1 MHz,但到1 9 7 7年M o t o r o l a公司发布新款的6 8 0 0时,其时钟频率已为 1 . 5 M H z 和2 MHz。 这些芯片称作“单芯片微处理器”,不太准确的名称为“一个芯片上的计算机”。处理器 只是整个计算机的一部分。此外,计算机至少还需要一些随机访问存储器( R A M)、供人们 输入信息到计算机的方法(输入设备),供人们从计算机获取信息的方法(输出设备),以及 其他可把所有这些东西连接在一起的芯片。这些组件将在第 2 1章详细介绍。 从现在起,我们只考察微处理器。描述微处理器时,通常是用框图来画微处理器的内部 组件及它们是如何连接的。但在第 1 7章已有够多的图了,现在,我们将通过观察处理器与外 界的相互作用来了解它的内部 。换句话说,为了弄清楚它的作用,可以把微处理器看成是一 个黑盒子,它的内部操作不需要做详细研究。我们可以通过测试芯片的输入和输出信号,特 别是芯片的指令集来掌握微处理器的功能。 8 0 8 0和6 8 0 0都是4 0管脚的集成电路。这些芯片最普通的I C封装大约是2英寸长,半英寸宽, 1 / 8英寸厚:
inaopul.com 第9章两种典型的微处理189 下载 当然,你看到的只是外包装。位于其内部的硅晶片非常小,就拿早期的8位微处理器来说, 其硅晶片小于1/4平方英寸。外包装保护硅晶片并通过管脚提供对芯片的输入和输出点的访问。 下图显示了8080的40个管脚的功能: GND 14 DDDDDD 51 11 Intel 606030 RESET HoLD→-13 +12 INT 2 DBIN 670543 WAr READY SYNC 7B90 22 21 HLD& 本书的所有电气或电子设备都需要某种电源供电。8080的一个特别之处在于它需要三种 电源电压:管脚20必须连到5伏电源上,管脚11连到-5伏电源上,管脚28连到12伏电源上:管 脚2接地(1976年, Intel发布了8085芯片,简化了这些电源需求)。 其余管脚都画有箭头。从芯片中出来的箭头表示输出信号,这是由微处理器控制的信号, 计算机中其余芯片对此作出响应。指向芯片的箭头表示输入信号,这是来自于其他芯片的信 号,8080对它们做出响应。有些管脚既是输入又是输出。 第17章的处理器需要振荡器使它工作。8080需要两个不同的2MHz同步时钟输入,在22 和15管脚上分别标记为②,和②。这些信号可以很方便地由 Intel公司生产的8224时钟信号发生 器提供。给这个芯片连上一个18MHz的石英晶体,剩下的工作它基本上可以完成。 个微处理器通常有多个输出信号来寻址存储空间,这种信号的数目与微处理器可寻址 的存储器空间的大小直接相关。8080有16个地址信号,标为A0~A15,具有寻址21即65536 字节的存储空间的能力 8080是一个8位微处理器,一次可从存储器中读出、写入8位数据。它包括8个数据信号 D。D2,这些信号是在此芯片中仅有的几个既作为输入又作为输出的信号。当微处理器从存储 器读数据时,这些管脚作为输入:当微处理器向存储器写数据时,这些管脚作为输出。 微处理器的另外10个管脚是控制信号。例如, RESET输入用来复位微处理器。输出信号 WR表示微处理器要向RAM中写数据。(WR信号对应于RAM阵列的写入输入。)另外,当芯 片读取指令时,其他控制信号会在某个时候出现在D~D管脚。由8080构成的计算机系统通常 使用8228系统控制芯片来锁存这些附加的控制信号。后面将会讲述一些控制信号。由于8080 的控制信号非常复杂,因此,除非你想基于8080芯片来实际设计计算机,否则最好不要用这 些控制信号来折磨自己
第19章 两种典型的微处理器 189 下载 当然,你看到的只是外包装。位于其内部的硅晶片非常小,就拿早期的 8位微处理器来说, 其硅晶片小于1 / 4平方英寸。外包装保护硅晶片并通过管脚提供对芯片的输入和输出点的访问。 下图显示了8 0 8 0的4 0个管脚的功能: 本书的所有电气或电子设备都需要某种电源供电。 8 0 8 0的一个特别之处在于它需要三种 电源电压:管脚2 0必须连到5伏电源上,管脚11连到- 5伏电源上,管脚2 8连到1 2伏电源上;管 脚2接地(1 9 7 6年,I n t e l发布了8 0 8 5芯片,简化了这些电源需求)。 其余管脚都画有箭头。从芯片中出来的箭头表示输出信号,这是由微处理器控制的信号, 计算机中其余芯片对此作出响应。指向芯片的箭头表示输入信号,这是来自于其他芯片的信 号,8 0 8 0对它们做出响应。有些管脚既是输入又是输出。 第1 7章的处理器需要振荡器使它工作。 8 0 8 0需要两个不同的 2 MHz同步时钟输入,在 2 2 和1 5管脚上分别标记为 Æ1和Æ2。这些信号可以很方便地由 I n t e l公司生产的8 2 2 4时钟信号发生 器提供。给这个芯片连上一个 18 MHz的石英晶体,剩下的工作它基本上可以完成。 一个微处理器通常有多个输出信号来寻址存储空间,这种信号的数目与微处理器可寻址 的存储器空间的大小直接相关。 8 0 8 0有1 6个地址信号,标为 A 0~A 1 5,具有寻址2 1 6即65 536 字节的存储空间的能力。 8 0 8 0是一个 8位微处理器,一次可从存储器中读出、写入 8位数据。它包括 8个数据信号 D0 ~ D7,这些信号是在此芯片中仅有的几个既作为输入又作为输出的信号。当微处理器从存储 器读数据时,这些管脚作为输入;当微处理器向存储器写数据时,这些管脚作为输出。 微处理器的另外 1 0个管脚是控制信号。例如, R E S E T输入用来复位微处理器。输出信号 -W R表示微处理器要向 R A M中写数据。(- WR信号对应于R A M阵列的写入输入。)另外,当芯 片读取指令时,其他控制信号会在某个时候出现在 D0 ~ D7管脚。由8 0 8 0构成的计算机系统通常 使用8 2 2 8系统控制芯片来锁存这些附加的控制信号。后面将会讲述一些控制信号。由于 8 0 8 0 的控制信号非常复杂,因此,除非你想基于 8 0 8 0芯片来实际设计计算机,否则最好不要用这 些控制信号来折磨自己
190编的 Chia°dow 下载 假定8080微处理器连接了64KB的存储器,这样可以不通过微处理器来读写数据 8080芯片复位后,它从存储器的地址o000h处读取该字节,送到微处理器中。这可以通过 在地址信号端A。~A输出16个0来实现。它读取的字节必须是8080指令,这种读取字节的过 程叫作取指令。 在第17章构造的计算机里,所有指令(除了停止指令HLT)都是3个字节长,包括一个操 作码和两个字节的地址。在8080中,指令长度可以是1个字节、2个字节或3个字节。有些指令 可使8080从存储器的某一位置处读出一个字节送到微处理器中;有些指令可使8080从微处理 器中把数据写入存储器的某一位置处:其他指令可使8080不使用RAM而在内部执行。第一条 指令执行完后,8080访问存储器中的第二条指令,依此类推。这些指令组合在一起构成一个 计算机程序,用来完成一些自己感兴趣的事情 当8080运行在最高速度即2MHz时,每个时钟周期为500纳秒(1除以2000000周等于 0000000秒)。第17章中的每条指令都需要4个时钟周期,8080的每条指令则需要4~18个 时钟周期,这意味着每条指令的执行时间为2~9微秒(即百万分之一秒)。 了解微处理器功能的最好方法可能是在系统方式下测试其完整的指令集。 第17章最后出现的计算机仅有12条指令。一个8位微处理器很容易就有256条指令,每个操 作码对应于某个8位值。(如果一些指令有2个字节的操作码,则实际会有更多的指令)。8080虽 没有那么多,但它也有244条操作码。这看起来似乎很多,但总的来说,却又不比第17章中的 计算机功能多多少。例如,如果想用8080做乘法或除法,仍然需要写一段小程序来实现。 第17章中讲过,处理器指令集的每个操作码都和某个助记符相联系,有些助记符之后可 能还有操作数。但这些助记符仅用来方便地表示操作码。处理器只读取字节,它并不懂组成 这些助记符的字符的含义 第17章中的计算机有两条很重要的指令,称作装载(Load)和保存( Store)指令。这些 指令都占用三个字节的存储空间。装载指令的第一个字节是操作码,操作码后的两个字节表 示16位地址。处理器把在此地址中的字节送到累加器。同样,保存指令把累加器中的内容存 储到指令指定的地址处。 下面,我们用助记符来简写这两个操作 OD A, aaaaI STo aaaa,A 在此,A表示累加器(装载指令的目的操作数,保存指令的源操作数),aa表示一个16 位的存储器地址,通常用4位十六进制数来表示。 8080中的8位累加器称作A,就像第17章中的累加器。正如第17章中的计算机一样,8080 也有两条与装载和保存指令功能一样的指令。8080中这两条指令的操作码为32h和3Ah,每个 操作码后有一个16位地址。8080的助记符为STA(代表存储累加器的内容)和LDA(代表装 载到累加器) 操作码 指令 32 STA aaaa, A 3A LDA A,aaaa 除了累加器,8080微处理器内部还包括6个寄存器( register),每个寄存器可以保存8位的 值。这些寄存器和累加器非常相似,事实上,累加器被看作是一种特殊的寄存器。和累加器
190 编码的奥秘 下载 假定8 0 8 0微处理器连接了6 4 K B的存储器,这样可以不通过微处理器来读写数据。 8 0 8 0芯片复位后,它从存储器的地址 0 0 0 0 h处读取该字节,送到微处理器中。这可以通过 在地址信号端 A0~A1 5输出1 6个0来实现。它读取的字节必须是 8 0 8 0指令,这种读取字节的过 程叫作取指令。 在第1 7章构造的计算机里,所有指令(除了停止指令 H LT)都是3个字节长,包括一个操 作码和两个字节的地址。在 8 0 8 0中,指令长度可以是 1个字节、2个字节或3个字节。有些指令 可使8 0 8 0从存储器的某一位置处读出一个字节送到微处理器中;有些指令可使 8 0 8 0从微处理 器中把数据写入存储器的某一位置处;其他指令可使 8 0 8 0不使用R A M而在内部执行。第一条 指令执行完后, 8 0 8 0访问存储器中的第二条指令,依此类推。这些指令组合在一起构成一个 计算机程序,用来完成一些自己感兴趣的事情。 当8 0 8 0运行在最高速度即 2 MHz时,每个时钟周期为 5 0 0纳秒(1除以2 000 000周等于 0 . 0 0 0 0 0 0 5 0 0秒)。第1 7章中的每条指令都需要 4个时钟周期,8 0 8 0的每条指令则需要 4~1 8个 时钟周期,这意味着每条指令的执行时间为 2~9微秒(即百万分之一秒)。 了解微处理器功能的最好方法可能是在系统方式下测试其完整的指令集。 第1 7章最后出现的计算机仅有1 2条指令。一个8位微处理器很容易就有2 5 6条指令,每个操 作码对应于某个8位值。(如果一些指令有2个字节的操作码,则实际会有更多的指令)。8 0 8 0虽 没有那么多,但它也有 2 4 4条操作码。这看起来似乎很多,但总的来说,却又不比第 1 7章中的 计算机功能多多少。例如,如果想用8 0 8 0做乘法或除法,仍然需要写一段小程序来实现。 第1 7章中讲过,处理器指令集的每个操作码都和某个助记符相联系,有些助记符之后可 能还有操作数。但这些助记符仅用来方便地表示操作码。处理器只读取字节,它并不懂组成 这些助记符的字符的含义。 第1 7章中的计算机有两条很重要的指令,称作装载( L o a d)和保存(S t o r e)指令。这些 指令都占用三个字节的存储空间。装载指令的第一个字节是操作码,操作码后的两个字节表 示1 6位地址。处理器把在此地址中的字节送到累加器。同样,保存指令把累加器中的内容存 储到指令指定的地址处。 下面,我们用助记符来简写这两个操作: LOD A ,[aaaa] STO [aaaa],A 在此,A表示累加器(装载指令的目的操作数,保存指令的源操作数),a a a a表示一个1 6 位的存储器地址,通常用4位十六进制数来表示。 8 0 8 0中的8位累加器称作A,就像第1 7章中的累加器。正如第 1 7章中的计算机一样, 8 0 8 0 也有两条与装载和保存指令功能一样的指令。 8 0 8 0中这两条指令的操作码为 3 2 h和3 A h,每个 操作码后有一个 1 6位地址。8 0 8 0的助记符为S TA(代表存储累加器的内容)和 L D A(代表装 载到累加器): 操作码 指令 3 2 S TA [aaaa],A 3 A LDA A,[aaaa] 除了累加器,8 0 8 0微处理器内部还包括6个寄存器(r e g i s t e r),每个寄存器可以保存8位的 值。这些寄存器和累加器非常相似,事实上,累加器被看作是一种特殊的寄存器。和累加器
Chinapub.com 第9章两种典至的微处理器191 下载 样,这6个寄存器也是锁存器。处理器可以把数据从存储器传送到寄存器,也可以把数据从 寄存器送回到存储器。然而,这些寄存器没有累加器的功能强大。例如,当两数相加时,其 结果通常送往累加器而非其中一个寄存器。 在8080中,除累加器外的6个寄存器的名字分别为B,C,D,E,H和L。人们通常问的第 个问题是“用F和G干什么?”,第二个问题是“用I,J和K又要做什么?”,答案是使用寄 存器H和L具有某种特殊的含义。H代表高(High),L代表低(Low)。通常把H和L的8位合起来 记作HL来表示一个16位寄存器对,H作为高位字节,L作为低位字节。这个16位值通常用来寻 址存储器。后面我们将看到它的简单用法。 所有这些寄存器都是必需的吗?为什么不在第17章中的计算机中用到它们呢?从理论上 说,它们并非必需,但是使用它们会很方便。许多计算机程序在同一时刻要用到几个数据, 如果所有这些数据都存储在微处理器的寄存器中而非存储器中,执行程序将会更快,因为程 序访问存储器的次数越少,那么它的运行速度也就越快。 8088指令中,有一个至少63个指令码供一条8080指令使用的指令,它就是MOV指令,即 Move的简写。该条指令只有一个字节,用于把一个寄存器中的内容传送到另一个寄存器中 (或同一个寄存器中)。使用大量MOⅤ指令是设计带有7个寄存器(包括累加器)的微处理器 的正常结果。 下面是前32条MOV指令。记住目的操作数在左边,源操作数在右边 操作码 操作码 MOVE. B MOV D, B 4423 MOVB, C 51 MOVD, C MOVB, D MOVD, D MOVB, E MOVD, E MOVB. H MOVB, L MOVD, L MOVB, HLI 789 MOVB, A MOV C, B 23456789 MOVC. C MOVE. C MOVC. D MOVE. D MOV C, E MOVC, H MOVE, H MOVC. L MOVE, L MOV C, [ HLI BcDEF MoE,田HL] MOVC,A MOVE.A 这些都是很方便的指令。当一个寄存器中有值时,可以把它传送到其他寄存器中。注意, 上述指令中有四条指令用到HL寄存器对,如: 前面列出的LDA指令把一个字节从存储器中传送到累加器中,这个字节的16位地址直接 跟在LDA操作码的后面。这里的MOV指令把一个字节从存储器中传送到寄存器B中,但被装 载到寄存器中的字节的地址是保存在寄存器对HL中。HL寄存器是怎样得到16位存储器地址 呢?它可以通过多种方法来实现,或许是通过某种方法计算出来的
一样,这6个寄存器也是锁存器。处理器可以把数据从存储器传送到寄存器,也可以把数据从 寄存器送回到存储器。然而,这些寄存器没有累加器的功能强大。例如,当两数相加时,其 结果通常送往累加器而非其中一个寄存器。 在8 0 8 0中,除累加器外的6个寄存器的名字分别为 B,C,D,E,H和L。人们通常问的第 一个问题是“用 F和G干什么?”,第二个问题是“用 I,J和K又要做什么?”,答案是使用寄 存器H和L具有某种特殊的含义。H代表高(H i g h),L代表低( L o w )。通常把H和L的8位合起来 记作H L来表示一个1 6位寄存器对,H作为高位字节,L作为低位字节。这个1 6位值通常用来寻 址存储器。后面我们将看到它的简单用法。 所有这些寄存器都是必需的吗?为什么不在第 1 7章中的计算机中用到它们呢?从理论上 说,它们并非必需,但是使用它们会很方便。许多计算机程序在同一时刻要用到几个数据, 如果所有这些数据都存储在微处理器的寄存器中而非存储器中,执行程序将会更快,因为程 序访问存储器的次数越少,那么它的运行速度也就越快。 8 0 8 8指令中,有一个至少 6 3个指令码供一条8 0 8 0指令使用的指令,它就是 M O V指令,即 M o v e的简写。该条指令只有一个字节,用于把一个寄存器中的内容传送到另一个寄存器中 (或同一个寄存器中)。使用大量M O V指令是设计带有 7个寄存器(包括累加器)的微处理器 的正常结果。 下面是前3 2条M O V指令。记住目的操作数在左边,源操作数在右边: 操作码 指令 操作码 指令 4 0 MOV B,B 5 0 MOV D,B 4 1 MOV B,C 5 1 MOV D,C 4 2 MOV B,D 5 2 MOV D,D 4 3 MOV B,E 5 3 MOV D,E 4 4 MOV B,H 5 4 MOV D,H 4 5 MOV B,L 5 5 MOV D,L 4 6 MOV B,[ H L ] 5 6 MOV D,[ H L ] 4 7 MOV B,A 5 7 MOV D,A 4 8 MOV C,B 5 8 MOV E,B 4 9 MOV C,C 5 9 MOV E,C 4 A MOV C,D 5 A MOV E,D 4 B MOV C,E 5 B MOV E,E 4 C MOV C,H 5 C MOV E,H 4 D MOV C,L 5 D MOV E,L 4 E MOV C,[ H L ] 5 E MOV E,[ H L ] 4 F MOV C,A 5 F MOV E,A 这些都是很方便的指令。当一个寄存器中有值时,可以把它传送到其他寄存器中。注意, 上述指令中有四条指令用到 H L寄存器对,如: MOV B,[HL] 前面列出的L D A指令把一个字节从存储器中传送到累加器中,这个字节的 1 6位地址直接 跟在L D A操作码的后面。这里的 M O V指令把一个字节从存储器中传送到寄存器 B中,但被装 载到寄存器中的字节的地址是保存在寄存器对 H L中。H L寄存器是怎样得到1 6位存储器地址的 呢?它可以通过多种方法来实现,或许是通过某种方法计算出来的。 第19章 两种典型的微处理器 191 下载
192 编码的奥秘 Chinaopub.com 下载 总之,这两条指令 LDA A, [aaaa] 都把一个字节从存储器中装载到微处理器中,但它们用两种不同的方法来寻址存储器地 址。第一种方法叫作直接寻址方式,第二种方法叫作间接寻址方式。 第二批32条MOV指令表明用HL寻址的存储器地址也可以作为目的操作数 操作码 指令 MOVH, B MOVH, C MOV (HL], C 62 MOVH, D MOV(HLJ, D MOVH, E MOVH, H MOV HLI, H MOVH, L MOV [HL], L MOVH, HL 01234567 MOVH,A MOVL. B MOV L, C MOVA, C MOVL. D MOVA. D MOVL, E MOV L, H 7C MOVA, H MOVA, HL MOVL, A MOVA, A 其中一些指令如 做的是无用的事,而像: 这样的指令是不存在的。和这条指令相对应的操作码实际上是停止指令 观察这些MOV操作码更明显的方法是考察它的位模式,MOV操作码由8位组成 其中字母d代表指代目的操作数的位代码,ss代表指代源操作数的位代码。这3位代码是: 存器 001=寄存器C 010=寄存器D 011=寄存器E 00=寄存器 101=寄存器L 110=HL中保存的存储器地址中的内容 111=累加器A 例如,指令: 相应的操作码表示为01101011,或6Bh。可以通过检查前面的表来验证
总之,这两条指令 LDA A,[aaaa] MOV B,[HL] 都把一个字节从存储器中装载到微处理器中,但它们用两种不同的方法来寻址存储器地 址。第一种方法叫作直接寻址方式,第二种方法叫作间接寻址方式。 第二批3 2条M O V指令表明用H L寻址的存储器地址也可以作为目的操作数: 操作码 指令 操作码 指令 6 0 MOV H,B 7 0 MOV [HL],B 6 1 MOV H,C 7 1 MOV [HL],C 6 2 MOV H,D 7 2 MOV [HL],D 6 3 MOV H,E 7 3 MOV [HL],E 6 4 MOV H,H 7 4 MOV [HL],H 6 5 MOV H,L 75 MOV [HL],L 6 6 MOV H,[ H L ] 7 6 H LT 6 7 MOV H,A 7 7 MOV [HL],A 6 8 MOV L,B 7 8 MOV A,B 6 9 MOV L,C 7 9 MOV A,C 6 A MOV L,D 7 A MOV A,D 6 B MOV L,E 7 B MOV A,E 6 C MOV L,H 7 C MOV A,H 6 D MOV L,L 7 D MOV A,L 6 E MOV L,[ H L ] 7 E MOV A,[ H L ] 6 F MOV L,A 7 F MOV A,A 其中一些指令如: MOV A, A 做的是无用的事,而像: MOV [HL],[HL] 这样的指令是不存在的。和这条指令相对应的操作码实际上是停止指令。 观察这些M O V操作码更明显的方法是考察它的位模式, M O V操作码由8位组成: 01dddsss 其中字母ddd 代表指代目的操作数的3位代码,s s s代表指代源操作数的3位代码。这3位代码是: 000= 寄存器 B 001= 寄存器 C 010= 寄存器 D 0 11= 寄存器 E 100= 寄存器 H 101= 寄存器 L 110= HL中保存的存储器地址中的内容 111= 累加器A 例如,指令: MOV L , E 相应的操作码表示为0 11 0 1 0 11,或6 B h。可以通过检查前面的表来验证。 192 编码的奥秘 下载