在launcher.asm中,使用了launch_applications过程三次调用了int 0x40去启动3个应用,构成了桌面背景,桌面图标和底部任务栏。这三次调用使用了eax,放置调用号19。ebx放置了应用的名称,ecx放置了参数BOOT。那么到了start_application_fl过程中,怎么eax指向了应用名称,而ebx指向了传递的参数了呢?
int 0x40(sys32.inc)->syscall_startapp(kernel.asm)->start_application_fl(sys32.inc)->start_app_c(sys32.inc)->add_app_parameters(sys32.inc)。
在i40过程中(sys32.inc中第623)行有如下一段代码:
pusha
mov edi,[esi+l.eax-tss_sceleton]
mov eax,[esi+l.ebx-tss_sceleton]
mov ebx,[esi+l.ecx-tss_sceleton]
mov ecx,[esi+l.edx-tss_sceleton]
mov edx,[esi+l.esi-tss_sceleton]
mov esi,[esi+l.edi-tss_sceleton]
sti
push eax
and edi,0xff
call dword [servetable+edi*4]
pop eax
cli
popa
从这段代码中,大致可以猜到,中断后的edi中是调用者的eax,ebx中放置的是调用者eax,而ebx放置的是调用者的ecx值。而call dword [servetable+edi*4]则调用了syscall_startapp。
标签:调用,猜想,中断,edi,sceleton,eax,ebx,tss,esi From: https://www.cnblogs.com/menuetos32/p/16658622.html