在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启动的。