0

我正在编写一个操作系统。我的经验只允许我将其制作为 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);
}



我正在使用asUbuntu 中的汇编程序构建我的汇编代码;我的 C++ 代码由g++.

如果有重复,请链接它们,因为即使滚动了整个页面我也没有发现它们。

4

0 回答 0