05.加载并执行其它扇区代码

本文档介绍了如何在内核加载器中加载并执行其他扇区的代码。首先,通过上一博文的基础,将扇区数据加载到内存并显示。接着,利用汇编语言编写内核文件,使加载器能够加载指定扇区的代码,并设置CS:IP寄存器以执行这段内存中的代码。经过编译和制作虚拟软盘,最终验证了其他扇区代码的加载与执行成功。
摘要由CSDN通过智能技术生成

简介

上一博文实现了把其它扇区的数据加载进内存并显示出来,同理如果其它扇区的是执行代码,在内核加载器加载完其它扇区代码后并指定CS:IP指向加载进来的内存地址,其它扇区的代码将会被指向。

目标

使用汇编实现其他扇区代码功能,内核加载器加载该扇区代码并跳转到指定内存执行写入虚拟磁盘其他扇区的代码。

1.修改内核加载器文件boot.s

;能用于操作内存的寄存器只能是bx、bp、si、di
;0x7c00--0x7dff 这512字节用于启动区
;对内存的访问都必须指定段寄存器,没有显示指定时将使用ds作为段寄存器


    org 0x7c00

    LOAD_ADDR EQU 0x8000   ;内核加载偏移地址

    mov ax,0
    mov ss,ax
    mov ds,ax
    mov es,ax 

    mov bx,LOAD_ADDR
   
    mov ch,1        ;柱面号
    mov dh,0        ;磁头号
    mov cl,2        ;扇区号
    mov ah,0x02     ;0x02表示读盘操作
    mov al,1        ;表示连续读取扇区数
    mov dl,0        ;驱动器号,早期有多个软驱,一般只有一个写死0
    int 0x13        ;调用BIOS实现磁盘读取
    jc error        ;读盘操作失败,flag标志寄存器cf 标志位被置1 
    jmp bx          ;跳转到加载的内存地址开始执行代码


fin:
    hlt
    jmp fin


putloop:
    mov al,[si]
    inc si
    cmp al,0
    je fin
    mov ah,0x0e     ;中断调用参数
    mov bx,15       ;字符颜色
    int 0x10        ;中断调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值