找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 266|回复: 2

[求助]JMP能用双字直接操作数段间跳转么?明知道要跳的地址,就是跳不去啊

[复制链接]
发表于 2009-11-25 14:54:59 | 显示全部楼层 |阅读模式 IP:江苏扬州
以下一代码
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就是怎么也做不到,怎么解决,还望高手指点
发表于 2009-11-25 14:55:04 | 显示全部楼层 IP:江苏扬州
请直接写为 Jmp 0000:7c00 试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 13:27 , Processed in 0.204718 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表