首页 > 其他分享 >TSS结构赋值

TSS结构赋值

时间:2022-08-19 14:25:59浏览次数:86  
标签:os mov eax ax 赋值 data TSS 结构

在进程切换过程中,需要一个结构体,在保护模式中,称为TSS.。

在MenuetOS32系统中,加载应用,也就是进程时,用了如下的方式:

    ; TSS

      mov eax,cr3
      mov [l.cr3],eax
      mov eax,[app_start]
      mov [l.eip],eax
      mov eax,[app_esp]
      mov [l.esp],eax

      mov ebx,[new_process_place] ; gdt's
      shl ebx,3

      mov ax,app_code
      add ax,bx
      mov [l.cs],ax
      mov ax,app_data
      add ax,bx
      mov [l.ss],ax
      mov [l.ds],ax
      mov [l.es],ax
      mov [l.fs],ax
      mov ax,graph_data
      mov [l.gs],ax
      mov [l.io],word 128
      mov [l.eflags],dword 0x11202
      mov [l.ss0], os_data
      mov [l.ss1], ring1_data
      mov [l.ss2], ring2_data
      mov [l.esp0], 0x55000
      mov [l.esp1], 0x56000
      mov [l.esp2], 0x57000

 

由于通常应用(进程)放在了Ring3, 所以最重要的是把重点放在l.cr3和l.eip上。

那么osloop呢?osloop的TSS如下:

    ; set default flags & stacks
      mov [l.eflags],dword 0x11202 ; sti and resume
      mov [l.ss0], os_data
      mov [l.ss1], ring1_data
      mov [l.ss2], ring2_data
      mov [l.esp0], 0x52000
      mov [l.esp1], 0x53000
      mov [l.esp2], 0x54000

   ; osloop - TSS
      mov eax,cr3
      mov [l.cr3],eax
      mov [l.eip],osloop
      mov [l.esp],0x2fff0
      mov [l.cs],os_code
      mov [l.ss],os_data
      mov [l.ds],os_data
      mov [l.es],os_data
      mov [l.fs],os_data
      mov [l.gs],os_data

 暂时我们可以任务,在进程切换过程中,使用了各自的TSS。在运行监视鼠标和窗口时,eip指向了osloop代码块。而其他呢,eip则指向个各自的START。

打开launcher时,还没有用到定时中断。因为在内核中,没有用到int 0x40h,19号调用。而是直接查找文件,获取运行时所用内存,然后赋值TSS。

标签:os,mov,eax,ax,赋值,data,TSS,结构
From: https://www.cnblogs.com/menuetos32/p/16601736.html

相关文章