我正在编写一个操作系统。我的经验只允许我将其制作为 32 位,但我想将其转换为 64 位。
我该怎么做才能使它成为 64 位?
我只想知道一般信息而不链接代码,但认为它不相关。因此这里是我的 kernel.s 代码:
.set MAGIC, 0x1badb002
.set FLAGS, (1<<0 | 1<<1)
.set CHECKSUM, -(MAGIC + FLAGS)
.section .multiboot
.long MAGIC
.long FLAGS
.long CHECKSUM
.section .text
.extern kernelMain
.global loader
loader:
mov $kernel_stack, %esp
push %eax
push %ebx
call kernelMain
_stop:
cli
hlt
jmp _stop
.section .bss
.space 2*1024*1024; # 2 megabytes of space
kernel_stack:
不过,我认为它还没有准备好。
如有必要,这是我的 kernel.cpp 代码:
#include "types.h"
#include "gdt.h"
void print(char* str) {
unsigned short* VideoMemory = (unsigned short*)0xb8000;
static uint8_t x = 0, y = 0;
for(int i = 0; str[i] != '\0'; ++i) {
switch(str[i]) {
case '\n':
y++;
x = 0;
break;
default:
VideoMemory[80*y+x] = (VideoMemory[80*y+x] & 0xFF00) | str[i];
x++;
break;
}
if(x >= 80) {
y++;
x = 0;
}
if (y >= 25) {
for(y = 0; y < 25; y++)
for(x = 0; x < 80; x++)
VideoMemory[80*y+x] = (VideoMemory[80*y+x] & 0xFF00) | ' ';
x = 0;
y = 0;
}
}
}
extern "C" void kernelMain(void* multiboot_structure, unsigned int magicnumber) {
print("All the includes work fine, but I will only link them if really necessary!\n");
GlobalDescriptorTable gdt;
while(1);
}
我正在使用as
Ubuntu 中的汇编程序构建我的汇编代码;我的 C++ 代码由g++
.
如果有重复,请链接它们,因为即使滚动了整个页面我也没有发现它们。