linux内核bootsect.s文件中的“ seg fs”是什么意思

时间:2019-03-06 11:15:12

标签: c assembly x86 operating-system

当我阅读早期的Linux内核代码时,我在boot / bootsect.s中遇到了一个难以理解的问题。“ seg fs”,它在做什么?如果要更改为AT&T的汇编语法,该怎么办!

body { 
    zoom: 300%;
    -moz-transform: scale(3); 
    -moz-transform-origin: 0 0;
} 

2 个答案:

答案 0 :(得分:4)

我假定它为下一条指令组装为fs前缀。那将与注释匹配,并且是唯一有意义的事情。

应该足够容易地进行构建和分解(如果需要,可以转换为AT&T语法)。

在AT&T语法中,您可以仅将fs用作其他助记符的前缀。

fs movsw

汇编为此(在64位模式下。16位模式将跳过66个操作数大小的前缀)。

0000000000000000 <.text>:
   0:   64 66 a5                movsw  %fs:(%rsi),%es:(%rdi)

答案 1 :(得分:-1)

谁能告诉我将其更改为正确的? !

__go:   
movw    %cs         ,   %ax
movw    $0x4000-12  ,   %dx
movw    %ax         ,   %ds
movw    %ax         ,   %es
movw    %ax         ,   %ss
movw    %dx         ,   %sp
pushw   $0x0000
popw    %fs
movw    $0x0078     ,   %bx
lgs     %fs:(%bx)   ,   %si
movw    %dx         ,   %di
movw    $0x0006     ,   %cx
cld
rep
movw    %dx         ,   %di
movw    $0x12       ,   0x0004(%di)
movw    %di         ,   %fs:(%bx)
movw    %es         ,   %fs:0x0002(%bx)
movw    %cs         ,   %ax
movw    %ax         ,   %fs
movw    %ax         ,   %gs
xorb    %ah         ,   %ah
xorb    %dl         ,   %dl
int     $0x13