2016-02-04 56 views
1

我想测试一下硬件是如何运行的,以防我试图写入段(例如DS以外的数据段可能是GS),仅用于测试目的......是否有程序集指令,允许我指定段wit.h一个偏移量并直接写入它?在x86中写入段

回答

1

要写入特定的段,必须首先将段号加载到段寄存器中,然后使用适当的段前缀进行加载。例如,访问0x1234:0x5678,你可以做这样的事情(在& T-语法):

push $0x1234 
pop %es 
mov %es:0x5678,%eax 
+0

感谢@FUZxxl重播,但我仍然感到困惑的一样东西。是不是mov指令只是用新的选择器更新段寄存器,我的意思是,如果我用这个(mov%es,%eax)来完成这个操作,那么这个差别是什么?实际上是在段内使用一个上级?因为我基本上想要在自己的细分市场内写入,而不仅仅是更新细分市场。与一个新的选择器。 –

+0

@ user2628079第一条指令将一个值压入堆栈,第二条指令将此值加载到段寄存器中。这是因为没有指令'mov $ 0x1234,%es'。第三条指令在'%es'描述的段中的地址'0x5678'处获取了四个字节,并将它们存储在'%eax'中。请注意,我在这里使用AT&T语法。如果您更熟悉英特尔语法,则可以更新示例以使用英特尔语法。 – fuz