操作系统内核程序集含义?

时间:2018-01-04 12:35:23

标签: assembly x86 operating-system kernel

问题1。
是什么意思

asm volatile(" ljmp%0,$ 1f \ n 1:\ n" ::" i"(KERNEL_CS));

我的猜测是将%cs设置为KERNEL_CS,但是立即数$ 1f呢?

问题2。

如果我们可以使用jmp label跳转到某个标签,我们为什么还要写jmp label fjmp label b

问题3。

我的内核程序可以使用asm volatile ("ljmp %0, $1f\n 1:\n" :: "i" (USER_CS));将权限级别更改为第0环的响铃3吗?我在我的ISR中执行了此操作,并且我获得了一般保护错误。但我认为我的%cs和%ip是在jmp之后的有效可执行和可重写内存段,因为我的GDT就是这样的

static struct segdesc gdt[] = {
SEG_NULL,
[SEG_KTEXT] = SEG(STA_X | STA_R, 0x0, 0xFFFFFFFF, DPL_KERNEL),
[SEG_KDATA] = SEG(STA_W, 0x0, 0xFFFFFFFF, DPL_KERNEL),
[SEG_UTEXT] = SEG(STA_X | STA_R, 0x0, 0xFFFFFFFF, DPL_USER),
[SEG_UDATA] = SEG(STA_W, 0x0, 0xFFFFFFFF, DPL_USER),
[SEG_TSS]    = SEG_NULL,

};

内核文本,数据和用户文本,数据段均来自同一地址并具有相同的大小。

0 个答案:

没有答案