首页 > 编程语言 >Menuetos32桌面-程序加载,参数

Menuetos32桌面-程序加载,参数

时间:2022-08-17 16:11:31浏览次数:66  
标签:调用 桌面 Menuetos32 dd BOOT 参数 送入 asm 加载

在Launcher.asm调用launch_applications中,加载了3个应用,一个是桌面背景jpegview.asm,一个是桌面图标ICONMNGR,还有一个是底部任务栏Mpanel。

其中第三个参数是延时作用,这个参数在加载3个应用的过程中使用。在调用move eax,19, int 0x40时,仅仅送入了应用名称和第二个参数“BOOT”。

把延时部分注释掉,开机时的滚动条很短时间内就消失了。使用了延时后,看上去,就“好像”等待桌面加载完成后才消失。

参数是如何使用的呢?在应用中的头部中有参数的位置。例如,在Jpegview.asm中头部如下:

      use32

        db 'MENUET01' ; 8 byte id
        dd 0x01 ; header version
        dd START ; start of code
        dd I_END ; size of image
        dd memsize ; memory for app
        dd memsize - 1024 ; esp
        dd PARAMS , 0x0 ; I_Param , I_Icon

头部中最后一行就是放置参数和icon的地方。

launch_applications调用了19号中断。在sys32.inc中第745行可以看到对应的调用过程是syscall_startapp。

在kernel.asm中第8980行可以查到这个调用。这个调用又调用了sys32.inc中start_application_fl。而这个过程调用了同样在sys32.inc中start_app_c。

start_app_c调用了add_app_parameters,在sys32.inc中的3374行。

把开始的两句注释掉,换成jmp no_app_params,也就是说,没有参数,看看开始是什么情况。

命令行编译:fasm e:\menuet32\k086b\kernel.asm e:\menuet32\k086b\kernel.mnt

注意编译后的文件后缀为.mnt。

没有了参数boot,jpegview.asm就变成了窗口。桌面图标怎么变成了这样?

看了一下iconmngr.asm中的文件,也有检查参数,并且也有关于BOOT参数的判断:

      check_parameters:

          cmp [I_Param],dword 'BOOT'
          je chpl1
          ret
      chpl1:

          mov eax,21
          jmp apply_changes

 

看来这个程序编得很紧凑。

现在可以看到,1.送入BOOT参数,jpegview.asm画出了桌面背景,然后退出;不送入参数,则在打开一个加载了图片的窗口。

          2.送入BOOT参数,ICONMNGR画出桌面分布的图标。不送入参数,则打开设置桌面图标的窗口。

       3.送入BOOT参数,Mpanel画出底部任务栏,由弹出菜单。不送入参数,仅画出底部任务栏,鼠标点击没有弹出菜单。

 

在此处取消参数检测,影响还是比较大的。

 

标签:调用,桌面,Menuetos32,dd,BOOT,参数,送入,asm,加载
From: https://www.cnblogs.com/menuetos32/p/16595390.html

相关文章