第三章 IBM PC机的指令系统和寻址方式 计算机完成的任何功能,都是通过执行一系列指令来实现的,因而每种计算机都有 组指令集提供给用户使用,这组指令集合就称为计算机的指令系统 什么是寻址方式?计算机指令中,为了取得操作数的地址(目的取得操作数的内容) 而进行的寻找该操作数物理地址的方式。 计算机的大部分计算都需要数据参加,这些参加某一指令计算的数据就叫该指令的操 作数。汇编语言的指令格式如下: 操作码操作数1,操作数2,操作数3,…,操作数n 操作码:指示计算机要进行的某种指令操作,在汇编语言中,操作指令采用助记符的形式来 表示操作指令,即操作码 操作数:不同的操作码需要不同的操作数数量,大部分操作码需要的操作数不超过3个,也 有的指令不需要操作数。操作数的类型也是多种多样,它可以是常数、可以是存储单元、可 以是地址、甚至可以某中指令操作码等等。汇编语言中很多操作码需带有两个操作数,就把 前面的操作数称为目的操作数、后面的操作数称为源操作数。 第一节 IBM PC机的寻址方式 与数据有关的寻址方式 (一)立即寻址方式 操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放代码段中,这 种操作数叫立即数(相当高级语言的常量)。立即数可以是8位或16位数,若是16位数则 高位字节存放在高地址中,低位字节存放在低地址中。这种方式如下图所示 指令 操作数 操作码直接对立即数进行操作 立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字 段,不能用于目的操作数字段 例1 则指令执行后,(AL)=05H,8位运算 例2 MOV AX, 3064H 则指令执行后,(AX)=3064H,16位运算 数据的执行过程可用下图示意
第三章 IBM PC 机的指令系统和寻址方式 计算机完成的任何功能,都是通过执行一系列指令来实现的,因而每种计算机都有 一组指令集提供给用户使用,这组指令集合就称为计算机的指令系统。 什么是寻址方式?计算机指令中,为了取得操作数的地址(目的取得操作数的内容) 而进行的寻找该操作数物理地址的方式。 计算机的大部分计算都需要数据参加,这些参加某一指令计算的数据就叫该指令的操 作数。汇编语言的指令格式如下: 操作码 操作数 1,操作数 2,操作数 3,…,操作数 n 操作码:指示计算机要进行的某种指令操作,在汇编语言中,操作指令采用助记符的形式来 表示操作指令,即操作码。 操作数:不同的操作码需要不同的操作数数量,大部分操作码需要的操作数不超过 3 个,也 有的指令不需要操作数。操作数的类型也是多种多样,它可以是常数、可以是存储单元、可 以是地址、甚至可以某中指令操作码等等。汇编语言中很多操作码需带有两个操作数,就把 前面的操作数称为目的操作数、后面的操作数称为源操作数。 第一节 IBM PC 机的寻址方式 一、与数据有关的寻址方式 (一)立即寻址方式 操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放代码段中,这 种操作数叫立即数(相当高级语言的常量)。立即数可以是 8 位或 16 位数,若是 16 位数则 高位字节存放在高地址中,低位字节存放在低地址中。这种方式如下图所示: 操作码直接对立即数进行操作。 立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字 段,不能用于目的操作数字段。 例 1 MOV AL,5 则指令执行后,(AL)=05H,8 位运算 例 2 MOV AX,3064H 则指令执行后,(AX)=3064H,16 位运算 数据的执行过程可用下图示意:
存储器 AX 指令 代码段 OP表示该指令的操作码部分。 (二)寄存器寻址 操作数在寄存器,指令指定寄存器号。对于16位操作数,寄存器可以是AX、BX、CX、 DX、SI、DI、SP相BP等;对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH DL和DH。这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因 而可以取得较高的运算速度。这种方式如下图所示: 指令 寄存器 存器号燃作数 例 MOV AX, BX 如指令执行前(AX)=3064H,(BX)=1234H,则指令执行后,(AX)=1234H,(BX)保持不变 除了上述两种寻址方法外,以下介绍的寻址方式的操作数都在除代码段以外的存储区 中,通过不同的方式求得操作数地址,从而取得操作数。 (三)直接寻址 在 IBM PC机中将操作数的偏移地址称为有效地址EA。在直接寻址方式中有效地址EA 就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须 先求出操作数的物理地址,然后再访问存储器才能取得操作数,如下图所示。 段寄存器 段地址 指令 存储器 EA 操作数 如操作数在数据段中,则物理地址=16d×(DS)十EA。1BMPC机中允许数据存放在数 据段以外的其他段中,此时应在指令中指定段跨越前缀,在计算物理地址时应使用指定的段 寄存器。 例 [2000H (DS)=3000H,则执行情况如下图所示。执行结果为:(Ax)=3050
OP 表示该指令的操作码部分。 (二)寄存器寻址 操作数在寄存器,指令指定寄存器号。对于 16 位操作数,寄存器可以是 AX、BX、CX、 DX、SI、DI、SP 相 BP 等;对于 8 位操作数,寄存器可以是 AL、AH、BL、BH、CL、CH、 DL 和 DH。这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因 而可以取得较高的运算速度。这种方式如下图所示: 例 3 MOV AX,BX 如指令执行前(AX)=3064H,(BX)=1234H,则指令执行后,(AX)=1234H,(BX)保持不变。 除了上述两种寻址方法外,以下介绍的寻址方式的操作数都在除代码段以外的存储区 中,通过不同的方式求得操作数地址,从而取得操作数。 (三)直接寻址 在 IBM PC 机中将操作数的偏移地址称为有效地址 EA。在直接寻址方式中有效地址 EA 就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须 先求出操作数的物理地址,然后再访问存储器才能取得操作数,如下图所示。 如操作数在数据段中,则物理地址=16d×(DS)十 EA。1BMPC 机中允许数据存放在数 据段以外的其他段中,此时应在指令中指定段跨越前缀,在计算物理地址时应使用指定的段 寄存器。 例 4 AX , [2000H] (DS)=3000H,则执行情况如下图所示。执行结果为;(Ax)=3050H
存储器 O p 00 代码段 20 30000 32000 50 数据段 30 在汇编语言指令中,可以用符号地址代替数值地址,如 MOV AX, VALUE 此时 VAIUE为存放操作数单元的符号地址。如写成 MOV AX, VALUEJ 也是可以的.两者是等效的。如果 VALUE在附加段中,则应该指定段跨越前缀如下 MOV X, ES: VALUE 10V AX, ES: VALUE 直接寻址方式适用于处理单个变量,例如需要处理某个存放在存储器里的变量,可用直 接寻址方式,将该变量先取到一个寄存器中,然后在做处理。 IBM PC机规定:除在双操作数中,除立即数外,必须有一个操作数使用寄存器方式。 这也是一个常量常常送到寄存器去的原因 (四)寄存器间接址 操作数的有效地址在基址寄存器BX、BP或变垃寄存器SI、D中,而操作数则在存储 器中,如下图所示。 段寄存器 段地址 指令寄存器 存储器 寄存器 EA 操作数 如果指令中指定的寄存器是BX、SI、D,则操作数在数据段(DS)中,所以用DS寄 存器的内容作为段地址,即操作数的物理地址为: 物理地址=16d×(DS)十(BX) 或物理地址;16d×(DS)+(SI 或物理地址=16d×(DS)+(Dn) 如指令中指定SP寄存器,则操作数在堆栈段(SS)中,段地址在SS中,所以操作数的物 理地址为: 物理地址=16d×(SS)十(SP)
在汇编语言指令中,可以用符号地址代替数值地址,如: MOV AX,VALUE 此时 VAIUE 为存放操作数单元的符号地址。如写成 MOV AX,[VALUE] 也是可以的.两者是等效的。如果 VALUE 在附加段中,则应该指定段跨越前缀如下; MOV AX, ES:VALUE 或 MOV AX, ES:[VALUE] 直接寻址方式适用于处理单个变量,例如需要处理某个存放在存储器里的变量,可用直 接寻址方式,将该变量先取到一个寄存器中,然后在做处理。 IBM PC 机规定:除在双操作数中,除立即数外,必须有一个操作数使用寄存器方式。 这也是一个常量常常送到寄存器去的原因。 (四)寄存器间接址 操作数的有效地址在基址寄存器 BX、BP 或变垃寄存器 SI、DI 中,而操作数则在存储 器中,如下图所示。 如果指令中指定的寄存器是 BX、SI、DI,则操作数在数据段(DS)中,所以用 DS 寄 存器的内容作为段地址,即操作数的物理地址为: 物理地址=16d×(DS)十(BX) 或 物理地址;16 d×(DS)十(SI) 或 物理地址=16d×(DS)十(DI) 如指令中指定 SP 寄存器,则操作数在堆栈段(SS)中,段地址在 SS 中,所以操作数的物 理地址为: 物理地址=16d×(SS)十(SP)
例5MOV 如果 (DS)=2000H,(BX)=1000H 物理地址=16d×(DS)+(BX)=2000+1000H=21000H 执行结果见下图所示: 存储器 20000 2l000 数 A O 据 50 执行结果为:(AX)=50AOH 指令中也可指定段跨越前缀来取得其他段中的数据。如 MOv AX, ES: [BX 这种寻址方式可以用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出 表格中的下一项 (五)寄存器相对寻址方式 操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量 之和。即 (BX) (BP) 8位 EA (SI) 16位位移量 D1) 样,除有段跨越前缀者外,对于寄存器为BX、SI、DI的情况,段寄存器用DS,而 寄存器BP则使用SS段寄存器的内容作为段地址。这种寻址方式示于下图。 段寄存器 指令 段地址 寄存器位移量 Ea 存储器 轲积寄存器 ⑦操作数 地址 其物理地址计算如下:
例 5 MOV AX ,[BX] 如果 (DS)=2000H , (BX)=1000H 则 物理地址=16d×(DS)十(BX) = 20000H+1000H = 21000H 执行结果见下图所示: 执行结果为:(AX)=50A0H 指令中也可指定段跨越前缀来取得其他段中的数据。如; MOV AX,ES:[BX] 这种寻址方式可以用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出 表格中的下一项。 (五)寄存器相对寻址方式 操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量 之和。即 同样,除有段跨越前缀者外,对于寄存器为 BX、SI、DI 的情况,段寄存器用 DS,而 寄存器 BP 则使用 SS 段寄存器的内容作为段地址。这种寻址方式示于下图。 其物理地址计算如下:
物理地址=16d×(Ds)+(BX)+8位位移量 或(SI)或16位位移量 或(DI) 或 物理地址=16d×(SS)+(BP)+8位位移量 或16位位移量 例6 MOV AX, COUNTISI(也可表示为 MOV AX,[ COUKT十SI; 其中, COUNT为16位位移量的符号地址 如果(DS)=3000H,(SI)=2000 I COUNT=3000H 则物理地址=30000+2000+3000=35000H 指令执行情况如下图所示,执行结果是(AX)=1234H O P 操作码 o P 00 位移量 300UN段 30000 AX COUNT 33000 数 (Si) 135000 据 这种寻址方式同样可用于表格处理,表格的首地址可设置为 COUNT,利用修改基址 或变址寄存器的内容来取得表格中的数值 直接变址寻址方式也可以使用段跨越前缀 (六)基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。两个寄存器均由指 令指定。如果基址寄存器为BX,段寄存器使用DS:如基址寄存器为BP时,段寄存器则用 SS。因此,物理地址为 物理地址=16d×(DS)+(BX)+(SI) 或(DI 或 物理地址=16d×(SS)+(BP)+(S) 或(DI) 这种寻址方式见下图:
例 6 MOV AX,COUNT[SI] (也可表示为 MOv AX,[COUKT 十 SI;] 其中,COUNT 为 16 位位移量的符号地址。 如果(DS)=3000H,(SI)=2000H COUNT=3000H 则物理地址 = 30000 十 2000 十 3000 =35000H 指令执行情况如下图所示,执行结果是(AX)=1234H 这种寻址方式同样可用于表格处理,表格的首地址可设置为 COUNT,利用修改基址 或变址寄存器的内容来取得表格中的数值。 直接变址寻址方式也可以使用段跨越前缀。 (六)基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。两个寄存器均由指 令指定。如果基址寄存器为 BX,段寄存器使用 DS;如基址寄存器为 BP 时,段寄存器则用 SS。因此,物理地址为: 这种寻址方式见下图:
段寄存器 指 变址寄存器没炮址] 蓬基址老存器变址寄圈变址值EA 存储器 基址寄存器 G(-操作数 基地址 例7 MOV AX,[BX][D 或写为: MoV AX,[DX十D (DS)=2100H (BX)=0158H (Dl)=10A5H 则EA=0158H十10A5H=11FDH 物理地址=2000H+1FDH=22FDH 指令执行情况如下图所示。执行结果(AX)=1234H 存储器 21000 数 AX (BX)→(2158 (221FD 段 34 (七)相对基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之 和。同样,当基址寄存器为BX时,使用DS段寄存器:而当基址寄存器为BP时,则使用 SS为段寄存器。因此物理地址为: 物理地址=16dX(DS)+(BX)+(Sm)+8位位移量 或(DI)或16位位移量 或 物理地址=16d×(SS)+(BP)+(SI)+8位位移量 或(D)或16位位移量 这种寻址方式参见下图:
例 7 MOV AX,[BX][Dl] (或写为: MoV AX,[DX 十 D1] 如 (DS)=2100H (BX)=0158H (D1)=l0A5H 则 EA=0158H 十 10A5H=11FDH 物理地址=2l000H 十 11FDH =221FDH 指令执行情况如下图所示。执行结果(AX)=1234H。 (七)相对基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和 8 位或 16 位位移量之 和。同样,当基址寄存器为 BX 时,使用 DS 段寄存器;而当基址寄存器为 BP 时,则使用 SS 为段寄存器。因此物理地址为: 这种寻址方式参见下图:
指 段寄存器 基址寄存器变扯寄存器位移厨 段地址 变址寄存器 ea 存储器 变址值 操作数 基址寄存器 生地址 刨8 MOv AX, MASK[BXIISI (也可以写成 MOV AX,MASK[DX+SI 或 MOV AX.[MASK十BX+Sl) 如(DS)=30004,(BX)=2000H、(SD)=1000H,MASK=0250H, 则物理地址=16d×(DS)十(BX)+(SD)+MASK =30000+2000+1000十0250 =33250H 指令执行情况如下图所示。执行结果(AX)=1234H 存储器 o P 代 o P 码 MASK 30000 BX)→(32000 MASK 32250 数 (SIY 33250 I 2 这种寻址方式为堆栈处理提供了方便。一般(BP)可指向栈顶,从栈顶到数组的首地址可 用位移量表示,变址寄存器可用来访问数组中的某个元索 、与转移地址有关的寻址方式 这种寻址方式用来确定转移指令及CALL指令的转向地址 (一)段内直接寻址
刨 8 MOV AX,MASK[BX][SI] (也可以写成 M0V AX,MASK[DX 十 SI] 或 MoV AX.[MASK 十 BX 十 SI] ) 如 (DS)=3000H,(BX)=2000H、(SI)=l000H,MASK=0250H, 则 物理地址=16d×(DS)十(BX)十(SI)十 MASK =30000 十 2000 十 1000 十 0250 =33250H 指令执行情况如下图所示。执行结果(AX)=1234H。 这种寻址方式为堆栈处理提供了方便。一般(BP)可指向栈顶,从栈顶到数组的首地址可 用位移量表示,变址寄存器可用来访问数组中的某个元索。 二、与转移地址有关的寻址方式 这种寻址方式用来确定转移指令及 CALL 指令的转向地址。 (一)段内直接寻址
转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。如下 图: 指令 IF寄存器 这种方式的转向有效地址用相对于当前IP值的位移量来表示,所以它是一种相对寻址 方式。指令中的位移量是转向的有效地址与当前IP值之差,所以当这一程序段在内存中的 不同区域运行时,这种寻址方式的转移指令本身不会发生变化,这是符合程序的再定位要求 的。这种寻址方式用于条件转移和无条件转移指令,但是,当它用于条件转移时,位移量只 允许8位。无条件转移指令在位移量为8位时,叫短跳转 指令的汇编语言格式为 JMP NEAR PTR PROGIA JMP SHORT QUEST 其中, PROGIA和 QUEST均为转向的符号地址,在机器指令中,用位移量来表示。在汇编 指令中,如果位移量为16位,则在符号地址前加操作符 NEAR PTR。如果位移量为8位, 则在符号地址前加操作符 SHORT。 (二)段内间接寻址 转向有效地址是一个寄存器或是存储单元的内容,这个寄存器或存储单元的内容可以 用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向的有效地址用来取 代IP寄存器的内容。此种寻址方式如下图所示。 寄存器 指令[很据数据寻址}一转向的有效地址 据寻盐方式方式计算出EA或 转向的有效地址 存储单元 注意:这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。也就是说 条件转移指令只能使用段内直接寻址的8位位移量,而JMP和CALL指令则可以使用任何 跳转方式。 段内间接寻址转移指令的汇编格式可以表示为 MP WORD PTR[BP+TABLE 等。其中 WORD PTR又称为操作符(伪),用以指出其后的寻址方式所取得的转向地址是 个字的有效地址,也就是说它是一种段内转移 以上两种寻址方式均为段内转移,所以直接把求得的转移的有效地址送到PP寄存 器就可以了。如果需要计算转移的物理地址,则计算公式应该是 物理地址=16d×(CS)十EA 其中EA即为上述转移的有效地址 下面举例说明在段内间接寻址方式的转移指令中,转移的有效地址的计算方法
转向的有效地址是当前 IP 寄存器的内容和指令中指定的 8 位或 16 位位移量之和。如下 图: 这种方式的转向有效地址用相对于当前 IP 值的位移量来表示,所以它是一种相对寻址 方式。指令中的位移量是转向的有效地址与当前 IP 值之差,所以当这一程序段在内存中的 不同区域运行时,这种寻址方式的转移指令本身不会发生变化,这是符合程序的再定位要求 的。这种寻址方式用于条件转移和无条件转移指令,但是,当它用于条件转移时,位移量只 允许 8 位。无条件转移指令在位移量为 8 位时,叫短跳转。 指令的汇编语言格式为: JMP NEAR PTR PROGIA JMP SHORT QUEST 其中,PROGIA 和 QUEST 均为转向的符号地址,在机器指令中,用位移量来表示。在汇编 指令中,如果位移量为 16 位,则在符号地址前加操作符 NEAR PTR。如果位移量为 8 位, 则在符号地址前加操作符 SHORT。 (二)段内间接寻址 转向有效地址是一个寄存器或是存储单元的内容,这个寄存器或存储单元的内容可以 用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向的有效地址用来取 代 IP 寄存器的内容。此种寻址方式如下图所示。 注意:这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。也就是说, 条件转移指令只能使用段内直接寻址的 8 位位移量,而 JMP 和 CALL 指令则可以使用任何 跳转方式。 段内间接寻址转移指令的汇编格式可以表示为 JMP BX JMP WORD PTR[BP+TABLE] 等。其中 WORD PTR 又称为操作符(伪),用以指出其后的寻址方式所取得的转向地址是 一个字的有效地址,也就是说它是一种段内转移。 以上两种寻址方式均为段内转移,所以直接把求得的转移的有效地址送到 IP 寄存 器就可以了。如果需要计算转移的物理地址,则计算公式应该是: 物理地址=l 6d×(CS)十 EA 其中 EA 即为上述转移的有效地址。 下面举例说明在段内间接寻址方式的转移指令中,转移的有效地址的计算方法
假设: DS)=2000H,(BX)=1256H,(SD)=528FH, 位移量=20AH,(232F7H)=3280H,(264E5H)=2450H 例9 J MP BX 则执行该指令后(P)=1256H 例10 JMP TABLE[BXJ 则执行该指令后P)=(16d×(D)十(BX)十位移量) =(20000+1256+20A1) =(232F7H) =3280H 例11 JMP BXIIS 则指令执行后(P)=(16d×(DS)十(BX)十(SI (200001256十528F =(264E5H) =2450H (三)段间直接转移 指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代 IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容就完成了从一个段到另一个 段的转移操作,如下图所示。 IP寄存器 偏移地址 地址 CS寄存器 这种指令的汇编语言格式可表示为: JMP FAR PTR NEXTROUTINT 其中, NEXTROUTINT为转向的符号地址, PAR FAR则是表示段间转移的操作符。 (四)段间间接转移 用存储器中的二个相继字的内容来取代IP和CS寄存器中的原始内容以达到段间转 移约目的。这里存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数 据寻址方式取得,如下图所示 存储器中的二个 相继字 指令 根据数裾寻址转向的偏移地址 数据寻址方式方式计算出EA 转向的段地址cs 这种指令的汇编语言格式可表示 JMP DWORD PTR[INTERS+BX 其中,[ INTERS+BⅪ]说明数据寻址方式为直接变址寻址方式, DWORD PTR为双字操作符 说明转向地址需要取双字为段间转移指令
假设: (DS)=2000H,(BX)=1256H,(SI)=528FH, 位移量=20A1H,(232F7H)=3280H,(264E5H)=2450H。 例 9 JMP BX 则执行该指令后(IP)=1256H 例 10 JMP TABLE[BX] 则执行该指令后(IP)=(16d×(D)十 (BX)十位移量) =(20000 十 1256 十 20A1) =(232F7H) =3280H 例 11 JMP [BX][SI] 则指令执行后(IP)=(16d×(DS)十(BX)十(SI)) =(20000 十 l256 十 528F) =(264E5H) =2450H (三)段间直接转移 指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代 IP 寄存器的内容,用指令中指定的段地址取代 CS 寄存器的内容就完成了从一个段到另一个 段的转移操作,如下图所示。 这种指令的汇编语言格式可表示为: JMP FAR PTR NEXTROUTINT 其中,NEXTROUTINT 为转向的符号地址,PAR FAR 则是表示段间转移的操作符。 (四)段间间接转移 用存储器中的二个相继字的内容来取代 IP 和 CS 寄存器中的原始内容以达到段间转 移约目的。这里存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数 据寻址方式取得,如下图所示。 这种指令的汇编语言格式可表示为: JMP DWORD PTR[INTERS+BX] 其中,[INTERS+BX]说明数据寻址方式为直接变址寻址方式,DWORD PTR 为双字操作符, 说明转向地址需要取双字为段间转移指令
第二节 IBM PC机的机器语言指令概况 我们用汇编语言编写的汇编语言程序输入计算机后,由机器提供的“汇编程序”将 它翻译成由机器指令组成的机器语言程序,才能由计算机识别并执行。因此汇编语言程序是 由汇编程序翻译成可执行的机器语言程序曲,一般说来,这一过程不必由人来干预。我们这 里只介绍一下基本原理,以便在必要时也可完成类似的工作 机器语言指令由操作码和地址码两部分组成,下面分别加以说明。 、操作码的机器语言 IBM PC机的机器语言指令是多字节指令,一条指令可以由1—7个字节组成。指令的 操作码(用OP表示)用二进制代码表示本指令所执行的操作,在 IBMPC机中,它通常用 指令的第一个字节表示,有时由于用8位还不够,因此在指令的第二个字节中还可能占有3 位操作码,除此以外的其他字节则用来表示地址码。 在多数操作码中,常使用某些位来指示某些信息。例如 OP 其中W位用来指示本指令是对字(w=1)还是对字节(w=0)进行操作 d值在双操作数指令中才有效。 IBMPC机规定双操作数指令的两个操作数必须有一个 操作数放在寄存器中,d位指定寄存器用于目的操作数(d=1)还是源操作数(d=0) 另外,当使用立即方式寻址时,操作码中用S位表示符号扩展 。 如立即数为8位,但要求扩展成16位数(高位字节按低位字节的最高有效位作符号扩展) 时、S位为l。 因此当指令作字节操作时,SW=00,当指令有16位立即数且作字操作时SW=01;而 当指令有8位立即数但需要经符号扩展成16位立即数作字操作时,则Sw=11。 出于 IBM PC的指令格式很多,这里我们只作一些基本清况介绍,必要时读者可通过查 、寻址方式的机器语言表示 IBMPC机用一个寻址方式字节表示操作数的寻址方式,它通常是机器指令的第2个 字节。寻址方式字节可表示如下: re / 其中reg表示寄存器方式,在双操作效指令的情况下规定必须有一个操作致在寄存器中, 该寄存器由reg字段指定。它与操作码字节中的w位相结合确定的寄存器如下表所示
第二节 IBM PC 机的机器语言指令概况 我们用汇编语言编写的汇编语言程序输入计算机后,由机器提供的“汇编程序”将 它翻译成由机器指令组成的机器语言程序,才能由计算机识别并执行。因此汇编语言程序是 由汇编程序翻译成可执行的机器语言程序曲,一般说来,这一过程不必由人来干预。我们这 里只介绍一下基本原理,以便在必要时也可完成类似的工作。 机器语言指令由操作码和地址码两部分组成,下面分别加以说明。 一、操作码的机器语言 IBM PC 机的机器语言指令是多字节指令,一条指令可以由 1—7 个字节组成。指令的 操作码(用 OP 表示)采用二进制代码表示本指令所执行的操作,在 IBMPC 机中,它通常用 指令的第一个字节表示,有时由于用 8 位还不够,因此在指令的第二个字节中还可能占有 3 位操作码,除此以外的其他字节则用来表示地址码。 在多数操作码中,常使用某些位来指示某些信息。例如 其中 W 位用来指示本指令是对字(w=1)还是对字节(w=0)进行操作。 d 值在双操作数指令中才有效。IBMPC 机规定双操作数指令的两个操作数必须有一个 操作数放在寄存器中,d 位指定寄存器用于目的操作数(d=1)还是源操作数(d=0)。 另外,当使用立即方式寻址时,操作码中用 S 位表示符号扩展; 如立即数为 8 位,但要求扩展成 16 位数(高位字节按低位字节的最高有效位作符号扩展) 时、S 位为 l。 因此当指令作字节操作时,SW=00,当指令有 16 位立即数且作字操作时 SW=01;而 当指令有 8 位立即数但需要经符号扩展成 l6 位立即数作字操作时,则 SW=11。 出于 IBM PC 的指令格式很多,这里我们只作一些基本清况介绍,必要时读者可通过查 子 二、寻址方式的机器语言表示 IBMPC 机用一个寻址方式字节表示操作数的寻址方式,它通常是机器指令的第 2 个 字节。寻址方式字节可表示如下: 其中 reg 表示寄存器方式,在双操作效指令的情况下规定必须有一个操作致在寄存器中, 该寄存器由 reg 字段指定。它与操作码字节中的 w 位相结合确定的寄存器如下表所示