es ist jetzt so, dass meine routine schon anständig initialisiert und aufgerufen wird. das funktioniert. ich habe eine textausgabe eingebaut, und die wird immer wieder ausgegeben. das funktioniert also. außerdem habe ich das problem, dass anscheinend der return nicht geht. denn nach dem initialisieren kommen noch weitere textausgaben, nach denen dann das interrupt anscheinend zum ersten mal aufgerufen wird. und danach geht es nicht weiter. es liegt also nicht an der initialisierung, sondern muss irgendwo im code liegen. allerdings verstehe ich nicht, wo... mein jetziger code ist das hier:
_int0x08:
pusha
push ds
push es
mov ax,0x50
mov ds,ax
mov cx,[task_current]
mov ah,0x07
int 0x67
mov si,[task_offset]
sub si,0x06
mov [fs:si],ss
add si,0x02
mov [fs:si],sp
add si,0x04
;müsste am ende des taskentrys sein
mov ax,[fs:si]
read_next_task:
mov [task_current],ax
cmp ax,0xFFFF
je near task_get_next
add si,0x02
mov al,[fs:si]
mov byte [task_name],al
mov al,[fs:si+1]
mov byte [task_name+1],al
mov al,[fs:si+2]
mov byte [task_name+2],al
mov al,[fs:si+3]
mov byte [task_name+3],al
mov al,[fs:si+4]
mov byte [task_name+4],al
mov al,[fs:si+5]
mov byte [task_name+5],al
mov al,[fs:si+6]
mov byte [task_name+6],al
mov al,[fs:si+7]
mov byte [task_name+7],al
mov al,[fs:si+8]
mov byte [task_name+8],al
mov al,[fs:si+9]
mov byte [task_name+9],al
mov al,[fs:si+10]
mov byte [task_name+10],al
mov al,[fs:si+11]
mov byte [task_name+11],al
add si,0x0C
mov ax,[fs:si]
mov ss,ax
add si,0x02
mov ax,[fs:si]
mov sp,ax
add si,0x04
mov [task_offset],si
mov cx,[task_current]
mov ah,0x06
int 0x67
pop es
pop ds
popa
task_ende:
push ax
mov al,0x20 ;ende des ints abschicken
out 0x20,al
pop ax
iret
task_get_next:
mov si,0x0000
mov [task_offset],si
mov ax,[fs:si]
jmp read_next_task
mfg
Joachim_Neu