美文网首页
【验证硬盘扇区号从1开始】

【验证硬盘扇区号从1开始】

作者: 月下蓑衣江湖夜雨 | 来源:发表于2020-10-20 01:36 被阅读0次

硬盘扇区号从1开始(不是从0开始)

程序 起始扇区号 程序大小(扇区数)
bootsec.asm 1 1
loader.asm 2 15
kernel.bin 20 15

nasm bootsec.asm -o bootsec.com
nasm loader.asm -o loader.com
nasm kernel.asm -o kernel.com

dd if=bootsec.com of=/dev/sda
dd if=loader.com of=/dev/sda bs=512 count=15 seek=1
dd if=kernel.com of=/dev/sda bs=512 count=15 seek=19

代码

bootsec.asm

; 符号定义 ------------------------------------------------------------------------------------------------------------------------------------------------------
BaseOfLoader            equ   09000h                  ; LOADER.BIN 被加载到的位置 ----  段地址
OffsetOfLoader          equ   0100h                   ; LOADER.BIN 被加载到的位置 ----  偏移地址
BeginSectorOfLoader     equ   2                       ; loader起始扇区放在2位置
SectorNumsOfLoader      equ   15                      ; loader占用扇区数

BaseOfKernelFile        equ   08000h                  ; KERNEL.BIN 被加载到的位置 ----  段地址
OffsetOfKernelFile      equ   0h                      ; KERNEL.BIN 被加载到的位置 ----  偏移地址
BeginSectorOfKernelFile equ   20                      ; KernelFile起始扇区放在2位置
SectorNumsOfKernelFile  equ   15                      ; KernelFile占用扇区数
; 符号定义 ------------------------------------------------------------------------------------------------------------------------------------------------------
; 符号定义结束

  org 7c00h
  mov ax, cs
  mov ds, ax
  mov es, ax
  
  mov dh,0 
  mov dl,0
  call SetLn  
  
  mov ax, BootMsg1
  mov cx, 18
  call DspStr
  
  mov dh,1 
  mov dl,0
  call SetLn
  
  mov ax, BootMsg2
  mov cx, 18
  call DspStr
  
  push es
  push bx
  
  ;加载loader
  mov ax, BaseOfLoader
  mov es, ax
  mov bx, OffsetOfLoader
  
  mov ah, 02h
  mov al, SectorNumsOfLoader
  mov ch, 00h
  mov cl, BeginSectorOfLoader
  mov dh, 00h
  mov dl, 80h
  
  int 13h
  
  ;加载内核
  mov ax, BaseOfKernelFile
  mov es, ax
  mov bx, OffsetOfKernelFile
  
  mov ah, 02h
  mov al, SectorNumsOfKernelFile
  mov ch, 00h
  mov cl, BeginSectorOfKernelFile
  mov dh, 00h
  mov dl, 80h
  
  int 13h
  
  pop bx
  pop es
  
  ;跳转到loader
  jmp BaseOfLoader:OffsetOfLoader

SetLn:
  mov ah,2 
  mov bh,0 
  ;mov dh,光标行号 
  ;mov dl,光标列号 
  int 10h 
  
  ret  

DspStr:
  mov bp, ax
  mov ax, 01301h
  mov bx, 000ch
  mov dl, 0
  int 10h

  ret
  
BootMsg1:             db  "[boot] load loader"
BootMsg2:             db  "[boot] load kernel"  

times 510 - ($ - $$) db  0
dw 0xaa55

loader.asm

; 符号定义 ------------------------------------------------------------------------------------------------------------------------------------------------------
BaseOfLoader            equ   09000h                  ; LOADER.BIN 被加载到的位置 ----  段地址
OffsetOfLoader          equ   0100h                   ; LOADER.BIN 被加载到的位置 ----  偏移地址
BeginSectorOfLoader     equ   2                       ; loader起始扇区放在2位置
SectorNumsOfLoader      equ   15                      ; loader占用扇区数

BaseOfKernelFile        equ   08000h                  ; KERNEL.BIN 被加载到的位置 ----  段地址
OffsetOfKernelFile      equ   0h                      ; KERNEL.BIN 被加载到的位置 ----  偏移地址
BeginSectorOfKernelFile equ   20                      ; KernelFile起始扇区放在2位置
SectorNumsOfKernelFile  equ   15                      ; KernelFile占用扇区数
; 符号定义 ------------------------------------------------------------------------------------------------------------------------------------------------------
; 符号定义结束

  org 0100h
  mov ax, cs
  mov ds, ax
  mov es, ax
  
  mov dh,2 
  mov dl,0
  call SetLn

  mov ax, LoaderMsg
  mov cx, 16
  call DspStr
  
  ;跳转到kernel
  jmp BaseOfKernelFile:OffsetOfKernelFile

