| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2273 人关注过本帖
标题:入栈的地址问题?
只看楼主 加入收藏
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
得分:0 
回复:(guancracker)入栈的地址问题?
对不起打错了,不要H
你先试一下吧mov ax,2000
mov ss,ax
mov sp,10
d 2000:0 f 查看一下,为什么 2000:0 f的内容会改变呀?先想一下。

2007-05-14 22:16
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
这个我也没搞懂  

   好好活着,因为我们会死很久!!!
2007-05-14 22:37
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
得分:0 
就是因为
用T 命令调试时会产生中断,为保护现场,CPU将 标志寄存器,CS ,IP 入栈。
2000:0 f的改变内容 就是 标志寄存器,CS ,IP 入栈的值
在 王爽 《汇编语言》这本书的 239页有。我现在的问题就是那两个问题了。


2007-05-14 22:41
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 


   好好活着,因为我们会死很久!!!
2007-05-14 22:45
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用guancracker在2007-5-14 18:55:35的发言:

例如:mov ax,2000h
mov ss,ax
mov sp,0 ; 即 栈顶为2000:0
用T 命令调试时会产生中断,为保护现场,CPU将 标志寄存器,CS ,IP 入栈。
1, 那请问它们在哪个地址呢?
因为栈顶为2000:0,入栈后 标志寄存器,CS ,IP 的地址不是应该比2000:0小吗?
为何用 d 2000:fff0 查看得到标志寄存器,CS ,IP 的值呢?
2, 2000:0H 不是可以等价于 1FFF:10H 吗
既然栈顶为2000:0 那可以说栈顶为1FFF:10H 吗?
如果是 那为什么 d 1FFF:00 查看不到标志寄存器,CS ,IP 的值呢

谢谢大家的解答,小的才刚学,见笑了。

我不知道T命令会不会产生中断?
1、CS:IP地址跟2000:0没关系
2、我用d 2000:0和d 1fff:0010看到的值都是0

2007-05-15 13:07
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
得分:0 
是这样的 CMD 下DEBUG 调试

a mov ax,2000
mov ss,ax
mov sp,10
T单步执行 mov ax,2000 ;AX的值为2000H
T单步执行 mov ss,ax ;SS的值为2000H ,再看看SP 是不是变成10了。
因为执行mov ss,ax 时mov sp,10被自动执行了。
这时你d 2000:0 f 查看一下,为什么 2000:0 f的内容会改变呀?


2007-05-15 13:18
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用guancracker在2007-5-15 13:18:14的发言:
是这样的 CMD 下DEBUG 调试

a mov ax,2000
mov ss,ax
mov sp,10
T单步执行 mov ax,2000 ;AX的值为2000H
T单步执行 mov ss,ax ;SS的值为2000H ,再看看SP 是不是变成10了。
因为执行mov ss,ax 时mov sp,10被自动执行了。
这时你d 2000:0 f 查看一下,为什么 2000:0 f的内容会改变呀?

确实把CS和IP的值压入的堆栈,但后面的1E-06是指什么呢?


2007-05-15 15:12
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
得分:0 
你说的那个 后面的1E-06是指什么 ? 可能是 标志寄存器的值吧。
每台电脑的值都不一样的吧。

像这个
mov ax,2000
mov ss,ax
mov sp,10
是先后把 标志寄存器,CS ,IP 的值 压入 2000:10 地址。
所以用 d 2000:0 f 可以查看到它们的值。

但是像这个
mov ax,2000
mov ss,ax
mov sp,0
先后把 标志寄存器,CS ,IP 的值 压入 2000:0 地址。
为何用d 2000:FFF0 才能查看到它们的值呢?
这就回到了我前面的问题。

2007-05-15 21:38
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
用 d 2000:0也可以查呀
图片附件: 游客没有浏览图片的权限,请 登录注册

[此贴子已经被作者于2007-5-15 21:55:44编辑过]


2007-05-15 21:54
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
得分:0 

哦,标志寄存器,CS ,IP 的值 被压入堆栈 应该只有一个地址显示吧
你的那个 d 2000:0 f 查看 是 MOV SP,4 吧
而那个 d 2000:fff0 查看的是 MOV SP,0 吧

你是 CMD 下 先后执行过 MOV SP,4和 MOV SP,0 这两个指令。
当然两个地方都可以查看吧。

你重新来
mov ax,2000
mov ss,ax
mov sp,0

看看是不是只有d 2000:FFF0 才能查到


2007-05-15 22:15
快速回复:入栈的地址问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038478 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved