• 操作系统学习笔记 005 引导扇区


    引导扇区

    BIOS运行完后,加载启动盘(BIOS里设置的)的MBR(主引导区)

    512字节,以0xaa55作为结束标志,否则就认为是不可引导的

    这段代码会加载到内存的07c00h位置,然后从这里开始执行

    汇编代码

    boot.asm

         org  07c00h             ; 告诉编译器程序加载到7c00处

         mov  ax, cs

         mov  ds, ax

         mov  es, ax

         call DispStr            ; 调用显示字符串例程

         jmp  $                  ; 无限循环

    DispStr:

         mov  ax, BootMessage

         mov  bp, ax             ; ES:BP = 串地址

         mov  cx, 16             ; CX = 串长度

         mov  ax, 01301h         ; AH = 13,  AL = 01h

         mov  bx, 000ch          ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)

         mov  dl, 0

         int  10h                ; 10h 号中断

         ret

    BootMessage:       db   "Hello, OS world!"

    times    510-($-$$)    db   0    ; 填充剩下的空间,使生成的二进制代码恰好为512字节

    dw   0xaa55                      ; 结束标志

    编译运行

    # nasm boot.asm -o boot.bin

    # bximage                   ;按照提示生成一个1.44M的软盘镜像文件a.img

    # dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

    # dd --help                 ;查看dd命令的帮助

    把fdos-10meg/bochsrc.txt复制过来,删除其中ata的配置,添加:

    floppya: 1_44=a.img, status=inserted

    boot=floppy

    # bochs

    启动的虚拟机屏幕左上角有一个红色的Hello, OS world!

    汇编基础

    MOV指令

    源目标

    通用寄存器

    段寄存器

    控制寄存器

    调试寄存器

    内存

    立即数

    Y

    -

    -

    -

    Y

    通用寄存器

    Y

    Y

    Y

    Y

    Y

    段寄存器

    Y

    -

    -

    -

    Y

    控制寄存器

    Y

    -

    -

    -

    -

    调试寄存器

    Y

    -

    -

    -

    -

    内存

    Y

    Y

    -

    -

    -

    $           所在源代码行的地址

    $$          当前段开始出的地址

    $-$$        当前行所在当前段内的偏移

    call        修改IP或同时修改CS+IP,相当于

    push CS

    push IP

    jmp far/near ptr 标号

    ret         用栈中的数据修改IP,实现近转移,相当于

    pop IP

    retf        用栈中的数据修改CS+IP,实现远转移,相当于

    pop IP

    pop CS

    关于10h号中断,这个帖子写得很好:

    http://blog.csdn.net/hua19880705/article/details/8125706

  • 相关阅读:
    Redis (error) NOAUTH Authentication required.问题
    C# File() 方法 contentType参数取值
    Java常用快捷键汇总(杂乱无章,持续更新)
    VUE项目发布至IIS(不涉及代理)
    js的休眠实现---sleep()
    Oracle 分页
    winform Panel设定 按钮显示位置
    Chart控件绘制实时折线图表——Spline
    .NET打包合并dll方法
    ComboBox绑定键值对
  • 原文地址:https://www.cnblogs.com/zhuyingchun/p/4924291.html
Copyright © 2020-2023  润新知