当前位置: 代码迷 >> 汇编语言 >> 关于TF=0时候,能否进行单步跟踪
  详细解决方案

关于TF=0时候,能否进行单步跟踪

热度:6825   发布时间:2013-02-26 00:00:00.0
【求助】关于TF=0时候,能否进行单步跟踪?
int指令后加中断类型码,根据教科书的讲解,这一步包含了置TF为0(即CPU为连续工作方式),所以理论上来说,此时任何中断都是不可以被单步跟踪的,就像单步执行时除法溢出以后,我们只能直接看到"Divide overflow",而不可单步跟踪0号中断的中断处理程序一样。但是问题是如果自己设置中断,TF同样被置0,发现中断处理程序的指令可以被单步跟踪,所以很疑惑。下面贴出本人的测试代码。 
1.中断安装程序(功能是计算ax的平方,返回ax,dx。ax存储低位,dx存储高位,中断类型码为7ch): 
[code=Assembly][/code]
code segment 

start: 

  mov ax,cs 

  mov ds,ax 

  mov si,offset do7ch 

  mov ax,0 

  mov es,ax 

  mov di,200h 

  mov cx,do7chend-do7ch 

  rep movsb 

  mov es:[7ch*4],word ptr 200h 

  mov es:[7ch*4+2],word ptr 0 

  mov ax,4c00h 

  int 21h 

do7ch: 

  mov dx,0 

  mul ax 

  iret 

do7chend: 

  nop  

code ends 

end start  

[code=Assembly][/code]
2.测试中断程序:
[code=Assembly][/code]
code segment 

start: 

mov ax,3246 

int 7ch  

mov ax,4c00h 

int 21h 

code ends 

end start 
[code=Assembly][/code]

复制代码测试结果成功表明中断程序完成了平方ax,当我单步跟踪程序2的时候,发现可以单步跟踪到程序1当中第16,第17行指令(mov dx,0 mul ax),这是不合理的,因为执行完int 7ch后,TF理论上应该为0。本人是初学者,等待高人解答疑惑,先感谢一下。O(∩_∩)O




------解决方案--------------------------------------------------------
你的问题就像问“为何在用户态下看不到printf系统写tty的内核调用代码?”一样,这个是保护,int 0 处理代码在内核空间,你所在的编程空间在用户态空间,系统能让你访问非法访内核么?,即使你V86也是一样的道理。。。。
  相关解决方案