انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: نوشتن یک سیستم عامل ساده در Assembly  (دفعات بازدید: 6372 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین محمدرضا ح.

  • High Hero Member
  • *
  • ارسال: 3117
  • جنسیت : پسر
  • Your Future is our Past!
نوشتن یک سیستم عامل ساده در Assembly
« : 10 فروردین 1392، 09:40 ب‌ظ »
با سلام خدمت همگی :)

این آموزش رو من از اینجا برداشتم :

http://mikeos.berlios.de/write-your-own-os.html

اینجا گفته چطور میشه یک سیستم عامل ساده با اسمبلی نوشتن که یک پیغام رو روی صفحه چاپ کنه! مسلمه که اول کار کسی انتظار نباید داشته باشه تا یک سیستم عامل مثل BSD یا Windows بنویسه. بهر حال این سیستم عاملها هم از ایده هایی استفاده میکنند که در این سیستم عاملهای کوچک استفاده شده. فقط برای خودشون تغییرش میدن.

این ویکی توضیحات خوبی داره : http://wiki.osdev.org

خب پرچونگی نکنم! برسیم به این که چه چیزهایی نیازه؟

۱- مجموعه build-essential
۲- یک دستگاه اسمبلر (در اینجا nasm)
۳- یک مجازی ساز (من به رسم امانت داری از متن اصلی qemu رو آوردم ولی شخصا با Virtual Box تست میکنم ) .

sudo apt-get install nasm build-essential qemu
خب! توضیحات جالبی در این قسمتهای متن اومده که به نظرم بهتر هست خودتون بخونیدش :

http://mikeos.berlios.de/write-your-own-os.html#pcprimer
http://mikeos.berlios.de/write-your-own-os.html#asmprimer

در این دو قسمت چون بیشتر به جنبه های فنی پرداخته شده ، به نظر بهتر هست که زبان اصلی بخونید (البته بی حوصلگی استارتر تاپیک رو هم بهش بیافزایید  :-\") .

آیا ادیتور خاصی نیاز داریم؟ نه! بازهم با هر ادیتوری میشه نوشت. gedit , leafpad, geany و یا vi , nano و ... . باید این کد رو بنویسیم :

BITS 16

start:
mov ax, 07C0h ; Set up 4K stack space after this bootloader
add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096

mov ax, 07C0h ; Set data segment to where we're loaded
mov ds, ax


mov si, text_string ; Put string position into SI
call print_string ; Call our string-printing routine

jmp $ ; Jump here - infinite loop!


text_string db 'This is my cool new OS!', 0


print_string: ; Routine: output string in SI to screen
mov ah, 0Eh ; int 10h 'print char' function

.repeat:
lodsb ; Get character from string
cmp al, 0
je .done ; If char is zero, end of string
int 10h ; Otherwise, print it
jmp .repeat

.done:
ret


times 510-($-$$) db 0 ; Pad remainder of boot sector with 0s
dw 0xAA55 ; The standard PC boot signature


در اسمبلی ، کامنتها بعد از ; (سمی کالن ، نقطه ویرگول) قرار میگیرند ، پس در این کد هم توضیحات خوبی افزوده شده و میتونه راهنماییتون کنه که هر تیکه چه عملی رو انجام میده :) .

و اما ، باید اسمبل کنیم ، کد رو با نام myfirst.asm سیو میکنیم و بعدش :

nasm -f bin -o myfirst.bin myfirst.asm
این فقط به ما یک باینری ساده میده! باینری ساده به چه درد میخوره؟ برای بوت یا ایمیج فلاپی نیازه یا CD . خب با این کد ایمیج فلاپی درست میکنیم :

dd status=noxfer conv=notrunc if=myfirst.bin of=myfirst.flp
خب الان به myfirst.flp رسیدیم! کد زیر رو اجرا کنید :

qemu-i386 -fda myfirst.flp
برای اینکه CD Image درست کنیم :

mkisofs -o myfirst.iso -b myfirst.flp cdiso/
توجه کنید که اول فایل myfirst.flp رو در cdiso قرار بدید. فولدر cdiso هم که میدونید چطور باید ساخت دیگه ;D

خب برای بوت از CD هم در دستور فوق بجای fda بنویسید cdrom ! و از سیستم عامل سادتون لذت ببرید :D .

خب برای کار پیشرفته تر چه کنیم؟ این هم تیم MikeOS توضیح خوبی داده :

http://mikeos.berlios.de/write-your-own-os.html#gofurther

به جهت اینکه بتونید MikeOS رو به GRUB بشناسونید باید اون رو به Protected مد ببرید! و برای این کار هم هکی از این سیستم عامل موجوده :

http://board.flatassembler.net/topic.php?t=12381

که میتونید ببینید چه کار کرده :) .
قاضی : تو السالوادور چه کار میکردی؟
چه‌گوارا : آفتاب میگرفتم
قاضی : پس چرا ساختمان دادگستری رو منفجر کردی؟
چه‌گوارا : جلوی آفتاب رو گرفته بود

آفلاین majidkamali1370

  • Hero Member
  • *
  • ارسال: 928
  • جنسیت : پسر
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #1 : 10 فروردین 1392، 10:05 ب‌ظ »
build-essential برای چی نیازه؟
Ubuntu 14.04 LTS 64-bit - unity

