. : : 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