. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于“寄存器冲突的问题”的疑惑  [待解决] 回复[ 6次 ]   点击[ 464次 ]  
sleepinglion
[帖 主]   [ 发表时间:2010-08-04 22:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22
书上用了push和pop,可程序中并未定义stack啊?怎么就直接用了呢?
mess
[第1楼]   [ 回复时间:2010-08-05 11:28 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
虽然我们没有定义栈段,但是程序加载后会默认分配个栈段。也可以自己定义一个栈段,这样比较明晰。
yiruirui
[第2楼]   [ 回复时间:2010-09-08 10:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-09-03 12:59
楼上说的对,stack是程序默认的。即便是程序中不定义,DOS装载程序时也会自动分配一个堆栈供程序使用。
michael47
[第3楼]   [ 回复时间:2010-11-05 20:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-13 21:26
默认的栈段其实就是代码段,默认的sp为0,有数据入栈后,sp-2=fffeh,也就是说,是从代码段的底部开始入栈的
zoudaokou2006
[第4楼]   [ 回复时间:2011-02-26 01:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-02-09 21:07
回复:[第3楼]
------------------
这个栈段是默认的,是由装载程序设置好的,但关键是这个栈段算不算有意义的、可用的栈段呢?
有两个问题:
(1)默认的栈段并非代码段,比如对如下的程序:
assume  cs:codesg
datasg segment
        db "Beginner's All-purpose Symbolic Instruction Code.",0," Hello World!!!"
datasg ends        
codesg segment 
..........
debug调试有,SS=1560,CS=1565,SP=0000,IP=1000。
你说的数据入栈后,有sp-2=fffeh没错,但对我这个例子,显然默认栈段不是代码段。
(2)
我观察了一下这个栈的底部,发现栈段底部存在大量数据。
这个底部,要么是分配给这个程序的,要么是其他程序的,要么是谁都不属于的。
如果这个区域都是0x00,分配给这个程序的可能性很大,不过这个区域数据杂乱,无法说明这个区域到底是谁的。
不过我认为,说这个段是装载程序分配的,不太靠谱,分配一个64K段作为栈,也太浪费了吧,尤其是在比尔盖茨称“64K足够大”的DOS时代。
我认为这个默认栈段值是一个权宜之计的值,用这种栈,并不能保证程序的正常运行。
zoudaokou2006
[第5楼]   [ 回复时间:2011-02-26 01:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-02-09 21:07
回复:[第3楼]
------------------
这个栈段是默认的,是由装载程序设置好的,但关键是这个栈段算不算有意义的、可用的栈段呢?
有两个问题:
(1)默认的栈段并非代码段,比如对如下的程序:
assume  cs:codesg
datasg segment
        db "Beginner's All-purpose Symbolic Instruction Code.",0," Hello World!!!"
datasg ends        
codesg segment 
..........
debug调试有,SS=1560,CS=1565,SP=0000,IP=1000。
你说的数据入栈后,有sp-2=fffeh没错,但对我这个例子,显然默认栈段不是代码段。
(2)
我观察了一下这个栈的底部,发现栈段底部存在大量数据。
这个底部,要么是分配给这个程序的,要么是其他程序的,要么是谁都不属于的。
如果这个区域都是0x00,分配给这个程序的可能性很大,不过这个区域数据杂乱,无法说明这个区域到底是谁的。
不过我认为,说这个段是装载程序分配的,不太靠谱,分配一个64K段作为栈,也太浪费了吧,尤其是在比尔盖茨称“64K足够大”的DOS时代。
我认为这个默认栈段值是一个权宜之计的值,用这种栈,并不能保证程序的正常运行。
zoudaokou2006
[第6楼]   [ 回复时间:2011-02-26 01:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-02-09 21:07
回复:[第1楼]
------------------
请说明加载程序如何分配栈段的?
我个人认为这个默认栈段值是一个权宜的值,用这种栈,并不能保证程序的正常运行。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved