2014-09-19 76 views
2

我有一個簡單的內核以及一個引導加載程序。在引導裝載程序進入保護模式之前,我想使用中斷來檢索系統內存量(int 0x12),然後將標籤保存的值設置爲檢索到的內存量。一旦內核加載(處於保護模式),我想訪問數據。x86在不包含文件的情況下訪問標籤

起初打算用以下結構:

; 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標籤是完全不同的,他們不指向同一個地址,我怎麼能這樣做?

回答

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 
; ... 
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 

你可以用「做到這一點條件彙編「。

如果您需要指針,請詢問。

相關問題