. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->内中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  欢迎大家讨论,请求高手赐教,CPU何时检测TF标志  [待解决] 回复[ 1次 ]   点击[ 349次 ]  
zoudaokou2006
[帖 主]   [ 发表时间:2011-02-16 23:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-02-09 21:07
11.2节单步中断中讲DEBUG设置TF为1,使得CPU进入单步模式。单步模式下,每完成一条指令的执行,都会进入单步中断例程。
但我考虑,DEBUG设置TF为1也需要执行指令啊,如果按书上讲法“CPU每执行完一条指令后,如果检测到为1,则产生单步中断”的说法,那DEBUG设置TF的指令岂不会产生调试中断,那又岂能进行接下来的调试。
于是我考虑这个TF的检测是不是在指令执行之前呢,如果先判断TF,再执行的话,那DEBUG修改TF就可以讲通了。

我又查了一些资料,发现IA手册上讲:
TF Trap (bit 8) — Set to enable single-step mode for debugging; clear to
disable single-step mode. In single-step mode, the processor generates a
debug exception after each instruction. This allows the execution state of a
program to be inspected after each instruction. If an application program
sets the TF flag using a POPF, POPFD, or IRET instruction, a debug exception
is generated after the instruction that follows the POPF, POPFD, or IRET.
TF陷入(第8位):设值的时候激活调试的单步执行模式;清零则禁止单步执行模式。在单步执行模式下,处理器会在每条指令执行后产生一个调试异常中断,中断后允许查看每条指令执行后程序的状态。当程序用OPPF,OPOFD,或IRET指令来设置TF标识的时候,POPF,POPFD,IRET后的第一条指令会诱发一个调试异常中断。

按照这个说法,修改TF的指令不会产生单步中断,那在完成指令执行后检测TF,也可以讲通DEBUG修改TF的指令不产生中断的问题了。

但找了一下IA32手册,并没有讲这个CPU何时检测TF,只提到了“The processor generates a single-step debug exception if (while an instruction is being executed) it detects that the TF flag in the EFLAGS register is set."
这里用的是while,也就是当,也就是没有明确的说是指令执行前、执行中、还是执行后。


希望大家发表一下自己的看法,讨论一下这个问题~~~~~~~~~~

另外王爽老师的书12.11节,在“CPU在执行完一条指令之后”一句前用了“基本上”,那是不是有特殊的、另外的情况呢,希望大家探讨一下。


下面是我搜到的与这个问题有关的一些资料:
http://bbs.pediy.com/showthread.php?t=65515
http://wenku.baidu.com/view/20ecd82d7375a417866f8fde.html
zoudaokou2006
[第1楼]   [ 回复时间:2011-02-16 23:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-02-09 21:07
特殊的、另外的情况,就是,比如说“CPU执行完一条指令之前”,呵呵~~
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved