| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2272 人关注过本帖
标题:入栈的地址问题?
只看楼主 加入收藏
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
 问题点数:0 回复次数:25 
入栈的地址问题?

例如: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 的值呢

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

[此贴子已经被作者于2007-5-14 18:56:35编辑过]

搜索更多相关主题的帖子: 入栈 寄存器 地址 mov CPU 
2007-05-14 18:55
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
入栈是保存当前的直 cs ip 是运行时的下一地址 他不能入栈的 也不需要入栈
计算机执行的时候 下一指令都是cs ip 除非遇到call jmp
入栈是在调用子程序的时候 保存当前寄存器的直 因为在子程序里要用到这一 个寄存器

   好好活着,因为我们会死很久!!!
2007-05-14 20:29
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
当然2的个问题就更荒唐拉
你说的那两个不可能相等
前面的是段地址 后面的是偏移地址
2000:0H 在2000这个段
1FFF:10H 在1FFF这个段
怎么可能相等呢

   好好活着,因为我们会死很久!!!
2007-05-14 20:31
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
劝lz先去看看物理地址是由什么组成的
懂得段地址和偏移地址
理解寄存器 什么是做什么的

   好好活着,因为我们会死很久!!!
2007-05-14 20:32
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
得分:0 

首先: 谢谢你了。 你先试试这个吧。
debug 的T 命令在执行修改寄存器SS的指令时,下一条指令会紧接着被执行。
例如: mov ax,2000h
mov ss,ax ;你T单步,执行看看,是不是mov sp,10也被自动执行了,看看IP 值吧
mov sp,10
这时你用 d 2000:0 f 查看一下,为什么 2000:0 f的内容会改变呀?先想一下。
你看看2000:0 f的内容是不是存贮着 标志寄存器,CS ,IP 的值。
这就是中断的一种表现。
我的问题还是那两个。。。。。。。。

还有就是CPU 可以用不同的段地址和偏移地址形成一个物理地址。
2000:0H =20000+0=20000H
1FFF:10H = 1FFF0+10=20000H
你可以查看一下是不是2000:0H 和1FFF:10H 的内容一样。因为都是指向内存地址20000H。
不知道我说的对吗。


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

我先回答一的个问题 你说的sp是自动执行的 呵呵 当然拉 因为送到堆栈里
sp的直就会自动减一 也就是说 sp一直都是在栈顶
就象水杯里的水一样 sp一直就在水面
ss和sp是连用的 而cs和ip是连用的



   好好活着,因为我们会死很久!!!
2007-05-14 21:55
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
而当然后面的一个问题加起来物理地址还是相等
我在前面说过 他们的段地址都不同
你说他们还是一个存储单元嘛

   好好活着,因为我们会死很久!!!
2007-05-14 21:57
guancracker
Rank: 1
等 级:新手上路
威 望:1
帖 子:27
专家分:0
注 册:2007-5-14
收藏
得分:0 
你先试一下吧mov ax,2000h
mov ss,ax ;
mov sp,10
d 2000:0 f 查看一下,为什么 2000:0 f的内容会改变呀?先想一下。

2007-05-14 21:59
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
寄存器分为拉几个段 就是为拉物理寻址
不过我才想拉一哈 我也不清楚
感觉好象是不一样的 因为他的确段地址都不同拉
我去给你查查看

   好好活着,因为我们会死很久!!!
2007-05-14 22:00
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
以下是引用guancracker在2007-5-14 21:59:50的发言:
你先试一下吧mov ax,2000h
mov ss,ax ;
mov sp,10
d 2000:0 f 查看一下,为什么 2000:0 f的内容会改变呀?先想一下。

呵呵 对拉 你还有一个错误
在debug里 默认是16进制哈 不要那个h
你在试试看有没有东西


   好好活着,因为我们会死很久!!!
2007-05-14 22:06
快速回复:入栈的地址问题?
数据加载中...
 
   



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

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