. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于课程设计2的从硬盘启动的问题  [已解决] 回复[ 3次 ]   点击[ 537次 ]  
ldlihuanfa
[帖 主]   [ 发表时间: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
ldlihuanfa
[第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
ldlihuanfa
[第2楼]   [ 回复时间:2010-03-19 17:38 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
原因在于,直接从硬盘向内存中读入数据,在有操作系统存在的情况下,有可能这个数据是在系统区,不安全的
ldlihuanfa
[第3楼]   [ 回复时间:2010-03-21 11:38 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
此贴由 贴主 于 [ 2010-03-21 11:38 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved