|
主题 : : 关于“寄存器冲突的问题”的疑惑 [待解决] |
回复[ 6次 ]
点击[ 464次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-08-04 22:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22 |
书上用了push和pop,可程序中并未定义stack啊?怎么就直接用了呢? | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-08-05 11:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
虽然我们没有定义栈段,但是程序加载后会默认分配个栈段。也可以自己定义一个栈段,这样比较明晰。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-09-08 10:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-03 12:59 |
楼上说的对,stack是程序默认的。即便是程序中不定义,DOS装载程序时也会自动分配一个堆栈供程序使用。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-11-05 20:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-13 21:26 |
默认的栈段其实就是代码段,默认的sp为0,有数据入栈后,sp-2=fffeh,也就是说,是从代码段的底部开始入栈的 | | |
|
|
|
|
[第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时代。
我认为这个默认栈段值是一个权宜之计的值,用这种栈,并不能保证程序的正常运行。 | | |
|
|
|
|
[第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时代。
我认为这个默认栈段值是一个权宜之计的值,用这种栈,并不能保证程序的正常运行。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-02-26 01:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2011-02-09 21:07 |
回复:[第1楼]
------------------
请说明加载程序如何分配栈段的?
我个人认为这个默认栈段值是一个权宜的值,用这种栈,并不能保证程序的正常运行。 | | |