表3.1reg字股所对应的寄存器 000 AX AL 001 010 DX DL 011 BX 100 SP Ah 101 BP CH 110 SI DH 1l1 BH mod字段与r/ m(register/ memory)字段结合在一起确定另一个操作数的寻址方式。 (1)mod=1l为寄存器方式,由r/m的内容确定选用哪个寄存器,具体值由下表来 确定 夜3.2存储器寻址方式 11 000 (Bx)+(t)(Bx)+(S)+D8(Bx)+(S)+D16 AL AX 00(Bx)+(D)(Bx)+(D)+D8(Bx)+(D)+D16 CLCX 010/(B)+(s1)(BP)+(s)+D8(P)+(sI)+D6 DE DX (BP)+(Dn)(BP)+(D)+D8;(BP)+(Dr)+D16 (SI)+D8 (S1)+D16 AH (DI) (DI)+D8 (DI)+DI6 CHBP D16 BP)+D8 (BP)+D16 l10 DH SI (BX) (BX)+D8 (BX)+D16 BH
mod 字段与 r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式。 (1)mod=11 为寄存器方式,由 r/m 的内容确定选用哪个寄存器,具体值由下表来 确定
其他三种寻址方式则为操作数在存储器中时的寻址方式,由表3.2表示,下面分别加 以说明 (2)mod=00为无位移量字节的存储器寻址方式。其中当r/m=110时指定为直接寻 址方式,此时寻址方式字节之后跟有16位位移量D6,用来指出操作数的有效地址。 (3)mod=01为带有一个位移量字节的存储器寻址方式,因此指令中应有 01 D& 其中D8为8位位移量,是带符号数,当用来计算有效地址时,可自动将符号扩展到16 位 (4)mod=10为带有二个位移量字节的存储器寻址方式,因此指令中有 10 re ft D16低位 D】6高位 其中D16为16位位移量,它也是带符号数 上表中每项下的段寄存器是指无段跨越前缀的情况下所使用的隐含的段寄存器。如 果指令中指定段跨越前缀,则在机器语言中使用放在指令之前的一个字节来表示,如下所示: 00s010 其中001及110均为段前缀标志,SEG则指定四个段寄存器中的一个,如下表所示 衰3.3SEG宇段所对应的段寄存 SEG 段寄存器 10 DS IBM PC机规定下列三种情况下不允许使用段跨越前缀 访问堆栈的指令(如PUSH和CALL等)使用SP作为偏移地址指针,只能使用SS作 为段奇存器
其他三种寻址方式则为操作数在存储器中时的寻址方式,由表 3.2 表示,下面分别加 以说明: (2)mod=00 为无位移量字节的存储器寻址方式。其中当 r/m=110 时指定为直接寻 址方式,此时寻址方式字节之后跟有 16 位位移量 D16,用来指出操作数的有效地址。 (3)mod=01 为带有一个位移量字节的存储器寻址方式,因此指令中应有 其中 D8 为 8 位位移量,是带符号数,当用来计算有效地址时,可自动将符号扩展到 16 位。 (4)mod=10 为带有二个位移量字节的存储器寻址方式,因此指令中有 其中 D16 为 16 位位移量,它也是带符号数。 上表中每项下的段寄存器是指无段跨越前缀的情况下所使用的隐含的段寄存器。如 果指令中指定段跨越前缀,则在机器语言中使用放在指令之前的一个字节来表示,如下所示: 其中 001 及 110 均为段前缀标志,SEG 则指定四个段寄存器中的一个,如下表所示 IBM PC 机规定下列三种情况下不允许使用段跨越前缀; 1.访问堆栈的指令(如 PUSH 和 CALL 等)使用 SP 作为偏移地址指针,只能使用 SS 作 为段奇存器
2.串处理指令规定源寄存器使用SI,源串在DS段中,目的寄存器使用D,目的串必 须在ES段中。这里如果要用段跨越前缀则只能用于源而不能用于目的,也就是说,SI可以 更换段寄存器,而D则只能使用ES作为段寄存器,不允许用段跨越前缀更换。 3.指令只能存放在代码段中。 根据以上说明,我们对 IDM PC机的机器指令情况已经有了一般的了解,下面在以加法 指令为例,对机器指令作一些具体的分析。 (三)加法的机器指令举例 加法指令的汇编语言格式为 Add DST, SRC 其中SRC表示源操作数地址,DST表示目的操作数地址 (DST)←(DST)+(SRC) 根据不同的寻址方式,加法指令可以有三种格式: 1. ADD mem/regl, mem/reg2 其中mem/regl表示目的操作数地址,mem/res2表示源操作数地址,它们都可以指定 个寄存器或一个存储单元的内容作为操作数。这些操作数可以是8位的或16位的,它们可 同时指定两个寄存器,但不能同时指定两个存储单元,因此它的工作方式可以是以下: a)寄存器与寄存器的内容相加,结果存入寄存器中 b)寄存器与存储单元的内容相加,结果存入存储单元中。 c)存储单元与寄存器的内容相加,结果存入寄存器中。 这种寻址方式的机器语言为 000000d D低位 高位 其中00000为操作码。w=0为字节运算:w=1为字运算。d=0时,由mod、r/m决定 目的mem/regl,reg决定源mem/reg2;d=1时,由mod、r/m决定源mem/reg2,reg 决定目的mem/regl,虚线框中的位移量根据寻址方式确定其有无 ADD mem/reg,data 把存储在代码段中的立即数与指定的寄存器或存储单元的内容相加,结果存放于寄 存器或存储单元中。指令的机器语言为:
2.串处理指令规定源寄存器使用 SI,源串在 DS 段中,目的寄存器使用 DI,目的串必 须在 ES 段中。这里如果要用段跨越前缀则只能用于源而不能用于目的,也就是说,SI 可以 更换段寄存器,而 DI 则只能使用 ES 作为段寄存器,不允许用段跨越前缀更换。 3.指令只能存放在代码段中。 根据以上说明,我们对 IDM PC 机的机器指令情况已经有了一般的了解,下面在以加法 指令为例,对机器指令作一些具体的分析。 (三)加法的机器指令举例 加法指令的汇编语言格式为: ADD DST,SRC 其中 SRC 表示源操作数地址,DST 表示目的操作数地址。 (DST) (DST) + (SRC) 根据不同的寻址方式,加法指令可以有三种格式: 1. ADD mem/reg1 , mem/reg2 其中 mem/reg1 表示目的操作数地址,mem/res2 表示源操作数地址,它们都可以指定一 个寄存器或一个存储单元的内容作为操作数。这些操作数可以是 8 位的或 16 位的,它们可 同时指定两个寄存器,但不能同时指定两个存储单元,因此它的工作方式可以是以下: a) 寄存器与寄存器的内容相加,结果存入寄存器中。 b) 寄存器与存储单元的内容相加,结果存入存储单元中。 c) 存储单元与寄存器的内容相加,结果存入寄存器中。 这种寻址方式的机器语言为; 其中 000000 为操作码。w=0 为字节运算;w=1 为字运算。d=0 时,由 mod、r/m 决定 目的 mem/reg1,reg 决定源 mem/reg2;d=1 时,由 mod、r/m 决定源 mem/reg2,reg 决定目的 mem/reg1,虚线框中的位移量根据寻址方式确定其有无。 2. ADD mem/reg, data 把存储在代码段中的立即数与指定的寄存器或存储单元的内容相加,结果存放于寄 存器或存储单元中。指令的机器语言为:
100000 mod 0 2 0 : D低位 D高位 data低位 data·高位 3. ADD 把存储在代码段中的立即数与ALW=0时)或AX(W=1时)中的内容相加,结果送回 AL或AX中。指令的机器语言为: 0000 data低位 ata高位 以下内容自己复习)
3. ADD ac , data 把存储在代码段中的立即数与 AL(W=0 时)或 AX(W=1 时)中的内容相加,结果送回 AL 或 AX 中。指令的机器语言为: (以下内容自己复习)