| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 830 人关注过本帖
标题:[求助]JMP能用双字直接操作数段间跳转么?明知道要跳的地址,就是跳不去啊
只看楼主 加入收藏
maguarel
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-27
收藏
 问题点数:0 回复次数:1 
[求助]JMP能用双字直接操作数段间跳转么?明知道要跳的地址,就是跳不去啊

以下一代码
code segment
assume cs:code,ds:code,es:code
org 7c00h
start: mov ax,code
mov ds,ax

....
.... ;用于调用INT10显示字符串,等用户按键则跳转selfcopy

jmp selfcopy

first_address dd 00f07c00h ;这里是两行数据,放着将要跳转的地址
second_address dd 00007c00h

loadpart: ... ;loadpart:这部分代码将被复制到00f0:7c00处
... ;功能是调用int 13h载入磁盘某扇区到0000:7c00处
;再跳转0000:7c00执行

jmp [second_address] ;问题出在这,本程序所有代码原地址就是0000:7c00
;刚刚前面从磁盘载入的,已经把second_address覆盖
;无法实现跳转
;全代码后面偶详细说明问题



selfcopy: mov ax,00f0h
mov es,ax
mov di,offset loadpart
mov cx,0200h
mov si,7c00h ;设置循环

circle: mov al,[di]
mov es:[si],al ;循环工作部分,用于将自身loadpart:开始的512字节
inc di ;复制到00F0:7c00处
inc si
loop circle

jmp [first_address] ;跳去00F0:7c00处执行,也即是loadpart:,经测试
;此处不成问题


这程序打算写进引导扇区,文章系在网吧所写,由于作者水平所限(编程还要不停翻书- -)所以没有完全写出完整代码,不看书下,可能也有语法错误,但问题不在这

程序思路是,本程序得到执行,会将自身的代码移动到00f0:7c00处,再跳转去继续执行,经过不断测试,(段寄存器的设置,也完全考虑到)上述的loadpart:部分改成用于显示字符,本程序是完全可行的,但loadpart部分一使用段间跳转,即无法实现,偶把second_address放在loadpart:内部,但编译时是按本程序地址计算,放在loadpart:的双字变量,其偏移地址是并不正确的,JMP段间跳转要用的双字变量无法定位,所以,明知道要跳的地址是0000:7c00h就是怎么也做不到,怎么解决,还望高手指点

搜索更多相关主题的帖子: JMP 地址 
2006-08-04 10:26
罗穆峰
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-8-15
收藏
得分:0 
请直接写为 Jmp 0000:7c00 试试。
2006-08-15 08:19
快速回复:[求助]JMP能用双字直接操作数段间跳转么?明知道要跳的地址,就是跳不 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016548 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved