|
主题 : : 栈,挑下 刺儿 [已解决] |
回复[ 10次 ]
点击[ 506次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-07-08 23:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09 |
问题3.7 编程将10000H--1000FH 这段空间当做栈,初始状态栈空,将AX,BX,DS中的数据入栈..
书上的代码:
mov ax,1000H(不建议用ax中转!)
MOV ss,ax
MOV sp,0010H
push ax
.
.
.
3.09节 中一句原话“push,pop等栈操作指令,修改的只是sp,也就是说,栈顶的变化范围最大为:0-FFFFH”
如果栈 只支持字型数据的传送的话,栈顶的变化范围最大为:0-FFFE或 1-FFFF | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-07-09 05:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2010-07-02 05:46 |
为什么不建议用AX中转?楼主能不能说下原因,我没觉得有什么问题啊?
我倒是觉得楼主“如果栈只支持字型数据的传送的话,栈顶的变化范围最大为0--FFFE或1--FFFF”这个说法似乎有问题。栈顶必须要包含在栈空间内吗?
本人也是初学。。。。。。。。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-07-09 08:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
栈空时,SS:SP栈空间最高地址的下一个单元。 如果10000H~10000FH是一空栈的话, SP=10h,即栈顶不在栈空间内。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-07-09 09:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
mov sp,0
push ax
--:sp=sp-2=fffeh
push ax
--:sp=sp-2=fffch
这样正好适用了0~ffffH空间当作栈。
mov ax,1000H(不建议用ax中转!)
-----------
用ax没问题题啊,虽然有把ax叫累加器,但cpu并没有规定ax必须作为累加器适用。这样用没问题。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-07-09 14:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09 |
这个:不建议用ax中转 是因为你并不知道原来ax中数据多少,设原来(ax)=0000H,本来应该将0000H入栈,而你却将1000H,入栈(虽然题中没明确说明,但个人认为还是别用ax中转)
关于第二点,栈顶是一个字单元,书上用 “N地址字单元” 表述一个字单元,就好比我给你一个 偶数2,你只能做+2 -2这两种运算,不限制你运算次数,你能把这个偶数变成奇数么??,故不管栈顶怎么变化,他的变化范围最大只能为0--FFFE(偶数)或1--FFFF(奇数).... 所以个人认为 “栈顶的变化范围最大为:0-FFFFH”这句话说的好像有点不合适.... | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-07-09 15:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
这个:不建议用ax中转 是因为你并不知道原来ax中数据多少,设原来(ax)=0000H,本来应该将0000H入栈,而你却将1000H,入栈(虽然题中没明确说明,但个人认为还是别用ax中转)
-------------
如果按照个思路分析,没有寄存器可以用来中转,因为后面紧跟着都有可能是这个寄存器入栈。
设原来(ax)=0000H,我们可以在用ax做中转后mov ax,0重新赋值。
他的变化范围最大只能为0--FFFE(偶数)或1--FFFF(奇数)
---------
这个加一起就是0~ffffh了。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-07-10 11:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2010-07-02 05:46 |
这个:不建议用ax中转 是因为你并不知道原来ax中数据多少,设原来(ax)=0000H,本来应该将0000H入栈,而你却将1000H,入栈(虽然题中没明确说明,但个人认为还是别用ax中转)
关于第二点,栈顶是一个字单元,书上用 “N地址字单元” 表述一个字单元,就好比我给你一个 偶数2,你只能做+2 -2这两种运算,不限制你运算次数,你能把这个偶数变成奇数么??,故不管栈顶怎么变化,他的变化范围最大只能为0--FFFE(偶数)或1--FFFF(奇数).... 所以个人认为 “栈顶的变化范围最大为:0-FFFFH”这句话说的好像有点不合适....
------------------
回复:不是吧。
1.mov ax,1000H是给AX重新赋值了,与原来是多少有什么关系?又不是add ax,1000H?
2.栈顶是个字单元?在哪一页啊,我看看。我倒觉得栈顶只是个临界值。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-07-10 15:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
因为没有直接给段寄存器直接赋值的指令,所以必须用一个寄存器中专一下,书里的只是个例子~ 当然, 也可以用别的寄存器,如bx等。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2010-07-10 19:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09 |
回复:[第5楼]
------------------
这个 不能加,要是奇数就都是奇数,栈顶不能既奇既偶...两者是2选1的关系,不能简单相加 | | |
|
|
|
|
[第9楼]
[ 回复时间:2010-07-19 09:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-01-13 10:56 |
回复:[第5楼]
------------------
这个 不能加,要是奇数就都是奇数,栈顶不能既奇既偶...两者是2选1的关系,不能简单相加
------------------
回复:“栈顶的变化范围最大为:0-FFFFH”这个没问题吧。五楼所写的“+”是逻辑意义上的。
一个公司有2个人,一个人能从0写到5,一个人能从6写到10。那么公司经理就可以说:我公司能写出的数是0~10。至于具体谁写,栈顶的变化是1 3 5 还是 0 2 4都是栈顶的变化范围。 | | |
|
|
|
|
[第10楼]
[ 回复时间:2010-10-10 13:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09 |
此贴由 贴主 于 [ 2010-10-10 13:48 ] 结贴。 结贴原因:问题已解决 | | |