| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:[求助]遭遇怪问题
只看楼主 加入收藏
maguarel
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-27
收藏
 问题点数:0 回复次数:0 
[求助]遭遇怪问题

以下一代码,运行后移动自身到00f0:7c00,再跳转00f0:loadpart执行
功能是将A:首扇区读到0000:7c00后跳转执行

经测试,在A:软盘首扇区写一段只用int 10显示字符的小代码,本程序测试成功通过
但把A:软盘换成DOS的启动盘,却得不到任何效果。(在DOS命令行下,此代码作为.exe作的测试)未经过exe2bin

请高人看看问题何在

偶打算把它取代引导扇区代码,把真正的引导扇区放到40号扇区去,让电脑启动先执行这代码,然后再读取40号扇区DOS引导程序执行


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 00f00000h ;这里是两行数据,放着将要跳转的地址
second_address dd 00007c00h

loadpart: mov ax,0h
mov es,ax ;es置0,使es:bx=0000:7c00,载入磁盘扇区至
;此
mov ax,0201h
mov bx,7c00h ;loadpart:这部分代码将被复制到00f0:7c00处
mov cx,1
mov dx,0
int 13h ;功能是调用int 13h载入软盘某扇区到
;0000:7c00处

jc loadpart ;失败乃成功之母,载入成功为止

mov ax,00f0h
mov ds,ax ;修改DS指向00f0h,以便下面JMP指令能找到
;second_address,因为本代码已经移动到
;00f0h:7c00

jmp dword ptr [second_address] ;跳转执行载入的代码,修改前面BIOS中断
;读入自己事先写进软盘的代码(显示字符)
;测试成功
;改成读首扇区,插入DOS启动盘,死机了
;无语


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

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

mov word ptr [first_address],offset loadpart ;设置跳转地址偏移
jmp dword ptr [first_address] ;跳去(00F0:loadpart的偏移)处执
;行,也即是
;loadpart:,经测试
;此处不成问题
code ends
end start

[此贴子已经被作者于2006-8-6 16:26:16编辑过]

搜索更多相关主题的帖子: 遭遇 
2006-08-06 16:24
快速回复:[求助]遭遇怪问题
数据加载中...
 
   



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

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