单步中断时栈中数据变化

debugk 2008-09-01 10:58:14
单步中断的过程如下:
(1)取得中断类型码1
(2)标志寄存器如栈,TF、IF置0
(3)CS、IP入栈
(4)(IP)=(1×4),(CS)=(1×4+2)
0B47:0000 B8460B        MOV     AX,0B46
0B47:0003 8ED0 MOV SS,AX
0B47:0005 BC1000 MOV SP,0010
0B47:0008 B800B8 MOV AX,B800
0B47:000B 8EC0 MOV ES,AX
0B47:000D 26 ES:
0B47:000E C606D00721 MOV BYTE PTR [07D0],21
0B47:0013 CD00 INT 00
0B47:0015 B8004C MOV AX,4C00
0B47:0018 CD21 INT 21

debug过程如下:

AX=0B46 BX=0000 CX=002A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B36 ES=0B36 SS=0B46 CS=0B47 IP=0003 NV UP EI PL NZ NA PO NC
0B47:0003 8ED0 MOV SS,AX
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t

AX=0B46 BX=0000 CX=002A DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B36 ES=0B36 SS=0B46 CS=0B47 IP=0008 NV UP EI PL NZ NA PO NC
0B47:0008 B800B8 MOV AX,B800
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 46 0B-00 00 08 00 47 0B 52 05 ......F.....G.R.
-t

AX=B800 BX=0000 CX=002A DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B36 ES=0B36 SS=0B46 CS=0B47 IP=000B NV UP EI PL NZ NA PO NC
0B47:000B 8EC0 MOV ES,AX
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 0B 00 47 0B 52 05 ............G.R.
-t

AX=B800 BX=0000 CX=002A DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B36 ES=B800 SS=0B46 CS=0B47 IP=000D NV UP EI PL NZ NA PO NC
0B47:000D 26 ES:
0B47:000E C606D00721 MOV BYTE PTR [07D0],21 ES:07D0=20
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 0D 00 47 0B 52 05 ............G.R.
-t

AX=B800 BX=0000 CX=002A DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B36 ES=B800 SS=0B46 CS=0B47 IP=0013 NV UP EI PL NZ NA PO NC
0B47:0013 CD00 INT 00
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 13 00 47 0B 52 05 ............G.R.
-t

AX=B800 BX=0000 CX=002A DX=0000 SP=000A BP=0000 SI=0000 DI=0000
DS=0B36 ES=B800 SS=0B46 CS=00A7 IP=1068 NV UP DI PL NZ NA PO NC
00A7:1068 90 NOP
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 15 00 47 0B 02 32 ............G..2

那么上述debug过程中的大写红色字单元是怎么来的?
想了半天,不明白怎么回事,还请高手们指点下。谢谢了。
...全文
195 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxc25 2008-09-01
  • 打赏
  • 举报
回复
0579:13B1 55 PUSH BP;int 1
0579:13B2 8BEC MOV BP,SP
0579:13B4 FF8E0200 DEC WORD PTR [BP+0002]
0579:13B8 5D POP BP
0579:13B9 EB21 JMP 13DC
0579:13BB 55 PUSH BP;int 3
0579:13BC 8BEC MOV BP,SP
0579:13BE 50 PUSH AX;比int 1多入了个ax
debugk 2008-09-01
  • 打赏
  • 举报
回复
晕,没有按我的设想显示。

0B47:0003 8ED0 MOV SS,AX
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-t
0B47:0008 B800B8 MOV AX,B800
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 46 0B-00 00 08 00 47 0B 52 05 ......F.....G.R.
-t
0B47:000B 8EC0 MOV ES,AX
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 0B 00 47 0B 52 05 ............G.R.
-t
0B47:000D 26 ES:
0B47:000E C606D00721 MOV BYTE PTR [07D0],21 ES:07D0=20
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 0D 00 47 0B 52 05 ............G.R.
-t
0B47:0013 CD00 INT 00
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 13 00 47 0B 52 05 ............G.R.
-t
00A7:1068 90 NOP
-d 0b46:0 f
0B46:0000 00 00 00 00 00 00 00 B8-00 00 15 00 47 0B 02 32 ............G..2

单步中断的过程只是把标志寄存器,CS,IP入栈,那么这些红色字单元是怎么来的呢?
debugk 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
系统在运行过程中,会产生很多中断,常见的硬件中断是时钟和键盘,此外,调试程序还需要断点中断,在中断处理程序中还会调用其它软中断和函数,所以栈顶指针之上的数据随时可能变化,不必深入追究。
[/Quote]

谢谢你。

PS;你每天赚很多分啊,PFPF
cnzdgs 2008-09-01
  • 打赏
  • 举报
回复
系统在运行过程中,会产生很多中断,常见的硬件中断是时钟和键盘,此外,调试程序还需要断点中断,在中断处理程序中还会调用其它软中断和函数,所以栈顶指针之上的数据随时可能变化,不必深入追究。
tiantaingao 2008-09-01
  • 打赏
  • 举报
回复
好难哦
jxc25 2008-09-01
  • 打赏
  • 举报
回复
写错了,
0579:13B1 55            PUSH    BP;int 3 
0579:13B2 8BEC MOV BP,SP
0579:13B4 FF8E0200 DEC WORD PTR [BP+0002]
0579:13B8 5D POP BP
0579:13B9 EB21 JMP 13DC
0579:13BB 55 PUSH BP;int 1
0579:13BC 8BEC MOV BP,SP
0579:13BE 50 PUSH AX;比int 3多入了个ax

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