IBM PC机的机器语言指令是多字节指令,一条指令可以由1—7个字节组成。指令的操作码(用OP表示)采用二进制代码表示本指令所执行的操作,在IBMPC机中,它通常用指令的第一个字节表示,有时由于用8位还不够,因此在指令的第二个字节中还可能占有3位操作码,除此以外的其他字节则用来表示地址码。
在多数操作码中,常使用某些位来指示某些信息。例如
----------------------
| OP | d | w |
----------------------
其中W位用来指示本指令是对字(w=1)还是对字节(w=0)进行操作。
d值在双操作数指令中才有效。IBMPC机规定双操作数指令的两个操作数必须有一个操作数放在寄存器中,d位指定寄存器用于目的操作数(d=1)还是源操作数(d=0)。
另外,当使用立即方式寻址时,操作码中用S位表示符号扩展;
----------------------
| OP | s | w |
----------------------
如立即数为8位,但要求扩展成16位数(高位字节按低位字节的最高有效位作符号扩展)时、S位为l。
因此当指令作字节操作时,SW=00,当指令有16位立即数且作字操作时SW=01;而当指令有8位立即数但需要经符号扩展成l6位立即数作字操作时,则SW=11
IBMPC机用一个寻址方式字节表示操作数的寻址方式,它通常是机器指令的第2个字节。寻址方式字节可表示如下:
| mod | reg | r/m |
其中reg表示寄存器方式,在双操作效指令的情况下规定必须有一个操作致在寄存器中,该寄存器由reg字段指定。它与操作码字节中的w位相结合确定的寄存器如下表所示。
mod字段与r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式。
reg 是由000~111之间的数字来确定 是BX BP……的
上表中每项下的段寄存器是指无段跨越前缀的情况下所使用的隐含的段寄存器。如果指令中指定段跨越前缀,则在机器语言中使用放在指令之前的一个字节来表示,来确定是哪个段跨越。
IBM PC机规定下列三种情况下不允许使用段跨越前缀;
1.访问堆栈的指令(如PUSH和CALL等)使用SP作为偏移地址指针,只能使用SS作为段奇存器。
2.串处理指令规定源寄存器使用SI,源串在DS段中,目的寄存器使用DI,目的串必须在ES段中。这里如果要用段跨越前缀则只能用于源而不能用于目的,也就是说,SI可以更换段寄存器,而DI则只能使用ES作为段寄存器,不允许用段跨越前缀更换。
3.指令只能存放在代码段中。
根据以上说明,我们对IDM PC机的机器指令情况已经有了一般的了解,下面在以加法指令为例,对机器指令作一些具体的分析。
本文详细介绍了IBM PC 机指令系统的结构特点,包括指令的组成、操作码的含义及寻址方式,并探讨了不同操作码位的作用,如 W 位指示字或字节操作,d 位指定寄存器用途。
2828

被折叠的 条评论
为什么被折叠?



