Assembly 无法切换任务。似乎只有最后一次远征才有效

Assembly 无法切换任务。似乎只有最后一次远征才有效,assembly,x86,Assembly,X86,我正在试着写一个程序来切换任务。似乎一切正常,但有一件事: IRQ0_handler: push eax push screen_selector pop es db 9ah ; far call TSS_1:00 dw 00 dw TSS_4 db 9ah ; far call TSS_1:00 dw 00 dw TSS_2 db 9ah ; far call TSS_1:00 dw 00

我正在试着写一个程序来切换任务。似乎一切正常,但有一件事:

IRQ0_handler:
push    eax


push screen_selector
pop es

db    9ah        ; far call TSS_1:00
dw    00
dw    TSS_4

db    9ah        ; far call TSS_1:00
dw    00
dw    TSS_2

db    9ah        ; far call TSS_1:00
dw    00
dw    TSS_3

mov    al,20h
out    20h,al

pop    eax
iret
这个irq处理程序应该切换任务,但它似乎只调用最后一个任务。下面是其中一个任务的代码(它们实际上都是相同的,不同的任务应该显示不同的字符)


代码实际上应该可以工作。只是打印字符有点麻烦

如果没有看到所有的代码,很难判断出哪里出了问题。顺便说一句,我不确定所有寄存器是否都正确保存/还原。对不起,也许我应该早点写。问题解决了。只是打印字符有点麻烦。不过还是谢谢你。
   TaskOne:

push es
push screen_selector
pop es

mov ah, 1bh
mov al, '1'

mov es:[di], ax
add di, 2
pop es
iret
jmp TaskOne