|
主题 : : 高手进——检测点3.1第二题引发的思考——既然不同的cs:ip组合可以指向同一地址,那么跳转后的cs,ip值怎么确定的呢 [待解决] |
回复[ 19次 ]
点击[ 996次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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 | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-05-18 10:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
你自己是实践是正确的,“偏偏网上所谓的标准答案说是1000:0,”--这本书就没有答案,都是大家自己学的时候做的。
这本书上的题目基本都能自己通过实验,如debug调试,写个asm程序等等得到结果,不要轻信所谓的答案啊 ^_^ | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-05-20 22:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-20 22:23 |
0ff0:0100
0FF0*16=0FF00(这里的16是10进制的)
0FF00+0100=10000 | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-06-24 10:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2009-06-21 14:14 |
回答第二个问题:段的最大空间就是64K,代码段也不例外,连续指令超过64K,就超标了;超标了,CS不会变,IP会从零开始循环了。
不过应该可以在该段的最后用jmp指令跳转到下一个代码段的开始地方,继续执行。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-07-18 12:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-10-18 00:34 |
3楼的说得对,连续指令超过64K,就超标了;超标了,CS不会变,IP会从零开始循环了。
不过循环时的汇编指令不变,就是IP 变了,怎么执行时指令都是一样啊 改变CS:IP的值,再执行,他的汇编指令都是一样的,就是IP变化了 | | |
|
|
|
|
[第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程序了。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-01-26 11:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-15 07:11 |
第一个问题还没有完。
结果是不是会因不同的计算机体系的不同而不同??
第二个问题:
如果IP从零开始,而CS不变,那不就是会出现和我们程序预想的执行不一样,出错了吗?
怎么保证找到下一个正确的指令呢? | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-02-10 13:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-07 15:40 |
0ff0::0100 就是1000:0这是显而易见的啊,下面就没有什么啦 | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第9楼]
[ 回复时间:2011-04-05 22:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-05 12:00 |
|
|
|
|
|
[第10楼]
[ 回复时间:2011-04-07 03:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-07 03:41 |
这个问题还是搞不定啊!
谁能把这个实验的详细过程写下来么,3Q! | | |
|
|
|
|
[第11楼]
[ 回复时间:2011-09-18 17:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-09-13 08:27 |
用debug调试下就知道了
我用纸算出来也是1000:0但计算机得出的0FF0:100但无论以哪种形式都告诉我们下一条指令是10000H-10002H里的mov ax,2000h | | |
|
|
|
|
[第12楼]
[ 回复时间:2011-11-14 18:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-04 21:27 |
这么说 jmp指令直接更改cs:ip的内容 而不是我们自己计算出的最终内存地址 | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第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还没变呢啊,不是执行完指令才变吗?求解! | | |
|
|
|
|
[第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。 | | |
|
|
|
|
[第17楼]
[ 回复时间:2012-03-14 18:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-03-14 17:46 |
|
|
|
|
|
[第18楼]
[ 回复时间:2012-05-06 19:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2012-04-19 21:29 |
|
|
|
|
|
[第19楼]
[ 回复时间:2012-06-12 10:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36 |
|