鱼C论坛

 找回密码
 立即注册
查看: 2311|回复: 1

标志寄存器TF的疑惑

[复制链接]
发表于 2012-5-4 00:16:15 | 显示全部楼层 |阅读模式
3鱼币
本帖最后由 清风居士2013 于 2012-5-4 00:15 编辑

int指令后加中断类型码,根据教科书的讲解,这一步包含了置TF为0(即CPU为连续工作方式),所以理论上来说,任何中断都是不可以被单步跟踪的,就像单步执行时除法溢出以后,我们只能直接看到"Divide overflow",而不可单步跟踪0号中断的中断处理程序一样。但是问题是如果自己设置中断,TF同样被置0,发现中断处理程序的指令可以被单步跟踪,所以很疑惑。下面贴出本人的测试代码。
1.中断安装程序(功能是计算ax的平方,返回ax,dx。ax存储低位,dx存储高位,中断类型码为7ch):
  1. code segment
  2. start:
  3.    mov ax,cs
  4.    mov ds,ax
  5.    mov si,offset do7ch
  6.    mov ax,0
  7.    mov es,ax
  8.    mov di,200h
  9.    mov cx,do7chend-do7ch
  10.    rep movsb
  11.    mov es:[7ch*4],word ptr 200h
  12.    mov es:[7ch*4+2],word ptr 0
  13.    mov ax,4c00h
  14.    int 21h
  15. do7ch:
  16.    mov dx,0
  17.    mul ax
  18.    iret
  19. do7chend:
  20.    nop
  21. code ends
  22. end start
复制代码

2.测试中断程序:
  1. code segment
  2. start:
  3. mov ax,3246
  4. int 7ch
  5. mov ax,4c00h
  6. int 21h
  7. code ends
  8. end start
复制代码
测试结果成功表明中断程序完成了平方ax,当我单步跟踪程序2的时候,发现可以单步跟踪到程序1当中第16,第17行指令,这是不合理的,因为TF理论上应该为0。个人感觉原因可能是上面自己的分析有误,或者是masm编译器做了特殊的设置,本人使用的masm版本是6.15.8803。
等待高人解答疑惑,先感谢一下。O(∩_∩)O

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-4 01:06:43 | 显示全部楼层
跟你一样等待答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 06:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表