آفلاین محمدرضا ح.

  • High Hero Member
  • *
  • ارسال: 3117
  • جنسیت : پسر
  • Your Future is our Past!
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #2 : 10 فروردین 1392، 10:08 ب‌ظ »
build-essential برای چی نیازه؟

راستش خودمم نفهمیدم! چون nasm , qemu , genisoimage کلا کارش رو راه میندازه :D
قاضی : تو السالوادور چه کار میکردی؟
چه‌گوارا : آفتاب میگرفتم
قاضی : پس چرا ساختمان دادگستری رو منفجر کردی؟
چه‌گوارا : جلوی آفتاب رو گرفته بود

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #3 : 10 فروردین 1392، 11:45 ب‌ظ »

جالب بود.  ;)
و ما میطوانیم

آفلاین کیان

  • High Hero Member
  • *
  • ارسال: 2338
  • جنسیت : پسر
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #4 : 11 فروردین 1392، 12:59 ق‌ظ »
مسلمه که اول کار کسی انتظار نباید داشته باشه تا یک سیستم عامل مثل BSD یا Windows بنویسه.
خوشم میاد کلا تو کار bsd/windows/mac هستی اما تو انجمن اوبونتو فعالیت میکنی   8) ;D :P
حالا که عشق کرنل و اینچیزا هستی، اون سیستم عامله که توی مروگر وب اجرا میشه رو دیدی؟

آفلاین محمدرضا ح.

  • High Hero Member
  • *
  • ارسال: 3117
  • جنسیت : پسر
  • Your Future is our Past!
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #5 : 11 فروردین 1392، 01:01 ق‌ظ »
مسلمه که اول کار کسی انتظار نباید داشته باشه تا یک سیستم عامل مثل BSD یا Windows بنویسه.
خوشم میاد کلا تو کار bsd/windows/mac هستی اما تو انجمن اوبونتو فعالیت میکنی   8) ;D :P
حالا که عشق کرنل و اینچیزا هستی، اون سیستم عامله که توی مروگر وب اجرا میشه رو دیدی؟

تو کار ویندوز نیستم :D
کدومش دقیقا؟ :D یکی بود به اسم gh.os.t اگه اشتباه نکنم.
قاضی : تو السالوادور چه کار میکردی؟
چه‌گوارا : آفتاب میگرفتم
قاضی : پس چرا ساختمان دادگستری رو منفجر کردی؟
چه‌گوارا : جلوی آفتاب رو گرفته بود

آفلاین vandu

  • Hero Member
  • *
  • ارسال: 741
  • جنسیت : پسر
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #6 : 11 فروردین 1392، 01:08 ق‌ظ »
مسلمه که اول کار کسی انتظار نباید داشته باشه تا یک سیستم عامل مثل BSD یا Windows بنویسه.
خوشم میاد کلا تو کار bsd/windows/mac هستی اما تو انجمن اوبونتو فعالیت میکنی   8) ;D :P
حالا که عشق کرنل و اینچیزا هستی، اون سیستم عامله که توی مروگر وب اجرا میشه رو دیدی؟

لیست کاملشون اینجا هست:
لیست دسکتاپ‌های تحت وب در ویکی‌پدیا

و این یکی خیلی به نظرم جالب‌تر از بقیه هست:
symbiose

پ.ن: علی جان لینک رو درست کردم. ممنون که اطلاع دادی.  :)
« آخرین ویرایش: 11 فروردین 1392، 01:22 ق‌ظ توسط vandu »
Nothing is particularly hard if you divide it into small jobs

Henry Ford

آفلاین علی نعمت اللهی

  • High Sr. Member
  • *
  • ارسال: 648
  • جنسیت : پسر
  • every thing is [im]possible
    • وبلاگ شخصی من
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #7 : 11 فروردین 1392، 01:13 ق‌ظ »
البته یکی هم داریم که توش فقط مرورگر وب باز میشه :-D
معلومه دیگه کرومیوم او اس

vandu جان لینک رو به عنوان کد پست نکن من الان با موبایل نمیتونم انتخابش کنم
« آخرین ویرایش: 11 فروردین 1392، 01:16 ق‌ظ توسط علی ن. »

آفلاین کیان

  • High Hero Member
  • *
  • ارسال: 2338
  • جنسیت : پسر
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #8 : 11 فروردین 1392، 01:18 ق‌ظ »
کدومش دقیقا؟ :D یکی بود به اسم gh.os.t اگه اشتباه نکنم.
http://www.bellard.org/jslinux/

آفلاین محمدرضا ح.

  • High Hero Member
  • *
  • ارسال: 3117
  • جنسیت : پسر
  • Your Future is our Past!
پاسخ : نوشتن یک سیستم عامل ساده در Assembly
« پاسخ #9 : 12 فروردین 1392، 07:09 ق‌ظ »
نتیجه آموزشهای وبسایتهای MikeOS و OSDev :

http://velsa.haghiri75.com

ببینم شما چه میکنید ;D
قاضی : تو السالوادور چه کار میکردی؟
چه‌گوارا : آفتاب میگرفتم
قاضی : پس چرا ساختمان دادگستری رو منفجر کردی؟
چه‌گوارا : جلوی آفتاب رو گرفته بود