SetLn:
  mov ah,2 
  mov bh,0 
  ;mov dh,光标行号 
  ;mov dl,光标列号 
  int 10h 
  
  ret   

DspStr:
  mov bp, ax
  mov ax, 01301h
  mov bx, 000ch
  mov dl, 0
  int 10h

  ret
  
LoaderMsg:   db  "[loader] dsp str"

kernel.asm

; 符号定义 ------------------------------------------------------------------------------------------------------------------------------------------------------
BaseOfLoader            equ   09000h                  ; LOADER.BIN 被加载到的位置 ----  段地址
OffsetOfLoader          equ   0100h                   ; LOADER.BIN 被加载到的位置 ----  偏移地址
BeginSectorOfLoader     equ   2                       ; loader起始扇区放在2位置
SectorNumsOfLoader      equ   15                      ; loader占用扇区数

BaseOfKernelFile        equ   08000h                  ; KERNEL.BIN 被加载到的位置 ----  段地址
OffsetOfKernelFile      equ   0h                      ; KERNEL.BIN 被加载到的位置 ----  偏移地址
BeginSectorOfKernelFile equ   20                      ; KernelFile起始扇区放在2位置
SectorNumsOfKernelFile  equ   15                      ; KernelFile占用扇区数
; 符号定义 ------------------------------------------------------------------------------------------------------------------------------------------------------
; 符号定义结束

  org 0h
  mov ax, cs
  mov ds, ax
  mov es, ax

  mov dh,3
  mov dl,0
  call SetLn

  mov ax, KernelMsg
  mov cx, 16
  call DspStr
  
  ;死循环
  jmp $
  
SetLn:
  mov ah,2 
  mov bh,0 
  ;mov dh,光标行号 
  ;mov dl,光标列号 
  int 10h 
  
  ret  

DspStr:
  mov bp, ax
  mov ax, 01301h
  mov bx, 000ch
  mov dl, 0
  int 10h

  ret
  
KernelMsg:   db  "[kernel] dsp str"

效果

效果

相关文章

  • 【验证硬盘扇区号从1开始】

    硬盘扇区号从1开始(不是从0开始) 程序起始扇区号程序大小(扇区数)bootsec.asm11loader.asm...

  • 访问硬盘

    硬盘读写的基本单位是扇区。 从硬盘读取数据的模式 CHS 模式,向硬盘控制器分别发送磁头号、柱面号和扇区号(扇区在...

  • 固话格式有效性

    验证电话号码 验证规则:区号+号码,区号以0开头,3位或4位 号码由7位或8位数字组成 区号与号码之间可以无连接符...

  • java面试类的初始化

    首先要知道如下几个知识点: 初始化类有如下几个步骤:加载 (将一个class从硬盘读取到内存中)连接验证 (验证c...

  • 2022年全国最全版本省市区号(全网最全版本!357个号码!)

    2022年全国最全版本省市区号(全网最全版本!357个号码!)区号大全!全国区号!中国区号!免费下载!3列格式:区...

  • IO

    1 IO In :输入读入;从硬盘中读到内存。 Out :输出;从内存中写到硬盘 1.1 什么是文件 Txt ,a...

  • 如何设置获取验证码的倒计时

    想要达成的效果:点击获取验证码时,验证码倒计时开始,从59往后开始递减1 思路分析:从动作开始看,点击控件,触发倒...

  • 破坏了Centos7的MBR和GRUB,如何修复

    一:修复MBR: MBR(Master Boot Record 主引导记录) 硬盘的0柱面、0磁头、1扇区称为主引...

  • 为什么全世界IP地址可以不同

    ip地址就像固定电话,不同地区的区号不同,在相同区号地区,电话号码是不能相同的。 区号不同,区号后面的电话号码可以...

  • 存储基础技术

    1、卷 从最简单的卷开始讲起,卷,本质就是硬盘上的存储区域。一个硬盘包括好多卷,一卷也可以跨越许多磁盘。在WIND...

网友评论

      本文标题:【验证硬盘扇区号从1开始】

      本文链接:https://www.haomeiwen.com/subject/mgglmktx.html