这样使用堆栈 bootblock.s

在bootblock.s中有这样使用堆栈,或者应该说使用内存的方法。

 

 ! Variables addressed using bp register
 device    =      0 ! The boot device
 lowsec    =      2 ! Offset of boot partition within drive
 secpcyl    =      6 ! Sectors per cylinder = heads * sectors

 

 push ax
 push ax  ! Push a zero lowsec(bp)

 push dx  ! Boot device in dl will be device(bp)
 mov bp, sp  ! Using var(bp) is one byte cheaper then var.

 

此时,堆栈的结构如下所示

 

|------------|

|    dx       | <- bp + 0

|------------|

|    ax       | <- bp + 2

|------------|

|    ax       | <- bp + 4

|------------|

|               | <- bp + 6

|------------|

|               |

|------------|

|               |

 

这样,接下来使用这些变量的话就这样

 

 les ax, LOWSEC(si)   ! es:ax = LOWSEC+2(si):LOWSEC(si)
 mov lowsec+0(bp), ax  ! Low 16 bits of partition's first sector
 mov lowsec+2(bp), es  ! High 16 bits of partition's first sector

 

这样就保存到了 bp+2, bp+2+2这个位置对应的内存空间

 

movb dl, device(bp) ! dl = device to read

从 bp+0 这个位置的内存读出是从哪个device启动的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值