简体   繁体   English

设置堆栈段并在装配中偏移

[英]Set stack segment and offset in assembly

I set up 4k stack space begins at end of the bootloader. 我设置4k堆栈空间是从引导加载程序的末尾开始的。 After that, I read 16 sectors (=8k) of code to address 0x2000:0x0000. 之后,我读取了16个扇区(= 8k)的代码,地址为0x2000:0x0000。 It's the kernel of my operating system. 这是我的操作系统的内核。 And I branched to it. 我分支到它。

The question is, how can I set up 8k stack space begins at end of the kernel? 问题是,如何设置从内核末尾开始的8k堆栈空间?

bootloader.asm bootloader.asm

; bootloaders are always loaded to offset 0x7c00.
; so, define base to 7c00h.
  org 7c00h

; jmp to start function.
  jmp hg._start

; bootloader function.
; set stack and segment registers.
hg._start:
  ; set stack space. (4K)
  mov ax, 07c0h
  add ax, 288 ; (4096+512)/16 bytes per paragraph.
              ; note that this bootloader loads
              ; remaining 8 sectors via int 13h:02.
  mov ss, ax
  mov sp, 4096

  mov ax, 07c0h
  mov ds, ax  ; set data segment to base of the
              ; bootloader. this can get rid of
              ; some memory access errors.

  ; from now on, we had set up segments.
  ; now we can get into real work, loading remaining
  ; 8 sectors with int 13h:02.

  ; load code to 0x2000:0x0000. (0x20000)
  mov bx, 2000h
  mov es, bx
  mov bx, 0

  mov ah, 02 ; int 13h:02 -> bios read function.
  mov al, 16 ; read 8k of code.
  mov ch, 01 ; track to read.
  mov cl, 02 ; sector to read. (from 1 = mbr)
  mov dh, 01 ; head to read.
  mov dl, 80h; drive to read (0=fd0, 1=fd1, 80h=hd0, 81h=hd1)
  int 13h

  times 510-($-$$) db 0
  db 55h
  db 0aah

Try 尝试

mov ax,2000h
mov ss,ax
mov sp,4000h

This should set the stack to where you want it to be. 这应该将堆栈设置为您想要的位置。 There is no other setup needed in general. 通常不需要其他设置。

Note that you do not need to disable interrupts for this to work as the x86 CPU implicitly disables interrupts for one instruction after loading a new segment selector into ss . 请注意,您不需要为此禁用中断,因为x86 CPU在将新的段选择器加载到ss后隐式禁用了一条指令的中断。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM