中断过程步骤为:
1.取得中断类型码N;
2.标志寄存器入栈,TF=0、IF=0;
3.CS、IP入栈;
4.(IP)=(N*4),(CS)=(N*4+2)。
我在这里有几个疑问,
1.其中第二步中,标志寄存器入栈,具体是哪个栈呢?
2.还有Debug利用单步中断来实现T命令的功能,说明用t命令执行一条指令后,CPU响应单步中断,这个过程中的第二步,标志寄存器是入的哪个栈呢?
3.课本(第二版)P75页,在执行mov ss,ax 时,发生中断,其中标志寄存器和CS,IP中的内容入的栈是定义了一个具体栈的,这是怎么回事?标志寄存器和CS,IP都入栈,按理说不应该是:
2000:0000 00 00 00 00 00 00 00 00-00 00 08 00 7E 0B 7B 05
为什么在操作的时候,栈中内容是:
2000:0000 00 00 00 00 00 00 00 20-00 00 08 00 7E 0B 7B 05
再给ax赋值,入栈后,又为什么会是这样的:
2000:0000 00 00 00 00 23 31 00 00-0C 00 7E 0B 7B 05 23 31
代码:
mov ax,2000h
mov ss,ax
mov sp,10h
mov ax,3123h
push ax
mov ax,3366h
push ax
操作过程:
DS=0B6E ES=0B6E SS=0B7E CS=0B7E IP=0003 NV UP EI PL NZ NA PO NC
0B7E:0003 8ED0 MOV SS,AX
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t
AX=2000 BX=0000 CX=0015 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B6E ES=0B6E SS=2000 CS=0B7E IP=0008 NV UP EI PL NZ NA PO NC
0B7E:0008 B82331 MOV AX,3123
-d 2000:0 f
2000:0000 00 00 00 00 00 00 00 20-00 00 08 00 7E 0B 7B 05 ....... ....~.{.
-t
AX=3123 BX=0000 CX=0015 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B6E ES=0B6E SS=2000 CS=0B7E IP=000B NV UP EI PL NZ NA PO NC
0B7E:000B 50 PUSH AX
-t
AX=3123 BX=0000 CX=0015 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=0B6E ES=0B6E SS=2000 CS=0B7E IP=000C NV UP EI PL NZ NA PO NC
0B7E:000C B86633 MOV AX,3366
-d 2000:0 f
2000:0000 00 00 00 00 23 31 00 00-0C 00 7E 0B 7B 05 23 31 ....#1....~.{.#1
-q
D:\asm> |