|
主题 : : 有了3.2的答案,把SS值置为2000H,程序怎么知道就是先从DS而不是先从SS开始的呢 [待解决] |
回复[ 6次 ]
点击[ 418次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-12-14 22:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-14 20:58 |
前面卟是有
mov ax,1000H
mov ds,ax
吗
<1>mov ax,2000H ;这里又把SS值置为2000H,程序怎么知道就是先从DS而不是先从SS开始的呢
<2>mov ss,ax
<3>mov sp,0010H
<1>mov ax,1000H
<2>mov ss,ax
<3>mov sp,0 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-12-15 00:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-12-12 20:21 |
我认为是因为CS:IP的指向,先指谁,cpu就先执行谁 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-12-20 07:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-05-23 12:24 |
|
|
|
|
|
[第3楼]
[ 回复时间:2010-12-20 22:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-30 21:46 |
|
|
|
|
|
[第4楼]
[ 回复时间:2010-12-24 16:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-05 12:39 |
前面卟是有
mov ax,1000H
mov ds,ax
吗
<1>mov ax,2000H ;这里又把SS值置为2000H,程序怎么知道就是先从DS而不是先从SS开始的呢
<2>mov ss,ax
<3>mov sp,0010H
<1>mov ax,1000H
<2>mov ss,ax
<3>mov sp,0
------------------
回复:这里又把SS值置为2000H,程序怎么知道就是先从DS而不是先从SS开始的呢?有高手给个详细的解释吗? | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-01-03 18:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-22 11:43 |
这个是看你把这些语句放在cs段中的什么位置,谁放前面就先执行谁,
程序的执行是从cs:ip指向的地址开始的,
至于上面的设置,一个是把数据段基址设置成1000
这样取数据加便宜地址就能得到1000:0等等的数据了
而把ss设置成2000,因为要把这1000:0 f的数据逆序搬移到2000:0开始的地址 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-01-17 14:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-01-13 23:25 |
mov ax,1000H
mov ds,ax
这2句设置数据段是从地址20000H开始 告诉编译器要取数据就到这个段去取
mov ax,2000H
mov ss,ax
mov sp,0010H
这3句只是设置了一个空栈
而程序由那句开始执行跟这些设置无关
而是跟end 标号 这句决定的 它表明了两层意思:
1告诉编译器编译到这里就结束啦
2指明程序是由 标志处开始执行
这是我结束王爽老师书上的一些知识点的理解
希望对你有点帮助。 | | |