. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  实验8遇到的问题  [待解决] 回复[ 16次 ]   点击[ 1112次 ]  
fangyugirl
[帖 主] [ 发表时间:2009-03-26 08:31 ] 
荣誉值:0
信誉值:0
注册日期:2009-03-06 09:35
实验8 

这个程序,刚看时觉得不能正确返回。 
后来上机操作后,发现能返回。但是一直不明白为什么JMP 0008后就是JMP 0000,反复操作了很多遍,还是不明白怎么回事。JMP 0008后IP等于-10,也就是F6了,然后就卡住了。 


我是不是可以这样理解: 

当执行完  
mov di,offset s 
mov si,offset s2 
mov ax,cs:[si] 
mov cs:[di],ax这四条指令后,s2处的指令被复制到标号S处覆盖了两个nop,接着cpu读取指令jmp short s,此时ip指向mov ax,0.然后cpu执行jmp short s,此时跳转位移=8h-18=-10H,ip=18h+8位位移=18h-10h=8h,ip指向标号s处,读取被复制到此处的s2的指令,ip指向0AH。CPU执行jmp short s1时,跳转位移=18h-22h=-0Ah,ip=0Ah-0Ah=0,然后程序就正确返回了。 



还有两个地方我不太明白: 
1,指令在内存里是以二进制的形式储存的,所以复制指令时只要复制指令的物理地址就行了,是不是? 
2,S2处的指令被复制到标号S处时,它的跳转位移也同样被复制了吗?
x_miracle
[第4楼] [ 回复时间:2009-03-26 18:03 ] 
荣誉值:0
信誉值:0
注册日期:2009-03-16 10:57
楼主一定要明白这条jmp指令后面跟的是什么,目的地址?还是位移呢?好好想想
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved