x86访问标签而不包括文件

时间:2014-09-19 20:33:02

标签: assembly x86 nasm

我在开发中有一个简单的内核和一个bootloader。在引导加载程序进入保护模式之前,我想使用中断来检索系统上的内存量(int 0x12),然后将标签保存的值设置为我检索到的ram数量。一旦内核加载(在保护模式下),我想访问数据。

首先要使用以下结构:

; sysinfo.asm
RAM: dd 0 ; declare RAM as a 4 byte label

; boot.asm
%include "sysinfo.asm"
; bootloader code here
xor ax, ax
int 0x12
mov [RAM], ax
; go into protected mode and launch kernel

; kernel.asm
%include "sysinfo.asm"
mov ax, [RAM]
; print ax

然而,正如我预期的那样,由于boot1.asm中的RAM标签和kernel.asm中的RAM标签完全不同,因此它们不指向同一地址,我该怎么办?

2 个答案:

答案 0 :(得分:1)

我建议定义一个结构,该结构保存在加载过程中收集的信息,然后将结构的地址传递给某些寄存器中的内核。

SYSINFO.ASM:

struc BootInfo
  .ram resd 1
  ; .. some other useful information ...
endstruc

boot.asm:

%include "sysinfo.asm"

bootinfo: istruc BootInfo
  at ram, dd 0
iend

; ....
xor ax, ax
int 0x12
mov [bootinfo + BootInfo.ram], ax ; set amount of ram
; ...
mov edx, bootinfo ; pass address of BootInfo in some register
; goto kernel code

kernel.asm:

%include "sysinfo.asm"

; Address of BootInfo in edx
mov eax, [edx + BootInfo.ram] ; get ram to eax
; ...

答案 1 :(得分:0)

两个不同文件中的两个不同名称;还是三个?无论

第一个......

        RAM: dd 0 ; declare RAM as a 4 byte label

...变为

        Boot_Dot_Asm_RAM: dd 0 ; declare RAM as a 4 byte label

第二个成为......

        Kernal_Dot_Asm_RAM: dd 0 ; declare RAM as a 4 byte label

您可以使用“条件汇编”执行此操作。

如果你需要指点,请问。