Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86在gdt已经加载之后如何更改它?_Assembly_X86_Nasm_Gdt - Fatal编程技术网

Assembly x86在gdt已经加载之后如何更改它?

Assembly x86在gdt已经加载之后如何更改它?,assembly,x86,nasm,gdt,Assembly,X86,Nasm,Gdt,我的idtr地址定义为 gdt_pointer: DW 0;size_of_gdt DD 0;start_of_gdt 我可以用LGDT[gdt\u指针]加载它。 但是如果必须的话,我以后如何更改gdt的内容呢? 设置正确的值后,是否可以再次使用LGDT指令 编辑: 我计划一直保持gdt_指针的起始地址不变,但我会更改size参数。此外,我正在从32位保护模式加载和更改gdt。如果更改gdt的内容(但将其保留在同一地址),则只需加载受更改影响的段寄存器(如果有) 如果更改GDT

我的idtr地址定义为

gdt_pointer:
    DW 0;size_of_gdt
    DD 0;start_of_gdt
我可以用
LGDT[gdt\u指针]
加载它。 但是如果必须的话,我以后如何更改gdt的内容呢? 设置正确的值后,是否可以再次使用
LGDT
指令

编辑:
我计划一直保持gdt_指针的起始地址不变,但我会更改size参数。此外,我正在从32位保护模式加载和更改gdt。

如果更改gdt的内容(但将其保留在同一地址),则只需加载受更改影响的段寄存器(如果有)

如果更改GDT的(虚拟)地址(但保持其内容不变),则只需再次执行
lgdt


如果同时更改GDT的(虚拟)地址及其内容,则需要执行
lgdt
,并加载任何受影响的段寄存器。

如何加载段寄存器?我没有任何线索。是的,我计划让gdt一直保持在同一个地址,只是改变它的内容。而且我没有使用虚拟地址(至少现在还没有)。