📄 task.s
字号:
.global setup_task
setup_task: /*this function setup tss, and put it into GDT*/
movl 0x04(%esp),%eax;
movl $(0xc0000800),%eax
movl %eax,tss_esp0
movl $(0x00000018),tss_ss0
movl $(0x00),tss_ss1
movl $(0x00),tss_ss2
movl $(page_dir),tss_cr3
andl $(0x3fffffff),tss_cr3
lea gdt_table,%edi
lea tss,%eax
shll $(0x10),%eax
addl $(tss_end-tss),%eax
lea tss,%edx
movl %edx,%ecx
shrl $(0x10),%ecx
movb %cl,%dl
andl $(0xff0000ff),%edx
orl $(0x00008900),%edx
movl %eax,1*8(%edi)
movl %edx,4+1*8(%edi)
lgdt gdt_descr
movw $(0x08),%ax
ltr %ax
ret
.align 16
tss:
.long 0 /*00: (0,LINK)*/
tss_esp0:
.long 0xc0000800 /*04: ESP0 */
tss_ss0:
.long 0x18 /*08: (0,SS0) */
tss_esp1:
.long 0 /*0C: ESP1 */
tss_ss1:
.long 0 /*10: (0,SS1) */
tss_esp2:
.long 0 /*14: ESP2 */
tss_ss2:
.long 0 /*18: (0,SS2) */
tss_cr3:
.long 0 /*1C: CR3 */
tss_reg:
.long 0 /*20: EIP */
.long 0 /*24: EEFLAG */
.long 0 /*28: EAX */
.long 0 /*2C: ECX */
.long 0 /*30: EDX */
.long 0 /*34: EBX */
.long 0 /*38: ESP */
.long 0 /*3C: EBP */
.long 0 /*40: ESI */
.long 0 /*44: EDI */
.long 0x2b /*48: (0,ES) */
.long 0x23 /*4C: (0,CS) */
.long 0x2b /*50: (0,SS) */
.long 0x2b /*54: (0,DS) */
.long 0x2b /*58: (0,FS) */
.long 0x2b /*5C: (0,GS) */
.long 0 /*60: (0,LDT) */
.long 0 /*64: (IObitmap, 0T*/
.org tss+0x70
tss_end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -