سلام
اگر بخوایم خارج از محیط سیستم عامل با اسمبلی برنامه بنویسیم چهجوری باید کد رو اجرا کنیم؟!؟!
سلام
اگر بخوایم خارج از محیط سیستم عامل با اسمبلی برنامه بنویسیم چهجوری باید کد رو اجرا کنیم؟!؟!
بايد خودتون سيستم رو بوت كنيد و برنامه خودتون رو در حافظه لود كنيد و ثباتها رو تنظيم كنيد و ip,cs به اول كد برنامه شما اشاره كنه و شروع به اجراش كنه.
البته به همين راحتي نيست،مباحث زيادي اين بين هست تا برنامه شما اجرا شه
توي تالار در مورد بوت لودر و سيستم عامل هر چي بود بخون (بعضا لينك هاي مفيدي هست)،يكي از دوستان به اسم joker توي تالار ديگه آموزش فارسي گذاشته ميتوني اونم دنبال كني كه براي شروع خوبه
جوکر رو که می شناسم
الان داره سیستم عامل مینویسه!
خوب من منظورم چیز دیگست
برای اسمبل کردن برنامه ها معمولا از tasm یا masm استفاده میشه
می خوام بدونم بدون سیستم عامل چه طوری میشه برنامه اسمبلی نوشت و اجرا کرد
کتابی سرا دارید معرفی کنید
ميشه بگيد چرا بايد همچين كاري كنيد؟
بايد كد هاي اسمبلي به معادل كد ماشين اون تبديل كنيد(يعني همون كاري كه اسمبلر ميكنه)
چون جدا از سيستم عامل ميخواي بهتره ساختار فايل هاي باينري رو ببينيد(كد خالصي كه پردازنده ميفهمه) و در مورد تبديل كد هاي ماشين بيشتر بدونيد(يعني اسمبلر هاي متن باز و كارشون)،اسمبلر كار خاصي نميكنه فقط تبديل معادل انجام ميده،و لينكر فايل هارو لينك و فرمت قابل اجرا روي اون سيستم عامل درست ميكنه مثلا در ويندوز ساختار فايل هاي اجرايي pe هست بايد به اين ساختار باشه تا لودر اونه براتون در حافظه بزاره و پردازنده اجراش كنه
امیدوارم سوالتون در همین حد باشه و به فرض مثال نخواید بدونید چطوری میشه بدون فلاپی درایو رو سکتورهای فلاپی دیسک چیزی نوشت. BIOS هیچگونه امکانی برای برنامه نویسی یا debug نمیده PC متعاقب اجرای برنامه BIOS کارشو با بارگذاری و اجرای اولین سکتور device راه انداز شروع میکنه اصلا هم براش مهم نیست این چی هست سیستم عامل یا هر برنامه stand alone دیگه. دستورات اسمبلی تبدیل به upcode میشن تا اینکه قابل اجرا باشن و به هر حال باید برنامه (یعنی یک سری داده های قابل اجرا) روی اولین سکتور موجود باشه تا اجرا بشه توسط PC
با تشکر از دوستان
دلفی کدر عزیز بنده این قضیه فلاپی درایو هیچ ربطی به این بحت نداره!
اینقدر ها هم *** نیستم!
منظور بنده چیزه دیگه ای بود
اگر هنوز منظورمو خوب نرسوندم بهتره تاريخچه كامپيوتر رو نگاه كنيد هنگامي كه برنامه هارو با نوار پانچ ورود ميگرفتن و خروجي ميدادن (يعني بايد به طريقي داده ها وارد و بشه روش پردازش كرد و خروجي نمايش داد)
http://macpen.ir/index.php?option=co...news&Itemid=79
http://www.iproje.ir/pc/hard-2/newhard/2981
براي اين كار روي سيستم هاي فعلي شما بايد اختيار پردازنده رو بعد از روشن شدن بدست بگيري كه اين كارو با بوت لودر انجام ميدي
بعد هم ميتوني اديتوري بنويسي كه بشه خروجي رو ذخيره كرد بعد اسمبلر و لينكري بنويسي كه تبديل كنه به باينري فايل و حالا ميتوني كاري كه ميخواي انجام بدي يعني اون برنامه رو در حافظه لود كني و اختيار پردازنده بدي دست برنامه ، اما در اين حد برنامه هايي مثل 8086 بنويسي و به يك مگابايت دسترسي داشته باشي مگر اينكه فكر ساخت يك سيستم عامل باشي تا بتوني اسمبلر رو طوري تغيير بدي كه ساختاري كه براي فايل هات ميسازي هم ايجاد كنه و برنامه رو اون بار كنه در حافظه و اجرا و روش كنترل داشته باشه (خيلي مباحث هست اين بين كه اگر بري سمتش متوجه ميشي فعلا كمي در مورد nasm تحقيق كنيد و ساختارش)
آخرین ویرایش به وسیله xman_1365_x : دوشنبه 18 بهمن 1389 در 23:07 عصر
سیستم عامل ارتباطی به نوشتن برنامه ندارد فقط باعث میشه برنامه از ساختاری به اسم فایل در داخل ram لود بشه در حالی وظیفه اصلی سیستم عامل تنظیم موقعیت سگمنتها در محل مناسب و همچنین بارگذاری داده های مناسب از فایل در جای مناسب از ram هست.برای اسمبل کردن برنامه ها معمولا از tasm یا masm استفاده میشه
می خوام بدونم بدون سیستم عامل چه طوری میشه برنامه اسمبلی نوشت و اجرا کرد
ولی اگر منظورتان این هست که برنامه را دارید و نمیخواهید سیستم عامل داشته باشید فقط کافیست یک بوت لودر و همچنین یک فایل لودر از نوع Exe Loader و یا Com Loader بسازید و در قسمت بوت لودر درج کنید تا سیستم این ابزار را هم بالا بیاره تا برنامه ای که توسط tasm یا masm اجراییش کردید را اجرا کنه.
بله به شرطي كه از وقفه بايوس استفاده كنيد!(وقفه داس يا api ويندوز استفاده نشه)گه برنامه ای که با tasm و masm اسمبل میشه توانایی اجرا در محیط فاقد سیستم عامل را داره؟
در تالار جستجو كنيد،سورس بوت لودر هاي ساده اي كه بعد از بوت يك رشته رو نمايش ميده رو ببنيد متوجه ميشيد.
تا حالا سورس بوت لودرهایی که من دیدم اکثرا با nasm اسمبل میشن و بوت لودری که به tasm و masm اسمبل بشن ندیدم
اگه شما بوت لودری سراغ دارید که با tasm و masm اسمبل میشه ممنون میشم لطف کنید اینجا بذارید, البته با راهنمای اسمبل کردنش
به گمانم خروجی اسمبلر های tasm و masm مختص به ویندوز هست هر چند که شما از وقفه های داس استفاده نکنید
ممنون
دوست عزيز ، اگر شما مي خواي گمانه زني كني و حرف خودتون رو بزنيدبه گمانم خروجی اسمبلر های tasm و masm مختص به ویندوز هست هر چند که شما از وقفه های داس استفاده نکنید
1-چرا ميپرسيد 2-چرا باز حرفاي مارو مي خوني ؟ همون گمانتون حتما درسته ديگه
يا شايد با اين حرفتون مي خواي بگي ما هيچي نمي دونيم و از خودمون اين حرفارو ميزنيم؟
به لينك زير بريد نمونه اي ميبينيد (سورس + نحوه اسمبل با دو اسمبلري كه گفتين و لينك كردنش + توضيحات خط به خطم داره)تا حالا سورس بوت لودرهایی که من دیدم اکثرا با nasm اسمبل میشن و بوت لودری که به tasm و masm اسمبل بشن ندیدم
اگه شما بوت لودری سراغ دارید که با tasm و masm اسمبل میشه ممنون میشم لطف کنید اینجا بذارید, البته با راهنمای اسمبل کردنش
http://www.beroset.com/loader.html
اگر نمونه آسون ديگه هم خواستي emu8086 كه اسمبلرش fasm هست توي سورس هاي نمونش دو تا هست.
دركل بد نيست اول آموزش جستجو ببينيد تا بتونيد راحت نمونه هاي زيادي سورس رو پيدا كنيد.
با سلام
خوب دوست عزیز مشکل من همین جاست
ببینید در همین فروم یکی از دوستان تاپیکی زده و یه سری Hex-Opcodes گذاشته
خوب حالا چیزی که من میخوام بدونم این هست که آیا میشه به صورت مستقیم و با همین OPCode ها یه پردازنده دستور داد؟
[QUOTE=xman_1365_x;1209629]
براي اين كار روي سيستم هاي فعلي شما بايد اختيار پردازنده رو بعد از روشن شدن بدست بگيري كه اين كارو با بوت لودر انجام ميدي
بعد هم ميتوني اديتوري بنويسي كه بشه خروجي رو ذخيره كرد بعد اسمبلر و لينكري بنويسي كه تبديل كنه به باينري فايل و حالا ميتوني كاري كه ميخواي انجام بدي يعني اون برنامه رو در حافظه لود كني و اختيار پردازنده بدي دست QUOTE]
منظور شما از نوشتن ادیتور با چه زبانی هست؟؟؟
این ادیتور و لینکر و .... رو باید با چه زبانی بنویسم ؟؟ خود اسمبلی؟؟
بیشتر هدف من این هست که بدونم اون زمان چه جوری یه اسمبلر رو مینوشتن
قدیما که زبان سطح بالا نبود اسمبلی بود که خودش نیاز با اسمبلر داشت حالا این اسمبلر رو با چی می نوشتن ؟؟!؟
خوب پردازنده كه هگز نميفهمه فقط صفر و يك! هگزادسيمال براي انسان قابل درك هست اگرنه بايد كلي صفر و يك ميزاشتنخوب حالا چیزی که من میخوام بدونم این هست که آیا میشه به صورت مستقیم و با همین OPCode ها یه پردازنده دستور داد؟
در كل حرف شما درسته اما بايد معادل باينري رو روي حافظه قرار بديد و بعد بتونيد اجراش كنيد
مثال:
ميبينيد دستورات اسمبلي ما توسط اسمبلر تبديل به كد ماشين شده اما نمايش اون به صورت هگزادسيمال هست فقط براي درك بهتر انسان بدليل نزديكي به دسيمال حتما ميدونيد كه كامپيوتر هاي ما دودويي هستند يعني ميتونه ولتاژ در يك بازه 1 معني شه و در بازه اي صفر ، تا بشه اعمال منطقي رو انجام داد.
SOURCE:
mov ax,10
mov bx,20
add ax,bx
MACHINE CODE:
B8 0A 00
BB 14 00
03 C3
من يك لينك در مورد تاريخچه كامپيوتر گذاشتم اگر نگاه ميكردين خوب بود چون ميديدن قبل از اينكه اسمبلي هم باشهاین ادیتور و لینکر و .... رو باید با چه زبانی بنویسم ؟؟ خود اسمبلی؟؟
بیشتر هدف من این هست که بدونم اون زمان چه جوری یه اسمبلر رو مینوشتن
قدیما که زبان سطح بالا نبود اسمبلی بود که خودش نیاز با اسمبلر داشت حالا این اسمبلر رو با چی می نوشتن ؟؟!؟
اولين كامپيوتر ها مستقيما بايد دستور ماشين برنامه ميدادي صفر و يك اونم از طريق پانچ هاي ورودي يعني سخت افزاري طراحي شده بوده
و با اون ورودي ميدادن به كامپيوتر ها كه محدوديت چند صد دستور داشت ، همزمان با پيشرفت هاي كامپيوتر در حوزه سخت افزار و توانايي ذخيره داده روي حافظه هاي مانا و توانايي پردازنده ها در دسترسي به حافظه و نياز مبرم به برنامه هاي بيشتر و با كارايي بالاتر بود كه نوشتن برنامه با زبان ماشين بسيار كند پيش ميرفت و اشكال زدايي مشكل ديگري بود در كل برنامه نويسي به اين زبان كار هركسي نيست،كه اسمبلي يا كد سمبليك به ميدون اومد كه نيازي به حفظ دستور و اشتباه رو كم كنه مثلا شما يك صفرو يك رو اشتباه ميزدي برنامت خراب ميشد و ديباگ كردنش كاري مشكل بود و از طرفي شما معادل دستورات پردازنده رو حفظ ميكردين كه بسيار ساده هست،زبان اسمبلي يك كد سمبليك و معادل يك دستور ماشين هست كه اسمبلر كد اسمبلي رو تبديل به زبان ماشين ميكنه
در ارتباط يا اون لينكي كه اشاره داشتين opcode ها دستوراتي هست كه پردازنده ميشناسه و براي انتقال اطلاعات،محاسبات و كنترل و تصميم گيري هست حالا اين دستورات بعضي بدون عملوند مثل cli,cld,aaa و... بعضي با يك عملوند مثل call,inc,jl,... و بعضي با دو عملوند هستند مثل mov,lahf,cmp و ...
پس بايد به طريقي برنامه رو روي رم قرار داد و بعد ip,cs به اول برنامه اشاره كنه و اجراش كنه همين
براي اديتور هم نمي گم سي يا زبان ديگه چون تا اين قسمتو درك نكنيد نمي تونيد با اسمبلي كامپايلر بنويسيد :d
پس همون اسمبلي كه بشه يك اسمبلر نوشت و اديتور و بوت لود و كرنلي ساده (براي بار كردن برنامه هاي شما در رم و تنظيم ثباتها) همه با اسمبلي باشه بدليل ذكر شده بالا
اگر هنوزم ميگين چطور اسمبلر نوشتن اونو با زبان ماشينن نوشتن مثل برنامه هاي معمولي اگر به سورسي كه بالا گذاشتم و تبديل به زبان ماشين كردم نگاه كنيد ميبينيد اون زمان بايد به اون ترتيب برنامه اي مي نوشتن كه
كد هاي شما رو بگيره و تبديل به معادل زبان ماشين كنه همين
موفق باشي
با سلام و تشکر از شما
دوست عزیز بنده تاریچه رو خوندم
کاری به گذشته ندارم
می دونم باینری چیه و هگزدسیمال به چه در می خوره!
سوال بنده این هست :"آیا میشه در کامپیوتر هایی {مثل 386} به طور مستیم و بدون اسمبلر و با استفاده از هون ارقام هگز دسیمال برنامه داد؟؟"
من قرار نیست برنامه این طوری بنویسم
این کار صرفا جنبه آموزشی داره و می خوتم بدونم آگه میشه به چه صورت هست
بله، ارقام را در بوت سکتور ثبت کنید، کامپیوتر که ریست شد، کد شما اجرا میشه، البته به شرطی که ارقامی که وارد کردید، برای CPU مفهوم داشته باشه.سوال بنده این هست :"آیا میشه در کامپیوتر هایی {مثل 386} به طور مستیم و بدون اسمبلر و با استفاده از هون ارقام هگز دسیمال برنامه داد؟؟"
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
من كه نمونه زبان ماشين و كد اسمبلي هم گذاشتم و گفتم ميشه(يعني همون كد رو روي حافظه بزارين همين)با سلام و تشکر از شما
دوست عزیز بنده تاریچه رو خوندم
کاری به گذشته ندارم
می دونم باینری چیه و هگزدسیمال به چه در می خوره!
سوال بنده این هست :"آیا میشه در کامپیوتر هایی {مثل 386} به طور مستیم و بدون اسمبلر و با استفاده از هون ارقام هگز دسیمال برنامه داد؟؟"
من قرار نیست برنامه این طوری بنویسم
این کار صرفا جنبه آموزشی داره و می خوتم بدونم آگه میشه به چه صورت هست
اما براي اجرا شدن بايد جزئيات ديگه هم ديد
1-با فرض اينكه شما اين كارو انجام دادين و مستقيما برنامه به زبان ماشين نوشتي و روي حافظه ذخيره كردين(مثلا فلاپي ديسك)
2-در مد واقعي شما بايد خودتون برنامه رو آدرس دهي كنيد و به طريقي برنامه رو روي حافظه رم قرار بدين و كارهايي كه قبلا گفتم انجام بدين بعد پردازنده خودش اجراش ميكنه،براي شروع آسونترين و بهترين راه همون بوت لودر با فلاپي ديسك هست كه خودكار اطلاعات اولين سكتور رو ميخونه و در حافظه قرار ميده
با سلام
هومن طور که گفتم این کار صرفا جنبه آموزشی داره !
خوب ببنید من می خوام عملی کار کنم!
آقای کشاورز میشه دقیقا بگین چه جوری؟؟
مثلا حالا من سیستم رو روسن کردم هیچی هم روش نصب نیست حالا چه جوری ارقام رو در بوت سکتور ثبت کنم؟!؟؟!؟!
اگر مشکل شما به شکلی که طی چنید پست متوالی مطرح کردید باشه اصلا امکان نداره مگر اینکه case رو باز کرده باشید و با 8 یا 16 سیم که هر کدوم 5 ولت اختلاف پتانسیل داشته باشن پینهای اتصال به cpu رو تحت تاثیر قرار بدید تا شروع به حرکت کنه که این هم از محالات و غیر منطقی هست.مثلا حالا من سیستم رو روسن کردم هیچی هم روش نصب نیست حالا چه جوری ارقام رو در بوت سکتور ثبت کنم؟!؟؟!؟!
در کل خواسته شما مثل این میماند که بگید یک ماشین رو روشن کنید در صورتی که اصلا بنزین نداره یا اینکه بگید میخواهید به کسی بگید چیزی بنویسه در صورتی که اصلا دست و پا نداره.
حالا شما وقتی کامپیوتر رو روشن کنید باید ابزاری برای ورود دستوراتی که شما میخواهید انجام بدید وجود داشته باشه در صورتی که در حالت فوق همه ابزارها مانند کیبورد کار نمیکنن فقط مانیتور هست و شما.
بد نيست يك نگاهي به معماري سيستم بكنيد
سيستم كامپيوتري
1-واحد ورودي خروجي
2-پردازنده
3-حافظه
بعد از روشن شدن و پايان كار بايوس تازه بدنبال سكتور صفر براي بوت ميگرده كه شما مشخص ميكنيد كدام حافظه ثانويه باشه مثلا فلاپي ديسك،سي دي رام،هارد يا فلش مموري، پس تا اطلاعات به شكل سخت افزاري يا نرم افزاري به عنوان ورودي بر روي يك حافظه ثانويه نباشه اين كار امكان پذير نيست چرا كه بايوس به اين شكل برنامه ريزي شده اينكه بشه اين امكان رو اضافه كرد با برنامه نويسي رام ميشه كه بعد از پايان كار بايوس ،برنامه اي در رام خودش عهده دار اين بشه برنامه از شما بگيره روي حافظه بزاره
ندانستیم این ایرادی که از مطالب ما برداشت کردید از کجاش بود ولییعنی برای اینتل 4004 هم همین کار رو کردن!
منظور ما تواناییهای شما بود که قصد دارید که این کار رو انجام بدید در صورتی که میتونید یک تراشه بسازید که ادامه بوت سیستم رو بعد از بایوس و اتمام کارش انجام بده بسم الله.
در ضمن اون فروم و تاپیکهای ارسالی برای ایجاد بوت سکتور و راه اندازی سیستم بدون سیستم عامل و با استفاده از تواناییهای بایوس هست که داخل مادربود جاری قرار دارد.
با سلام
آقای خاک پور کجا از مطلب شما ایراد گرفتم؟!؟
لینک اول بلهدر ضمن اون فروم و تاپیکهای ارسالی برای ایجاد بوت سکتور و راه اندازی سیستم بدون سیستم عامل و با استفاده از تواناییهای بایوس هست که داخل مادربود جاری قرار دارد.
اما لینک دوم توضیح داده مثل این که همه چیز مربوط می شه به یه فرایند نه نام bootstraping
توی همون لینک اول یه بنده خدایی حرف جالبی زده
برنامه رو روی کاغذ نوشته بعد OPcode ها رو توی EPROM گذاشتهI don't really know the answer to that.
But I first wrote one for the Z80 by writing it on paper in assembly then hunting
up the OP codes and poking them into a E-Prom.
حالا چه جوری نمی دونم
ولی آقای خاکپور این بنده خدا فکر نکنم در کیس رو باز کرده باشه!
قبلا عکسی هایی دیده بودم که برنامه رو روی کاغذ می نویسن و بعد وارد سیستم می کننش!
مثل این عکس که مربوط میشه به برنامه اولین کامپیوتر وزنیاک (مدیر اپل هست)
آخرین ویرایش به وسیله jeson_park : شنبه 07 اسفند 1389 در 08:36 صبح دلیل: عکس ضمیمه
ببینید مطالبی که شما در حالت نرم افزاری با کامپیوتر کنونی که همین حالا من یا شما ازش استفاده میکنیم با یک مادر برد به همراه پردازدنده صنعتی مثل z80 فرق داره برای z80 این امکان وجود داره که شما بتونید داخل ram استاتیک مانند eprom برنامه رو دانلود کنید و بعد بسپارید دست z80 تا بعد از روشن شدن power این پردازنده اجرا بشه ولی قطعا شما نیتونید بدون eproam بصورت دستی opcode ها رو به پردازنده بدید تا اجرا بشه .(میتونید؟)این بنده خدا فکر نکنم در کیس رو باز کرده باشه!
قبلا عکسی هایی دیده بودم که برنامه رو روی کاغذ می نویسن و بعد وارد سیستم می کننش!
مثل این عکس که مربوط میشه به برنامه اولین کامپیوتر وزنیاک (مدیر اپل هست)
بحث برنامه نویسی با پردازنده های صنعتی نیاز به جزئیات ریزپردازنده های مربوطه داره و لزما دانستن کاربرد پردازنده مانند z80 دلیل نمیشه که بتوان از پردازنده های دیگر هم سر در آورد یا به اون شکلی عمل کرد که با پردازنده های قبلی این کار رو انجام داده باشیم.
البته میتوانید سوالتان را داخل تالار embedded که مربوط به این کارهاست بپرسید قطعا زودتر به نتیجه میرسید..