. : : 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