下面这段程序定义了两个任务,每个任务都有自己的TSS,LDT。任务0打印字符‘a’,任务1打印字符'b'.任务切换通过时钟中断处理过程完成。时钟到达时,判断当前任务号,切换到另一个任务,并用jmp tss:0的方式实现任务切换。任务中通过0x80系统调用打印字符。任务切换时,cpu会自动把当前任务的上下文(主要是各种寄存器,ldt)等保存当当前任务的TSS段中,并加载目标任务的TSS段相关信息,切换到新任务。
LATCH equ 11930 ;时钟中断
VIDEO_DS equ 0x18 ;显存段
TSS0_CS equ 0x20 ;任务0 TSS段
TSS0_LDT equ 0x28 ;任务0 LDT段
TSS1_CS equ 0x30 ;任务1 TSS段
TSS1_LDT equ 0x38 ;任务1 LDT段
[SECTION text]
[BITS 32]
startup_32:
mov eax,0x10
mov