汇编代码写软盘boot loader(包括安装程序)

来源:互联网 发布:照片书制作软件 编辑:程序博客网 时间:2024/05/29 14:13

assume cs:code,ss:stack
code segment
    d:db 'Mission Complete Successfully!','$'
    e:db 'Mission Failed!','$'

start:mov ax,cs
      mov es,ax
       mov bx,offset i
       mov ah,3
      mov al,1
      mov ch,0
      mov cl,1
      mov dh,0
      mov dl,81h
      int 13h                                                                                             ;调用13h号中断将标号i之后的代码写进软盘的启动扇区
      cmp al,0
      jne g
    f:mov ax,cs
      mov ds,ax
      mov dx,offset d
      mov ah,9
      int 21h
      jmp h
    g:mov ax,cs
      mov ds,ax
      mov dx,offset e
      mov ah,9
      int 21h
    h:mov ax,4c00h
      int 21h     
    i:mov ah,7
      mov al,0
      int 10h                                                                                                                ;调用10h清屏
      mov ax,data
      mov ds,ax
      mov si,offset a
      mov di,80*2*6
      mov ax,0b800h
      mov es,ax
      mov cx,offset b-offset a
      cld
    j:movsb
      mov byte ptr es:[di],2
      inc di
      loop j
      mov di,80*2*7
      mov si,offset b
      mov cx,offset c-offset b
      cld
    k:movsb
      mov byte ptr es:[di],2
      inc di
      loop k                                                                    ;到此将a、b标号所指示的内容分别写到显示器的第六和 第七行
    l:mov ah,0h
      int 16h
      cmp al,'r'
      je r
      cmp al,'s'
      je s
      jne l                                                                        ;检测键盘按键,并做相关跳转或等待
    r:mov ax,1000h
      mov ds,ax
      db 0EAh
      dw 0
      dw 0FFFFh                                                             ;重启计算机
    s:mov ax,0
      mov es,ax
      mov bx,7c00h
      mov ah,2h
      mov al,1h
      mov ch,0h
      mov dh,0h
      mov dl,80h
      mov cl,1h
      int 13h                                                               
      db 0EAh
      dw 7c00h
      dw 0                                                                         ;加载现有的操作系统

    a db '(1),Press r to restart the computer!'
    b db '(2),Press s to boot the windows system!'
    c db 510-($-i) dup (?)
    m dw 0AA55h                                                         ;启动标志
code ends
stack segment stack
db 16 dup (?)

stack ends
end start