سؤال

لقد فعلت بالفعل جزءًا من نظام التشغيل الخاص بي في التجميع ، لكنني الآن أريد إنشاء محمل تمهيد خاص به أيضًا بدلاً من استخدام Grub. عندما كنت أقوم بتطوير نظام التشغيل الخاص بي في التجميع ، أتذكر أنني أقوم بتمهيده مثل هذا:

org 0x7c00
bits 16

; OS Kernel Here

times 510 - ($-$$) db 0
dw 0xAA55

هذا أنا أعرفه بالفعل. الآن أريد استخدام هذا وتنفيذ نظام التشغيل "الحقيقي" الذي سيكون ملف *.bin مكتوب إلى القطاع الثاني من المرنة. ثم أريد أن أعرف شيئًا ما

  • كيف يمكنني القيام بمحمل التمهيد في التجميع لتنفيذ ما سيبدأ في القطاع الثاني من المرنة؟
  • أحتاج إلى إضافة أي شيء إلى مصدر التجميع الذي سيتم وضعه في القطاع الثاني من المرنة؟
هل كانت مفيدة؟

المحلول

انت تستخدم int 0x13 للتحميل في العدد المطلوب من القطاعات والقفز إلى الموقع الذي تضعه في الرمز الجديد. لا يوجد شيء عليك القيام به في المرحلة الثانية ، لكنك تريد التأكد من تعيينك DS لتكون صالحة في أي مكان تحميل الرمز.

مثال من أرشيف نظام التشغيل الصغير الخاص بي:

  /* BIOS loads the sectors into es:bx */
  pushw    $STAGE1_WORKSEG
  popw     %es
  movw     $STAGE1_OFFSET, %bx

read_stage1:

  /* Try to read in a few sectors */
  movb     $0x2, %cl      /* Sector */
  movb     $0x0, %ch      /* Cylinder */
  movb     $0x0, %dh      /* Head */
  movb     $0x0, %dl      /* Drive */
  movb     $0x2, %ah      /* BIOS read function */

  /* How many sectors to load */
  movb     $STAGE1_SIZE, %al 
  int      $0x13
  jnc      read_stage1_done

  /* Reset drive */
  xorw     %ax, %ax
  int      $0x13
  jmp      read_stage1


read_stage1_done:

  /* Perform a long jump into stage1 */
  ljmp     $STAGE1_WORKSEG, $STAGE1_OFFSET

  call     halt

halt:
    /*
    * Function: halt
    * Synopsis: Sends the processor into a permanent halted status
    * Notes:
    *    The only way out of this is to manually reboot
    */
    hlt                     /* Halt the processor */
    jmp      halt

هذا بتنسيق الغاز ، لذا ستحتاج إلى عكس ترتيب المعامل لأنه يبدو أنك تستخدم NASM من times تعليمات. يجب أن تكون الأسماء المتغيرة تتفوق على نفسها.

إذا كنت تقوم بتطوير نظام تشغيل هواية http://forum.osdev.org/ هو مكان جيد للحصول على الدعم من الآخرين يفعلون نفس الشيء. إنه أكثر تخصصًا قليلاً من Stackoverflow ويمكن أن تكون الكثير من مواد OS باطنية تمامًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top