问答题 486在16位和32位空间中各有哪些寻址方式?这些寻址方式有哪些共同点和不同点?使用时应该注意一些什么?
【正确答案】486在16位空间中的寻址方式如下。
   (1)8位寄存器寻址:AH、AL、BH、BL、CH、CL、DH或DL;
   (2)16位寄存器寻址:AX、BX、CX、DX、DI、SI、BP或SP;
   (3)8位或16位立即数寻址;
   (4)8位或16位存储器寻址:
   ·在DS段中的寻址方式如下。
   直接寻址:[a];
   间接寻址:[BX]、[SI]、[DI];
   基址寻址:[BX+d];
   变址寻址:[SI+d]、[DI+d];
   基变址寻址:[BX+SI],[BX+DI],[BX+SI+d],[BX+DI+d];
   ·在SS段中的寻址方式如下。
   基址寻址:[BP+d];
   基变址寻址:[BP+SI]、[BP+DI]、[BP+SI+d]、[BP+DI+d]。
   486在32位空间中的寻址方式有:
   (1)8位寄存器寻址:AH、AL、BH、BL、CH、CL、DH或DL;
   (2)32位寄存器寻址:EAX、EBX、ECX、EDX、EDI、ESI、EBP或ESP;
   (3)8位或32位立即数寻址;
   (4)8位或32位存储器寻址:
   ·在DS段中的寻址方式如下。
   直接寻址:[a];
   间接寻址:[EAX]、[EBX]、[ECX]、[EDX]、[EDI]、[ESI];
   基址寻址:[EAX+d]、[EBX+d]、[ECX+d]、[EDX+d]、[EDI+d]、[ESI+d];
   变址寻址:[a+i*s];
   基变址寻址:[EAX+i*s]、[EBX+i*s]、[ECX+i*s]、[EDX+i*s]、[EDI+i*s]、[ESI+i*s]、[EAX+i*s+d]、[EBX+i*s+d]、[ECX+i*s+d]、[EDX+i*s+d]、[EDI+i*s+d]、[ESI+i*s+d];
   ·在SS段中的寻址方式如下。
   基址寻址:[EBP+d];
   基变址寻址:[EBP+i*s+d]、[ESP+i*s]、[ESP+i*s+d]。其中,i*s为比例变址,这里变址器i可以是EAX、EBX、ECX、EDX、EDI、ESI和EBP中的一个;比例系数可以是1、2、4和8中的一个。
   在使用时应该注意以下几点:
   (1)在16位空间中,a为16位地址.d为8位或16位位移常数;在32位空间中,a为32位地址,d为8位或32位位移常数。
   (2)在16位空间中,存储器操作数有效地址的长度为16位,操作数长度通常有16位和8位两种。在32位空间中,存储器操作数有效地址的长度为32位,操作数长度通常有32位和8位两种。
   (3)在32位空间中,允许符号指令使用有效地址EA为16位的存储器寻址方式(这时有效地址高16位自动取。)。反之,在16位空间中,也允许符号指令使用有效地址EA为32位的存储器寻址方式(这时有效地址只能取低16位值)。
   (4)在32位空间中,允许符号指令使用16位空间中的操作数,如16位寄存器、立即数或存储单元等;反之,在16位空间中,也允许符号指令使用32位空间中的操作数,如32位寄存器、立即数或存储单元等。
【答案解析】