admin管理员组

文章数量:1625807

        上一次完成了安装程序以及页面展示的代码编写,这次开始进行功能开发,本次开发前两个功能,分别是重新启动计算机以及引导现有的操作系统。

        这次是在上次的代码基础上进行功能开发,不过,代码上有所调整,添加了引导程序,为什么会这么做?下面会进行说明。

        首先给出调整后的代码,功能和(一)篇的内容一样,都是安装程序以及页面欢迎信息展示,不同的是添加了引导程序,以及将任务程序写入了 2 扇区。

boot segment                ; 将软盘中0道0面2扇区的任务程序读入到0:7e00处,然后跳转到该地址执行程序
    mov ax, 0               ; 7e00 = 7c00 + 200h,该偏移地址与7c00地址相差512字节,空出512字节空间,
    mov es, ax              ; 其它功能开发将会用到这空出的512字节空间
    mov bx, 7e00h
​
    mov al, 1
    mov ch, 0
    mov cl, 2
    mov dl, 0
    mov dh, 0
    mov ah, 2
    int 13h
    
    mov ax, 0
    push ax
    mov ax, 7e00h
    push ax
    retf
​
db 512 dup(0)
boot ends
​
code segment
    jmp short start                 ; 跳转到 start 执行程序
    
    option1: db '1) reset pc', 0
    option2: db '2) start system', 0
    option3: db '3) clock', 0
    option4: db '4) set clock', 0
​
    start:
        mov bp, 0
        mov bx, offset option1
        call printf
​
        mov bp, 160
        mov bx, offset option2
        call printf
​
        mov bp, 320
        mov bx, offset option3
        call printf
​
        mov bp, 480
        mov bx, offset option4
        call printf
​
        stop: jmp short stop        ; 死循环,暂停当前位置,不向下继续执行程序
    printf:
        mov ax, 0b800h
        mov es, ax
        mov si, 0
        mov ch, 0
        va: mov cl, cs:[bx + 07e00h]    ; 获取显示字符加上 7e00
        jcxz ok
        mov es:[si + bp], cl
     

本文标签: 汇编语言课程设计操作系统重启计算机