购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 指令和指令集

从一开始,设计处理器的目标之一就是使它成为一种可以自动进行操作的器件。另外,还需要提供一种机制,来允许程序员决定进行何种操作。

处理器何以能够自动进行操作,这不是本书的话题,大学里有这样的课程,《穿越计算机的迷雾》这本书也给出了通俗化的答案。

简单地说, 处理器的设计者用某些数来指示处理器所进行的操作, 这称为指令(Instruction),或者叫机器指令,因为只有处理器才认得它们。前面已经说了,处理器内部有寄存器和负责运算的部件,控制器“分析”一个个指令,然后确定在哪个时间点让哪些部件进行工作。比如,指令F4H 表示让处理器停机,当处理器取到并执行这条指令后,就停止工作。指令是集中存放在内存里的,一条接着一条,处理器的工作是自动按顺序取出并加以执行。

如图2-6 所示,从内存地址0000H 开始(也就是内存地址的最低端)连续存放了一些指令。同时,假定执行这些指令的是一个16 位处理器,拥有两个16 位的寄存器RA 和RB。

一般来说,指令由操作码和操作数构成,但也有小部分指令仅有操作码,而不含操作数。如图2-6 所示,停机指令仅包含1 字节的操作码F4,而没有操作数。指令的长度不定,短的指令仅有1 字节,而长的指令则有可能达到15 字节(对于INTEL x86 处理器来说)。

图2-6 处理器指令在内存中的布局

对处理器来说,指令的操作码隐含了如何执行该指令的信息,比如它是做什么的,以及怎么去做。第一条指令的操作码是B8,这表明,该指令是一条传送指令,第一个操作数是寄存器,第二个操作数是直接包含在指令中的,紧跟在操作码之后,可以立即从指令中取得,所以叫做立即数(Immediate Operand)。同时,操作码还直接指出该寄存器是RA。RA 是16 位寄存器,这条指令将按字进行操作。所以,当这条指令执行之后,该指令的操作数(立即数)005DH就被传送到RA 中。

既然操作码中隐含了这么多的信息,那么,处理器就可以“知道”每条指令的长度。这样,当它执行第一条指令B8 5D 00 的时候,就已经知道,这是一个3 字节指令,下一条指令位于3 个字节之后,即内存地址0003H 处。

注意字数据在内存中的存放特点。地址0001H 和0002H 里的内容分别是5D 和00,如果每次读一个字节,则从地址0001H 里读出的是5D,从0002H 里读出的是00。但如果以字的方式来访问地址0001H,读到的就会是005DH。这种差别,跟处理器和内存之间的数据线连接方式有关。对于Intel 处理器来说,如果访问内存中的一个字,那么,它规定高字节位于高地址部分,低字节位于低地址部分,这称为低端字节序(Little Endian)。至于其他公司的处理器,则可能情况正好相反,称为高端字节序。

对于复杂一些的指令来说,1 个字节的操作码可能不会够用。所以,第2 条指令的操作码为8B 1E,它隐含的意思是,这是一条传送指令,第一个操作数是寄存器,而且是RB 寄存器,第二个操作数是内存地址,要传送到RB 寄存器中的数存放在该地址中。同时,这是一个字操作指令,应当从第二个操作数指定的地址中取出一个字。

该指令的操作数部分是3F 00,指定了一个内存地址003FH。它相当于高级语言里的指针,当处理器执行这条指令时,会再次用003FH 作为地址去访问内存,从那里取出一个字(1002H),然后将它传送到寄存器RB。注意,“传送”这个词带有误导性。其实,传送的意思更像是“复制”,传送之后,003FH 单元里的数据还保持原样。

通过这两条指令的比较,很容易分清指令中的“立即数”是什么意思。指令执行和操作的对象是数。如果这个数已经在指令中给出了,不需要再次访问内存,那这个数就是立即数,比如第一条指令中的005DH;相反,如果指令中给出的是地址,真正的数还需要用这个地址访问内存才能得到,那它就不能称为立即数,比如第二条指令中的003FH。

如图2-6 所示,余下的三条指令,旁边都有注解,这里就不再一一解释了。如果一开始内存地址003FH 中存放的是1002H,那么,当所有这些指令执行完后,003FH 里就是最终的结果105FH。

指令和非指令的普通二进制数是一模一样的,在组成内存的电路中,都是一些高低电平的组合。因为处理器是自动按顺序取指令并加以执行的,在指令中混杂了非指令的数据会导致处理器不能正常工作。为此,指令和数据要分开存放,分别位于内存中的不同区域,存放指令的区域叫代码区,存放数据的区域叫数据区。为了让处理器正确识别和执行指令,工程技术人员必须精心安排,并告诉处理器要执行的指令位于内存中的什么位置。

还是那句话,并非每一个二进制数都代表着一条指令。每种处理器在设计的时候,也只能拥有有限的指令,从几十条到几百条不等。一个处理器能够识别的指令的集合,称为该处理器的指令集。

检测点2.2

在内存中,指令和数据一模一样,都是无差别的数。如图2-6 所示,假如处理器访问内存时是按低端字节序的,那么,从地址0008H 处取出一个字时,该字的值为( )。 B+/yVjsEOE6V7AWF6dxwnW+8j4MGRJn3RBcVs6MGPe4Ok0S1WSQcGoWYhYOAAaPG

点击中间区域
呼出菜单
上一章
目录
下一章
×