|
主题 : : 关于实验5(2)(3)中的问题 [已解决] |
回复[ 8次 ]
点击[ 565次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-04-03 18:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-12-16 16:05 |
请教个问题,实验5的第二小问和(3)
stack segment
dw 0,0
stack ends
定义了2个字型数据
在下面代码代码区
我感觉应该是 mov sp,4
为什么书上是mov sp,16呢?
希望明白的人告诉一下,谢谢 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-04-05 11:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
1.首先要明白
stack segment
dw 0,0
stack ends
这段是啥意思?
(设assume ss:stack 并且 mov ax,stack mov ss,ax)
就是告诉你ss*16+0=0,ss*16+1=0,ss*16+2=0,ss*16+3=0,但是它没有说sp被限制大小了
2.可以上DEBUG看下mov sp,16和mov sp,4的区别 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-04-10 18:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-12 12:25 |
我也认为这道题存在问题,设置mov sp,4和mov sp,16的意义完全不同,但是也许也可以这样去理解:
stack segment里的dw 0,0。。作者的意图只是想初始化下前2个字型单元。而实际上的栈段空间还是栈顶指向ss:16处 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-04-10 22:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
这道题目没有问题,不能说我只初始化了4个字节,就只能使用4个字节的栈空间,这两者是没有约定的. | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-04-13 22:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-12-01 09:12 |
|
|
|
|
|
[第5楼]
[ 回复时间:2010-04-14 09:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
|
|
|
|
|
[第6楼]
[ 回复时间:2010-05-13 22:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-05-10 22:25 |
一段的最小长度为16,虽然只初始化了两个字,但是stack实际上任然是16,从0-f;故而初始化栈底为f+1=16 | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-05-14 14:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:3
注册日期:2010-03-26 09:37 |
不是只初始化了4了个字节,而是只定义了4个字节,而sp移到+16当然是超出了所定义栈空间的.再因为定义一个段最小值为16byte 所以即使移到+16越界也不会覆盖到其他数据. | | |
|
|
|
|
[第8楼]
[ 回复时间:2010-05-16 14:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-12-16 16:05 |
此贴由 贴主 于 [ 2010-05-16 14:05 ] 结贴。 结贴原因:问题已解决 | | |