- 主题:下面的嵌入汇编是什么意思
asm volatile ("movw %%ax, %%gs" :: "a" (USER_DS));
asm volatile ("movw %%ax, %%fs" :: "a" (USER_DS));
asm volatile ("movw %%ax, %%es" :: "a" (KERNEL_DS));
asm volatile ("movw %%ax, %%ds" :: "a" (KERNEL_DS));
asm volatile ("movw %%ax, %%ss" :: "a" (KERNEL_DS));
asm volatile ("ljmp %0, $1f\n 1:\n" :: "i" (KERNEL_CS));
USER_DS 和KERNEL_DS是常量
--
FROM 203.126.220.*
查手册
--
FROM 114.245.195.*
程序跑到这里就好像跑飞了,重头开始了,用qemu模拟,所以过来问问
【 在 z16166 的大作中提到: 】
: 查手册
--
FROM 122.97.237.*
这就是设置了几个寄存器,用 ax 里的内容重置了 gs/fs/es/ds/ss,
ax 的值未知,但应该都是同一个段描述符,也可能是零。
后面几个都是段寄存器,这么大规模的设置,应该是打算大干一场的,
再加上后面 ljmp 直接跳到了 KERNEL 的某处,
综合来看应该是上下文切换吧。
【 在 freyoneby (freyoneby) 的大作中提到: 】
: asm volatile ("movw %%ax, %%gs" :: "a" (USER_DS));
: asm volatile ("movw %%ax, %%fs" :: "a" (USER_DS));
: asm volatile ("movw %%ax, %%es" :: "a" (KERNEL_DS));
: asm volatile ("movw %%ax, %%ds" :: "a" (KERNEL_DS));
: asm volatile ("movw %%ax, %%ss" :: "a" (KERNEL_DS));
: asm volatile ("ljmp %0, $1f\n 1:\n" :: "i" (KERNEL_CS));
: USER_DS 和KERNEL_DS是常量
--
FROM 163.125.197.*