当前位置: 代码迷 >> 汇编语言 >> 软盘引导程序 入口点的有关问题a
  详细解决方案

软盘引导程序 入口点的有关问题a

热度:154   发布时间:2016-05-02 04:37:35.0
软盘引导程序 入口点的问题a
本帖最后由 u013776377 于 2014-04-11 18:58:16 编辑
这是 软盘 引导操作系统的安装和 引导程序的部分代码  , start 开始的代码 有几个问题  求解答

start: 

push cs
pop  es
mov bx,offset copy_start
mov al,1
mov ah,3
mov cl,1
mov ch,0
mov dl,0
mov dh,0
int 13h         ; 把 copy_start标号代码 写入1扇区

mov  bx,0
mov  al,2 
mov ah,3
mov cl,2
mov ch,0
mov dl,0
mov dh,0
int 13h      ; <-- 这段 写入  作什么的   书上说 大于512k 要写其他扇区   怎么算 写入哪个扇区 , 怎么写

copy_start:

mov  ax,07c00h
mov  es,ax
mov  bx,0              ; <--这里 好像错了吧   地址是 0:07c00h    这里写成了   7c00h:0

mov  al,2
mov  ah,2 
mov  cl,2
mov  ch,0
mov  dl,0
mov  dh,0
int  13h

mov  ax,07c00h
push  ax                 
mov  ax,0
push ax
retf                      ; <--   上面5行  什么意思   干嘛要   retf[/color]
copy_end:nop

code ends
end start



------解决方案--------------------
引用:
Quote: 引用:

 db 510-(offset copy_end-offset copy_start) dup(0)
db 55h,0aah                        其实还有最重要的一个问题就是主引导扇区的代码的有效性有效的主引导扇区代码最后两个字节必须以55h和aah结尾即位置1feh处的内容必须是字55aah所以被写入软盘0面0道1扇区的代码还缺这东西 

比如 程序有写了 500kb    0xaa55 是在511 和 512 位置
中间还有11个空字节 需要填满  是不是还缺点东西 比如写个循环

呃  db 510-(offset copy_end-offset copy_start) dup(0)做的就是填充的事它用510减去整个程序所用的字节数得到的
就是要填充的字节数量 在masm里面db n dup (a,b,c```)就是将一组数据以字节的方式重复n次
  相关解决方案