段寄存器 指 变址寄存器没炮址] 蓬基址老存器变址寄圈变址值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 位相结合确定的寄存器如下表所示