. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
寄存器(内存访问)
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
一个栈段最大可以设为多少?为什么?
[待解决]
回复[
3
次 ] 点击[
327
次 ]
haihong0721
[帖 主]
[ 发表时间:2009-06-25 20:27 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2009-06-01 20:25
一个栈段最大可以设为多少?为什么?
虽然课本上已经分析了 但 我还是没看懂呢 为什么是64K呢
lem2882
[第
1
楼]
[ 回复时间:2009-06-26 14:26 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2008-02-02 06:19
当然是64K了,我们的栈段是建立在内存之上的,就是把内存划出一块来当栈使用。你要访问一个内存单元,得让CPU找得到它,这就是寻址方式,内存寻址方式是段地址+偏移地址,偏移地址16位,每个段的容量就是2的16次方,就是64K,注意:内存在物理上是没有被分块的,只是CPU为了能找到内存的所有单元,逻辑上把它分为了一个一个的段,每个段最大就是64K了。你要把内存当栈使用,这个栈也不能跨越两个内存段,只能在一个内存段范围内活动,所以容量最大也就是64K了。那为什么不能跨越呢,你想,如果一个栈跨越两个内存段,如果一直做push操作,什么在变?SP在变,SS根本没变,就是说你的段地址一直不变,只有偏移地址在改变,那你能跑出这个内存段吗,当然跑不出去了,因为段地址就没变过,CPU根本就寻址不到另一个内存段里。明白了么,不明白就mail我:lem2882@163.com
mess
[第
2
楼]
[ 回复时间:2009-06-30 10:50 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
简单的说,push pop只改变sp,而不会改变ss。
sp是十六位寄存器,即寻址范围是64K。
semidotnet
[第
3
楼]
[ 回复时间:2009-08-22 11:13 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2009-08-08 13:43
回复:[第1楼]
------------------
受益,顶个
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved