|
主题 : : 关于课程设计2的从硬盘启动的问题 [已解决] |
回复[ 3次 ]
点击[ 537次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-03-16 19:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
其实也觉得自己不太可能做出来,不过对于里面的功能项想试一下
以下在vpc2007虚拟机。测试了一下,结果能重启,但无法从硬盘启动。。因为自己不了解启动原理
我所理解的从硬盘启动,是不是就是把硬盘的1扇区读入0:7c00h,然后设置cs,ip即可。其实这个cs,ip的设置都不知道如何设,只好放入内存中来跳转,我觉得只是书本上的东西要做出课程设计好象不太现实,不过里面的子功能到是可以试一下吧。
按1,可以重启,按2就死机了:)可能理解启动原理有误吧。。请指教。
assume cs:code
code segment
s dw 0,0ffffh,7c00h,0
start: mov ah,0
int 16h
cmp al,31h
jne next
jmp dword ptr s
cmp al,32h
jne start
next: mov ax,0
mov es,ax
mov bx,7c00h
mov al,1
mov ch,0
mov cl,1
mov dh,0
mov dl,80h
mov ah,2
int 13h
jmp dword ptr s[4]
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-03-19 09:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
突然之间想明白了,困扰了我几天的问题。还是以前的知识没学好
重新做了一个测试的,可以了。
assume cs:code
code segment
start:mov ax,cs
mov es,ax
mov bx,offset s
mov al,1
mov ch,0
mov cl,1
mov dl,0
mov dh,0
mov ah,3
int 13h
mov ax,4c00h
int 21h
s:mov ax,0
mov ds,ax
mov es,ax
mov si,7c00h+offset s1-offset s
mov di,600h
push ds
push di
mov cx,offset e-offset s1
cld
rep movsb
retf
s1: mov ah,0
int 16h
cmp al,31h
jne next
mov ax,0ffffh
puhs ax
mov ax,0
push ax
retf
next: cmp al,32h
jne s1
mov ax,0
mov es,ax
mov bx,7c00h
mov ax,0201h
mov cx,1
mov dx,80h
int 13h
push es
push bx
retf
e:nop
code ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-03-19 17:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
原因在于,直接从硬盘向内存中读入数据,在有操作系统存在的情况下,有可能这个数据是在系统区,不安全的 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-03-21 11:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
此贴由 贴主 于 [ 2010-03-21 11:38 ] 结贴。 结贴原因:问题已解决 | | |
|