Assembly 如何在保护模式下更新数据段选择器

Assembly 如何在保护模式下更新数据段选择器,assembly,x86,intel,gdt,Assembly,X86,Intel,Gdt,我想更新数据段选择器以指向GDT中的其他条目。但由于我对汇编非常陌生,我无法在代码中完成它。但是,我使用以下汇编指令更新了代码段选择器: ljmp $(GDT_TABLE_INDEX), $(1f) //This instruction simply points code segment to some other entry in GDT and move to next label. 是否也有类似或替代的指令来更新数据段选择器?您可以使用mov指令更改数据段选择器。例如,如果要将

我想更新数据段选择器以指向GDT中的其他条目。但由于我对汇编非常陌生,我无法在代码中完成它。但是,我使用以下汇编指令更新了代码段选择器:

ljmp $(GDT_TABLE_INDEX), $(1f)     //This instruction simply points code segment to some other entry in GDT and move to next label.

是否也有类似或替代的指令来更新数据段选择器?

您可以使用
mov
指令更改数据段选择器。例如,如果要将
ds
设置为
0x1234
,请使用:

mov $1234, %ax
mov %ax, %ds
请注意,没有
mov imm,sreg
指令,因此首先必须将选择器的编号移动到通用寄存器中。您可能还发现将
弹出到段寄存器中非常方便:

push $1234
pop %ds

谢谢。真的很有帮助。