第3章 从软驱上读取多个扇区到内存中

编写rd_kern汇编函数,用于从软驱上读取N个扇区到内存中
输入参数是
CX         扇区数
SI          起始逻辑扇区
ES:BX  内存地址

#函数名:rd_kern
#功能:读取软驱A上连续多个扇区
#参数1:  ES:BX    读取数据存放的目的地址
#参数2:  SI        指定起始逻辑扇区号    
#参数3:  CX        欲读取的扇区数目
rd_kern:
    pushw   %ax
rd_k1:
    call    rd_sect
    movw    %es,    %ax        #
    addw    $0x20,  %ax        #
    movw    %ax,    %es        # es:bx += 512
    incw    %si            # ++si
    loop    rd_k1        # if(cx != 0) goto rd_k1;
    popw    %ax
    ret



下面是读取软驱A的全部代码
#读取kernel到0x7e00上
load:
    #设置临时栈
    xorw    %ax,    %ax
    movw    %ax,    %ds        # ds = 0x0
    movw    %ax,    %ss        # ss = 0x0,栈基址
    movw    $KERNEL_STACK_BOT,%sp        # sp = 0x7c00,栈地址    
    
    #设置rd_kern的参数
    #设置ES:BX参数
    movw    $KERNEL_START_SEGMENT, %ax
    movw    %ax,    %es        # es = 0x7e0
    xorw    %bx,    %bx        # bx = 0x0,  es:bx = 0x7e00

    #读取的起始扇区号(逻辑扇区起始扇区号是0)
    movw    $0x1,   %si        # si = 0x1 ,是rd_sect的参数
    
    #读取1400个扇区,共700K
    movw    $KERNEL_SECT_NUMBER,  %cx

    #调用rd_kern函数
    #读取700K的kernel到0x7e00上
    call    rd_kern 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值