C++ 数组的隐式指针转换不';t似乎指向数组
我正在编写一个操作系统,作为其中的一部分,我需要告诉CPU内存中的段。基本思想是我用LGDT汇编调用加载GDT寄存器。它的参数是包含实际GDT的大小和位置的结构的内存地址。我的问题是,在globaldescriptorable.h的第75行,我设置了要传递给LGDT的结构中数组的地址,但是当我在结构给定的地址检查内存时,那里什么都没有C++ 数组的隐式指针转换不';t似乎指向数组,c++,arrays,pointers,operating-system,C++,Arrays,Pointers,Operating System,我正在编写一个操作系统,作为其中的一部分,我需要告诉CPU内存中的段。基本思想是我用LGDT汇编调用加载GDT寄存器。它的参数是包含实际GDT的大小和位置的结构的内存地址。我的问题是,在globaldescriptorable.h的第75行,我设置了要传递给LGDT的结构中数组的地址,但是当我在结构给定的地址检查内存时,那里什么都没有 class GlobalDescriptorTable { private: GdtEntry _gdt[256]; size_t size;
class GlobalDescriptorTable {
private:
GdtEntry _gdt[256];
size_t size;
GdtDescriptor gdtd;
public:
GlobalDescriptorTable( ) ;
GdtEntry encodeGlobalDescriptorTableEntry(uint32_t limit,
uint32_t baseAddress, Access access, Flags flags);
void load( ) {
//get size, -1 because Int-hell hates you
size_t sizeOfGdt = (3 * sizeof(GdtEntry)) - 1;
//get the info to tell cpu about the GDT
gdtd.size = (uint16_t)sizeOfGdt;
gdtd.location = _gdt;
asm ("LGDT %[gdtd]" : : [gdtd] "m" (gdtd));
}
};
作为测试的作业:
uint64_t temp = 0xF00FB00BEE00F0AA;
_gdt[0] = *((GdtEntry*) &temp);
任何帮助都将不胜感激。LGDT指令需要线性地址,而不是段相对地址。这是一个不同于C++程序的地址。请参阅英特尔文档,了解更多的信息。请用A或GDT查看您的问题,它表示分页应用,因此C++将给出正确的地址。它通过分页,但不通过段(CS,DS等)寄存器。C++环境是这样的。当我这样做时,我已经设置了分页,这就是设置片段的方法。我认为这不是问题所在。