在计算机原理中,80x86指令系统是Intel处理器的核心组成部分,用于控制计算机硬件的操作。8086和80386是这个指令系统的两个不同发展阶段,它们的指令集有着共同的基础,但也存在一些差异。以下是针对题目中提到的知识点的详细解释:
1. **寻址方式**:
- **立即寻址**:如`MOV AX,100`,直接将数值100加载到AX寄存器中。
- **直接寻址**:如`MOV AX,[100]`,从内存地址100处读取数据到AX。
- **寄存器寻址**:如`MOV DL,[BP+SI]`,从BP和SI组合的地址中取出数据到DL。
- **寄存器间接寻址**:如`MOV [BX],CX`,将CX寄存器的内容存入由BX指向的内存位置。
- **基址变址寻址**:如`MOV [DI+5678H],AL`,基于DI加上偏移量5678H来访问内存并存储AL的内容。
- **隐含寻址**:如`POP CX`,从堆栈中弹出一个字并将其加载到CX寄存器,隐含地使用了SP寄存器。
2. **80386寻址方式**:
- **基址比例变址寻址**:如`MOV [EBP+EDI*2],EBX`,EBP加上EDI的两倍作为地址,将EBX内容写入。
- **比例变址寻址**:如`MOV [EBX*4],BX`,BX乘以4作为地址,将BX内容存入。
3. **非法指令**:
- `PUSH 1234H`:立即数不能作为PUSH指令的操作数。
- `MOV CS,AX`:CS不能作为目的操作数,因为CS是代码段寄存器,不能直接被修改。
- `IN AX,300`:端口号不能超过255。
- `MOV AX,[DX+12]`:DX不能参与直接寻址。
- `LEA BL,[BX+5]`:LEA指令的结果必须是16位偏移量,不能直接赋值给8位寄存器BL。
- `MOV [1000H],12H`:指令不明确,无法确定是字节还是字的传送。
4. **80386非法指令**:
- `MOV AX,12[EBX][SI*16]`:比例因子不能是16。
- `IMUL AL,BL,12`:在80386中,IMUL指令可以有双操作数,但在这里是非法的,因为AL是8位,而乘数12超过了8位范围。
5. **程序段执行后的状态**:
- 当执行`PUSH AX`后,AX不变,BX不变,SP减2变为0FFFEH,栈顶字节是AX的高位字节,栈顶第二字节是AX的低位字节。
- 接着`PUSH BX`,AX保持不变,BX不变,SP再减2变为0FFFCH,新的栈顶字节是BX的高位字节,栈顶第二字节是BX的低位字节。
了解这些基本的80x86指令系统知识对于理解计算机的底层工作原理至关重要,它涉及到处理器如何处理数据、如何存储和读取信息以及如何执行程序。在编写汇编代码或进行低级编程时,对这些寻址方式和指令的理解是必不可少的。