计算机组成原理与汇编语言是理解计算机系统工作原理的关键领域,尤其在8086 CPU的环境下,理解和掌握逻辑地址与物理地址的概念及其转换、寻址方式以及指令系统的使用至关重要。
1. **逻辑地址与物理地址**:在计算机中,逻辑地址是由程序员在编程时使用的地址,通常基于虚拟内存系统,而物理地址则是内存芯片中实际存储单元的地址。8086 CPU在执行指令时,逻辑地址需要通过地址变换机制,如段地址与偏移地址的组合,转换成实际的物理地址进行访问。
2. **8086 CPU的SP寄存器**:SP(Stack Pointer)寄存器用于管理堆栈,当SS(Stack Segment)寄存器的内容为1A4BH,堆栈长度为100H字节时,SP的初始化值应为100H,表示堆栈的起始位置。初始指向的主存物理地址是SS寄存器的值加上SP寄存器的值,即1A4BH + 100H = 1A5B0H。
3. **8086指令的寻址方式**:
- (1) MOV ES, AX:寄存器到寄存器,这里是段寄存器到通用寄存器。
- (2) ADD DS:[12H], AL:直接寻址,立即数到内存。
- (3) SUB BX, 1200H:寄存器到寄存器,立即数到通用寄存器。
- (4) SHR AX, 1:寄存器到寄存器,立即数到通用寄存器。
- (5) AND -28H[BP][DI], AX:基址变址寻址,寄存器到内存。
- (6) MOV CX, LAB1[BX]:相对寻址,内存到寄存器。
- (7) SBB AX, [BX]:寄存器间接寻址,内存到寄存器。
- (8) OR DX, -360H[SI]:相对寻址,内存到寄存器。
- (9) ADC VAR1, CX:直接寻址,寄存器到内存。
- (10) XOR [DI], AX:寄存器间接寻址,寄存器到内存。
4. **8086指令语句的语法检查**:
- (1) MOV DS, 1234H:错误,不能将立即数直接传送到段寄存器。
- (2) ADD AH, AL:正确,寄存器到寄存器。
- (3) SUB CS, AX:错误,不能对CS段寄存器直接操作。
- (4) MOV BX, [BX][SI]:正确,基址变址寻址。
- (5) ADC VAR1, [BP][DI]:错误,两个操作数不能同时在内存中。
- (6) SBB [BX][BP], AX:错误,基址变址中不能两个都是基址寄存器。
- (7) PUSH 5678H:错误,立即数不能作为源操作数压入堆栈。
- (8) SHL [BP][SI], CL:错误,未明确指明操作数大小。
- (9) ROR AX, 2:错误,移位次数超过1需存入CL。
- (10) NEG AX, BX:错误,操作数个数错误。
- (11) LEA CS, AX:错误,目的操作数不能是段寄存器。
- (12) MOV AL, BX:错误,操作数位数不匹配。
- (13) ADD DS:200H, AX:正确,直接寻址。
- (14) AND [BX][BP], AH:错误,不能两个基址寄存器。
- (15) OR BH, -16H[BP]:正确,相对寻址。
- (16) CLC AX:错误,操作数个数错误。
- (17) MUL AX, BX:错误,操作数个数错误。
- (18) DIV 12H:错误,源操作数不能是立即数。
5. **8086指令执行后状态标志位**:
- (4.10) 执行MOV AX, 79A6H ADD AX, 912CH后,CF、PF、AF、ZF、SF和OF的值分别为1、1、1、0、0、0。
- (4.11) 执行MOV BX, 1234H SUB BX, 5678H ADD BX, 1234H后,CF、PF、AF、ZF、SF和OF的值分别为0、1、1、0、1、0。
6. **8086指令执行结果**:
- (4.12) 给定特定寄存器和内存内容,执行指令后的结果如下:
- (1) AL=12H
- (2) CX=1024H, DX=5678H
- (3) SI=1234H, [SI]=8765H
7. **8086指令实现功能**:
- (4.13)
- (1) 清零CF:CLC
- (2) 变为负数:NEG AX
- (3) 32位数相加:MOV BX, 2000H MOV DS, BX MOV BX, DS:0H ADC BX, DX ADC 2[BX], AX
8. **8086堆栈操作**:
- (4.14) 执行PUSH BX ADD BX, 1200H PUSH BX后,堆栈中栈顶4个字节内容为11ABH + 1200H = 11ABH 和11ABH,栈顶单元的偏移量是111CH,因为每次PUSH操作会使SP减16位(1120H - 16H = 111CH)。