. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  高手进——检测点3.1第二题引发的思考——既然不同的cs:ip组合可以指向同一地址,那么跳转后的cs,ip值怎么确定的呢  [待解决] 回复[ 19次 ]   点击[ 996次 ]  
hhuang
[帖 主]   [ 发表时间:2009-05-17 16:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-15 07:11
这个问题的起源是第三章的检测点1的第二题:在执行完 jmp 0ff0:0100        后,cs、ip的值分别是多少?

本来自然而然地会想到cs:ip的值就是0ff0:0100,偏偏网上所谓的标准答案说是1000:0,当然我也知道,这两种组合都是指向同一个地址的,但计算机给出的结果毕竟是一个确定的寄存器值,而不是模棱两可的结果。
于是,自己debug试了试,结果是0ff0:0100。
看了论坛里关于这道题的其他的几个帖子,好像答案都是1000:0,我想别人的结果应该也是经过debug验证的,难道相同体系结构的计算机的结果都不相同?确定的cs:ip依据是什么?

还有一个问题,当连续的指令序列长度超过64k时,就不光是ip增加了,cs也要变,那么,cs怎么变呢?

请高手指教。hhuang111@163.com
abob
[第1楼]   [ 回复时间:2009-05-18 10:51 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
你自己是实践是正确的,“偏偏网上所谓的标准答案说是1000:0,”--这本书就没有答案,都是大家自己学的时候做的。

这本书上的题目基本都能自己通过实验,如debug调试,写个asm程序等等得到结果,不要轻信所谓的答案啊 ^_^
fushijia
[第2楼]   [ 回复时间:2009-05-20 22:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-20 22:23
0ff0:0100
0FF0*16=0FF00(这里的16是10进制的)
0FF00+0100=10000
sjy9816
[第3楼]   [ 回复时间:2009-06-24 10:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2009-06-21 14:14
回答第二个问题:段的最大空间就是64K,代码段也不例外,连续指令超过64K,就超标了;超标了,CS不会变,IP会从零开始循环了。
不过应该可以在该段的最后用jmp指令跳转到下一个代码段的开始地方,继续执行。
qingfeng203
[第4楼]   [ 回复时间:2009-07-18 12:04 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-18 00:34
3楼的说得对,连续指令超过64K,就超标了;超标了,CS不会变,IP会从零开始循环了。 
不过循环时的汇编指令不变,就是IP 变了,怎么执行时指令都是一样啊 改变CS:IP的值,再执行,他的汇编指令都是一样的,就是IP变化了
amu
[第5楼]   [ 回复时间:2009-08-12 12:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-08 10:04
我这里也是0ff0:0100,不知网上所谓的标准答案1000:0是怎么得来的;
当然1000:0和0ff0:0100是指向内存同一物理地址的。
另外,当IP=ffffH时,再按T调试。结果是直接退出DEBUG程序了。
hhuang
[第6楼]   [ 回复时间:2011-01-26 11:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-15 07:11
第一个问题还没有完。
结果是不是会因不同的计算机体系的不同而不同??

第二个问题:
如果IP从零开始,而CS不变,那不就是会出现和我们程序预想的执行不一样,出错了吗?
怎么保证找到下一个正确的指令呢?
jikeyuan1
[第7楼]   [ 回复时间:2011-02-10 13:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-07 15:40
0ff0::0100 就是1000:0这是显而易见的啊,下面就没有什么啦
mapking
[第8楼]   [ 回复时间:2011-02-21 11:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-19 15:14
跳转指令: jmp 0ff0:0100 执行后得到 当前指令所在的位置
             即0ff0*16+0100=10000H  
            1000:0处
 mov ax,2000H
 mov ds,ax   //ds为2000H
 mov ax,[0008]  //将2000H:8处的存放的字型数据送入ax
 所以CPU的指令序列为
 mov ax,6622H    //cs=2000 IP=0003   AX=6622H  BX=0 DS=1000H
 jmp 0ff0:0100   //cs=1000 IP=0000   AX=6622H  BX=0 DS=1000H
 mov ax,2000h    //cs=1000 IP=0003   AX=2000H   BX=0 DS=1000H
 mov ds,ax       //cs=1000 IP=0005   AX=2000H   BX=0 DS=2000H
 mov ax,[0008]   //CS=1000 IP=0007    AX=C389H BX=0   DS=2000H
 mov ax,[0002]   //CS=1000 IP=000A    AX=EA66H  BX=0  DS=2000H
projrh
[第9楼]   [ 回复时间:2011-04-05 22:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-05 12:00
结果是0ff0:0100 是正确的。
mumujia
[第10楼]   [ 回复时间:2011-04-07 03:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-07 03:41
这个问题还是搞不定啊!
谁能把这个实验的详细过程写下来么,3Q!
moonrose
[第11楼]   [ 回复时间:2011-09-18 17:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-09-13 08:27
用debug调试下就知道了
我用纸算出来也是1000:0但计算机得出的0FF0:100但无论以哪种形式都告诉我们下一条指令是10000H-10002H里的mov ax,2000h
djsht
[第12楼]   [ 回复时间:2011-11-14 18:57 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-08-04 21:27
这么说 jmp指令直接更改cs:ip的内容 而不是我们自己计算出的最终内存地址
mmloster
[第13楼]   [ 回复时间:2012-02-28 22:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-19 19:44
题目问的是执行后CS IP的值,而不是你深处出来的值,
很明显,jmp offo:0100  就是修改了CS,IP的值,CS=0ff0  ip=0100
mmloster
[第14楼]   [ 回复时间:2012-02-28 23:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-19 19:44
题目问的是执行后CS IP的值,而不是你演算出来的值, 
很明显,jmp offo:0100  就是修改了CS,IP的值,CS=0ff0  ip=0100
sqw
[第15楼]   [ 回复时间:2012-03-13 10:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-03-12 22:17
小弟借题追问下:执行jmp 0ff0:0100 时为什么不是cs=2000,ip=0007呢?前边书上说的是指令先进入缓存区,ip=ip+所读指令的长度,然后再执行指令。也就是cs和ip还没变呢啊,不是执行完指令才变吗?求解!
tomato
[第16楼]   [ 回复时间:2012-03-13 23:21 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
回复15楼:jmp 0ff0:0100这条指令先被读入指令缓冲区,然后,ip值增加,cs的值不变,然后,执行jmp 0ff0:0100,cs,ip的值分别变为0ff0和0100。
rekcahpu
[第17楼]   [ 回复时间:2012-03-14 18:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-03-14 17:46
实验才是王道
mengjiangtao
[第18楼]   [ 回复时间:2012-05-06 19:13 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2012-04-19 21:29
学习学习。。。
walykyy
[第19楼]   [ 回复时间:2012-06-12 10:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36
回复15楼:建议你看下P28的最后一幅图
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved