. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
建议及意见
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
建议修正概念说明
[待解决]
回复[
5
次 ] 点击[
699
次 ]
theguiking
[帖 主]
[ 发表时间:2009-01-08 21:06 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:1
注册日期:2008-12-16 19:25
书上说:在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用他们合成指令的物理地址,到内存中读取指令码。
可是在处理
jmp 寄存器
等跳转指令的时候,这里就不成立了。因为CPU在指令尚未执行的时候就修改CS、IP的值,这样就有可能指向一个不是指令的存放数据的单元。
建议:语句中增加限制,以更加准确的方式表述。
younggay
[第
1
楼]
[ 回复时间:2009-01-09 12:53 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
是楼主的理解有问题,书上的说法没有任何问题。
cs,ip在读入指令后,就会根据此指令占的字节数,指向接下来的指令,到底执行不执行读取接下来的指令,还要看此时读入的执行的性质,如果是跳转语句,则会再次在此跳转语句的执行过程中修改cs,ip,那么到底执行不执行预定的下一跳指令,还需要看前一条指令的操作性质。
楼主说的情况是程序或逻辑出错了才会发生,跟知识的本质不是一个讨论层次。
mouse
[第
2
楼]
[ 回复时间:2009-01-09 14:44 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
是楼主理解的问题,再仔细看看书。
theguiking
[第
3
楼]
[ 回复时间:2009-01-09 14:51 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:1
注册日期:2008-12-16 19:25
书上说:在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用他们合成指令的物理地址,到内存中读取指令码。
既然是任何时候,那读入完毕跳转指令后(但还没有开始执行),CS:IP就会指向紧接着这个跳转指令的内存单元,那谁又能保证从这个单元开始的一定长度的数据一定是程序呢?很可能那一段仅仅是数据而已。
younggay
[第
4
楼]
[ 回复时间:2009-01-12 18:45 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
既然是任何时候,那读入完毕跳转指令后(但还没有开始执行),CS:IP就会指向紧接着这个跳转指令的内存单元,那谁又能保证从这个单元开始的一定长度的数据一定是程序呢?很可能那一段仅仅是数据而已。
=====================
对啊,就是不能保证啊。也没有必要一定保证啊。关键看你的程序是怎么一个逻辑呢。也许从这跳走了,就再也不回来了,所以,谁关心后面的数据到底是干嘛的啊。
theguiking
[第
5
楼]
[ 回复时间:2009-01-12 20:27 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:1
注册日期:2008-12-16 19:25
可能你没明白我的初衷吧
我是建议让概念说得更准确
既然概念说的是 任何时候 ,那就包括了跳转语句“从这跳走了,就再也不回来”继续执行的情况,那跳走之前的cs:ip指向的内存空间是否一定是程序呢?答案是否定的
但是概念说任何时候cs:ip指向的内存空间里的数据都当作程序。这就是矛盾之处,产生的原因是概念的描述没有足够的限制,使其涵盖了不正确的方面。
举个例子:
任何时候 我都往前走。
这明显不准确。
在时间的长河中,任何时候,我都是前进着的
这就是加了限制,让描述准确的例子。
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved