نصب و راه اندازی KTechLab برای پروژه های الکترونیک

پروژه های الکترونیک، مثل طراحی مدار، مدارهای منطقی، الکترونیک دیجیتال و … ، همه معمولا توسط نرم افزار Proteus و در سیستم عامل ویندوز انجام میشن. پروتئوس نرم افزار کامل و جامعیه و همه چی هم داره. شما میتونید به سادگی یک پروژه میکروکنترلری در پروتئوس پیاده سازی و اجرا کنید و مطمئن باشید نتیجه‌ای که میگیرید، تا حد بسیار زیاد و قابل قبولی، شبیه نتیجه‌ایه که در پیاده‌سازی حقیقی از پروژه خواهید داشت.

اما مشکلی که اکثر کاربران لینوکس دارند، اینه که پروتئوس نسخه لینوکس نداره. اجرای اون روی واین هم زیاد چنگی به دل نمیزنه و گذشته از اون، همه هم سیستمی ندارند که ماشین مجازی رو تحمل و ساپورت کنه، پس نتیجتا اکثر افرادی که پروژه های الکترونیک انجام میدن، یک سیستم عامل ویندوز هم کنار لینوکسشون دارند. امروز تصمیم داشتم که یک پروژه‌ای رو آزمایش کنم و میخواستم ببینم که روی اوبونتو، چه ابزاری نصب دارم. طبق معمول به دنبال Logisim گشتم ولی فهمیدم که هنوز نسخه جدیدش رو دانلود نکردم. پس، گفتم بهتره سرچ کنم و به نتیجه مطلوب برسم.

در نتیجه جست و جو، به KTechLab رسیدم. گرچه اسمش برام آشنا بود ولی هیچوقت ازش استفاده نکرده بودم. گفتم که بهتره الان به دنبالش باشم و ازش کمی (حتی شده آزمایشی) استفاده کنم. شاید، نتیجه‌ای که خواستم رو گرفتم. خب، خوشبختانه این نرم افزار اون چیزایی که میخواستم رو داشت. این هم تصویری از محیطش :

و الان یک سوال پیش میاد :

چطور نصبش کنیم؟

من اسمش رو جست و جو کردم و به وبسایتش رسیدم (لینک) و بعد سورس کدش رو دانلود کردم. اما فهمیدم که برای نصبش نیاز به cmake دارم، پس اون رو نصب کردم :


کد   
sudo apt install cmake

و بعد از نصب این، کمی گشتم تا ببینم چه پیش‌نیازهایی داره، سپس اونا رو نصب کردم :


کد   
sudo apt install git kdelibs5-dev kdevplatform-dev qt4-dev-tools cmake libglib2.0-dev

بعد از نصب، فایل فشرده حاوی سورس کد رو از حالت فشرده درآوردم، درون پوشه سورس یک پوشه به اسم build ساختم و به ترتیب این سه دستور رو زدم :


کد   
cmake ..
make
sudo make install

و در آخر، دیدم که KTechLab به لیست نرم افزارهای نصب شده اضافه شده.

در آینده، در مورد این که این نرم افزار چطوره و کجاها به درد میخوره، بیشتر خواهم نوشت. امیدوارم این پست مفید واقع شده باشه، موفق باشید 🙂

Share

کد هایم را دزدیده بود، آقای قاضی…!

شخصی به ایران آمده بود، عده ای از جوانان استارتاپی؛ او را به کشور خودشان دعوت کرده بودند. طرف از برنامه نویسان و هکرهایی بود که سرش به تنش می ارزید و در هر زمینه ای که فکرش را بکنید؛ حرفی برای گفتن داشت. در نمایشگاه، با حال خوش غرفه ها را یکی پس از دیگری میدید و با اشتیاق از آنها در مورد کارشان، هدفشان و روششان سوال میکرد! همه چیز خوب بود تا این که پسربچه ای؛ یک کاغذ به دستش داد. او کاغذ را خواند؛ برایش جالب شد. لینکی که در آن کاغذ به آن اشاره شده بود را باز کرد؛ کمی با دموی محصول کار کرد و ناگهان، مشتی بر صورت پسربچه کوبید. او را به دادگاه بردند، قاضی از او پرسید «چرا ایشان را مضروب کردی؟» شخص خارجی جواب داد «کدهایم را دزدیده بود آقای قاضی!».

services_operating_procedures

چیزی که در شروع پست خوندید، یک داستان بود. از شخصی که احتمالا به ایران دعوت میشه و می بینه که محصول خودش، داره به عنوان محصول دانش بنیان و ملی و … در یک استارتاپ به مردم فروخته میشه. این چیزی هست که قراره در این پست در موردش به طور مفصل توضیح بدم. اصلا میخوایم ببینیم این کانسپت دزدی چی هست و چطور داره مثل یک غده سرطانی؛ بازار نرم افزار رو میخوره.

حدود سال ۲۰۱۰ بود که من یک iPod Touch خریدم و همون موقع ها، وارد وبسایت های مرتبط با محصولات Apple شدم. دوستان زیادی اونجا پیدا کردم و با خیلی از اون دوستان، دوستی من تا الان ادامه داشته. ولی خب چیزهایی هم دیدم که واقعا باعث شاخ در آوردن من شد. اگر اشتباه نکنم حدودای سال ۲۰۱۲ بود که iPhone 4S معرفی شد و چیزی که این گوشی رو متمایز میکرد؛ دستیار صوتی Siri بود که میتونست جوابهای دقیق و درستی بده. همون موقع ها، کاربران زیادی بر آن شدن که این اپ رو برای نسخه های قدیمی تر iOS هم پورت کنن. یک روزی از همین روزها یکی از کاربران ایرانی مدعی شد که این کار رو کرده (لینک) و خب مدتها با این حرف داشت برای خودش ارزش و اعتبار میخرید و حتی لینک Donation هم گذاشته بود که یک شب، یک لینکی در فرومی منتشر شد که بله، این آقا دزدی کرده! کار کار خودش نبوده و به اسم خودش در کرده. این اولین بار بود که با «دزدی» اثر نرم افزاری روبرو شدم. اون موقع به شدت ناراحت شدم؛ ناراحتی من از اون هکری که واقعا سیری رو تونسته بود پورت کنه شاید حتی بیشتر شد.

حالا در همون سالها، من پروژه جبیر رو راه اندازی کردم. پروژه ای که علیرغم خیلی از حواشی ای که داشت؛ کلی هم دوست جدید، کلی تجربه و کلی بار علمی و عملی برای من داشت. جبیر چی بود؟ اوایل یک اوبونتوی کاستوم شده (و صد البته Rebrand شده) و بعد ها هم یک FreeBSD کاستوم شده و Rebrand شده. این پروژه رو من در یکی دوتا از فروم های اپلی هم معرفی کردم و خب به «دزدی» و «جا زدن کار دیگران به اسم خود» محکوم شدم. در صورتی که لایسنس هایی که این دو نرم افزار، یعنی اوبونتو و FreeBSD بر اساس اون منتشر میشن؛ دقیقا به من این اجازه رو میدن که rebrand کنم و به عنوان یک محصول جدید به بازار ارائه بدم. در صورتی که درمورد اون Siri پورت شده (و خیلی از کارهایی که تو کامیونیتی فارسی اپل رخ میده) چنین چیزی صدق نمیکنه.

33-122-598-08البته هنوز این اتفاقات رو نتونسته بودم هضم کنم؛ که فهمیدم گروه «آشیانه» معروف هم چنین کاری میکنه، لینوکس رو میکنه توی جعبه و به اسم فایروال میفروشه. این کمی برام منطقی تر به نظر رسید؛ حداقل کمی وقت میذاشتن و یه حداقل پیکربندی ای ارائه میدادن. ولی باز هم داشتند خلاف لایسنس (GPL ) پیش میرفتند، سورس کد و خیلی چیزهای دیگه رو از دید کاربر مخفی میکردند. همین باعث شد که بیش از پیش سعی کنم انسان بهتری حداقل در این آشفته بازار نرم افزار در ایران باشم. حداقل دزدی نکنم یا اگر از کار شخص دیگری استفاده کردم، بهش کردیت بدم.

این موارد خیلی وقت بود که دیده نمیشد، یه جورایی میشه گفت خیلی وقت بود که از سیستم های کثیف دور بودم؛ تا این که چندروزه سیستم کثیف به سراغ ما اومده! شخصی مدعی بود که اولین (این لفظ هم خیلی وقت بود نشنیده بودم) سیستم یکپارچه مجازی سازی و کنترل سرورهای مجازی رو ایجاد کرده (لینک وبسایت ایرانی) و خب مدتهای زیادی با تبلیغاتش ما رو اذیت کرد، امروز دوستی به من لینکی داد که نشون میده حتی این هم دزدی از کار یک خارجی هست (لینک). واقعا نمیدونم چرا عادت نداریم وقتی ادعا میکنیم کاری رو خودمون انجام دادیم، واقعا خودمون انجامش داده باشیم؟! و یا این که چرا انقدر راحت حاصل زحمات یک نفر یا گروه دیگه رو مصادره میکنیم؟

بعنوان پاراگراف آخر، دوست دارم که از همه کسانی که این پست رو میخونن خواهش کنم که این سیستم رو ادامه ندن (اگر تا الان به این سیستم مشغول بودند) یا اگر هم قصد کاری دارند؛ اگر از کد، طرح یا ایده افراد دیگه دارند استفاده میکنند کردیت رو بدن. واقعا در اخلاق یک انسان نمیگنجه که بخواد با زحمات دیگری، برای خودش تولید ثروت کنه.

Share

میکروکنترلرها، طراحی و پیاده سازی – ریلیز شد!

قریب به دو سال هست که دارم روی معماری کامپیوتر و پیاده سازی یک کامپیوتر ساده به شکل های مختلف، تحقیق میکنم. تابستان پارسال تصمیم گرفتم که تجربیاتم رو قدم به قدم مکتوب کنم و با دیگران به اشتراک بذارم. همینطور که مطالعه میکردم، شبیه سازی میکردم و به نتیجه ای می‌رسیدم، کم کم یادداشت میکردم و در زمان هایی که پیش می اومد، با یک قالب کلی و به زبان انگلیسی، به صورت سازمان یافته و دسته‌بندی شده درشون می‌آوردم.

سرفصل های کتاب :

فصل اول : میکروکنترل چیست؟
در این فصل کلیت یک میکروکنترلر و این که چه بخش هایی درونش به کار رفته، توضیح داده شده.

فصل دوم : چطور با کامپیوتر حرف بزنیم
در این بخش در مورد زبان های برنامه نویسی و مبناهای عددی و فضای ذخیره سازی دیتا صحبت شده.

فصل سوم : عملیات محاسباتی
در این فصل در مورد انجام عملیات ریاضی در مبنای دو صحبت شده.

فصل چهارم : عملیات منطقی
در این فصل در مورد جبر بول و نحوه انجام عملیات بولین صحبت شده.

فصل پنجم : مدارهای منطقی
اینجا، اومدیم و یه سری گیت های پایه رو بررسی کردیم. همینطور در مورد گیت های مادر صحبت کردیم.

فصل ششم : مدارهای ترکیبی
در این فصل، از ترکیب مدارهای فصل پنجم منطق های جدید ساختیم و چیزای جدید تر پیاده کردیم

فصل هفتم : نخستین کامپیوتر
در این فصل، هف اددر و فول اددر ساختیم، یه ماشین جمع ساده درست کردیم باهاش.

فصل هشتم : حافظه
اینجا رسیدیم به مدارهای ترتیبی و حافظه ای، در اینجا لچ S-R رو ساختیم، در مورد لچ Active High و Active Low توضیح دادیم.

فصل نهم : رجیستر فایل
اینجا چندین رجیستر رو چیدیم کنار هم و یک رجیستر فایل طراحی کردیم.

فصل دهم : معماری کامپیوتر
اینجا با کلیت معماری کامپیوتر و مفاهیم تئوری قضیه آشنا شدیم. چیزایی که لازمه برای یادگیری معماری بلد بود رو آوردیم اینجا.

فصل یازدهم : طراحی، ماشین جمع کننده پیشرفته
اینجا به کامپیوتر ساده فصل هفتم، که فقط جمع میکرد رجیستر و بلاک حافظه ای اضافه میکنیم.

فصل دوازدهم : کامپیوتر (تئوری)
در اینجا به صورت تئوری و روی کاغذ کامپیوتر اصل کاری طراحی شده. تصمیم گیری شده که چه کارهایی انجام بده و «سازمان کامپیوتر» در این نقطه مشخص شده.

فصل سیزدهم : واحد محاسبه و منطق
در این فصل، واحد محاسبه و منطقی برای کامپیوتر خودمون طراحی کردیم، و در مورد Instruction Code ها تصمیم گیری کردیم.

فصل چهاردهم : ساختار برنامه
اینجا برای برنامه پذیر شدن کامپیوتر خودمون تصمیم گیری کردیم و ساختار برنامه ها در زبان ماشین رو تعیین کردیم.

فصل پانزدهم : میکروکنترلر
اینجا بخش های لازم رو کنار هم چیدیم و در نهایت رسیدیم به یه میکروکنترلر فوق العاده ساده.

فصل شانزدهم : برنامه نویسی و سیستم عامل
در اینجا نگاه اجمالی داشتیم به نوشتن برنامه و سیستم عامل برای کامپیوتر خودمون.

فصل هفدهم : نیمه تاریک ماه
در این قسمت، وارد مباحث دیجیتالی و پیاده سازی فیزیکی کامپیوتر شدیم. چیزایی که برای دانشجوهای سخت افزار آشناس ولی نرم افزاری ها یکم در شناختش مشکل دارن. به همین خاطر هم اسمش شده این.

برای دانلود PDF هم میتونید از این لینک استفاده کنید.

Share

پیشنهادهای شما برای پیاده سازی یک ایده سخت افزاری

با سلام. خیلی وقت بود وبلاگ نویسی نکرده بودم و حالا پس از مدتها اومدم که بنویسم! شاید بگید الان که فرجه امتحانات هست و بهتره برم به زندگیم برسم، ولی خب توی همین فرجه هم وقت آزاد فراوان هست.

بگذریم، جادی چند وقت پیش در مورد ایده ای که بشه ازش استارتاپ ساخت صحبت کرد. البته ایده و همچنین پیاده سازی که بعد ها به کار گرفت یا همون استارتاپ بستون، کاملا نرم افزاری و بر پایه وب پیش رفت. حالا چرا من اینجا دارم این مطلب رو مینویسم؟

توی پست های جادی چند مساله جالب به چشم میخوره، اولیش اینه «چی نداریم؟! آیا وسیله ای هست اون کار رو انجام بده؟ اگر نیست، خودم میسازمش». و دومین نکته هم «پیاده سازی ایده و تبدیل کردنش به استارتاپ و حتی تا حدی به پول رسوندنش، اونقدر ها هم که فکر میکنیم سخت نیست». و حتی شاید سومیش این باشه که «معطل نکن، شروع کن به پیاده سازی». خب، حالا بیایم ببینم که من میخوام چی کار کنم؟ جادی به من ایده داد که ایده جمع کنم برای یک محصول سخت افزاری! اما محصولی که بشه به در یک مدت زمان نه چندان کوتاهی پیاده سازیش کرد و بعد ازش به پول رسید (بر خلاف StrongPC که بیشتر فاز تحقیقی داره).

ایده هایی که در ذهن خودم هستن اینان :

  • پیاده سازی یه دستگاه ساده با استفاده از میکروکنترلرهایی که توی بازار موجودند، و روبرو شدن با چالش هایی مثل مطالعه معماری، برنامه نویسی برای ریزپردازنده، طراحی مدارهای واسط و … .
  • پیاده سازی یه دستگاه ساده با استفاده از آردوینو و ماژول هاش
  • پیاده سازی یک دستگاه ساده IoT طور با استفاده از Cubieboard یا رزبری
  • و …

حالا از شماها که این پست رو میخونید، میخوام در این باره کمک بدید. اول این که «دستگاه ساده» چی میتونه باشه (مثلا ساعت؟! تقویم رومیزی؟ سیستم اطفاء حریق و …) و دوم این که با چی و چطوری پیاده سازی بشه. بعد از این که ایده مشخص بشه، مرحله مرحله پیاده سازیش در همین وبلاگ، گزارش میشه.

Share

پروژه گاه‌شمار

خب، من در گروه های تلگرامی این پیام رو میذاشتم :

دوستی مدتی پیش (که خیلی هم ازش نگذشته ) یک چالش رو بعنوان تمرین برنامه نویسی پیشنهاد داد، و اون هم نوشتن یک API بود برای دریافت ساعت و تاریخ.
من هم وارد این چالش شدم و یک API با روبی و سیناترا نوشتم، روی گیتهاب هم قرارش دادم ولی الان دپلویش کردم که اگر شما هم خواستید بتونید ازش استفاده کنید :
https://gahshomar-api.herokuapp.com/

خب، این هم پروژه ای بود که محسن بعنوان تمرین خواست که ما یه API بنویسیم، من هم این رو با Sinatra نوشتم و الان دپلوی شده و در دسترسه! امیدوارم ازش لذت ببرید 🙂

Share

بررسی معماری MIPS

خب، همونطور که داریم سلسله آموزش های ساخت کامپیوتر ساده در Logisim رو دنبال میکنیم، گفتم این وسط یه توضیحی هم در مورد معماری MIPS داشته باشیم. در واقع MIPS یکی از ساده ترین و کم دستور ترین معماری های ممکنه، و البته پیاده سازی دوبارش در نرم افزارهایی مثل Logisim بسیار ساده. میشه.

این یک ALU بسیار ساده بر اساس میپس هست (که البته یک بیتی پیاده شده) :

MIPS

در اینجا، برای تفریق مدار جداگانه ای در نظر نگرفته، بلکه مقدار B رو با یک، XOR کرده (هوشمندانه به نظر میرسه، نه؟) و از less هم برای مقایسه، از یک مالتی پلکسر ۸ به ۱ هم برای انتخاب عملیات استفاده شده (به جای استفاده از دیکدر و گیت های AND )، در کل میشه یک ساختار خیلی قشنگ براش قائل شد، البته بهتر از این هم میشد الگوریتم هایی مثل تفریق رو هم پیاده کرد (مثلا با استفاده از یه mux میشد انتخاب کرد که خود B نیازه یا نقیضش؟ و البته نیاز بود که cin هم حتما روشن شه که مکمل ۲ گرفته شه).

زبان ماشین این ALU هم خیلی سادس، به ازای مقدار ۰ ، عملیات AND ، به ازای ۱ عملیات OR ، به ازای ۲ عملیات XOR ، به ازای ۳ عملیات NOR ، به ازای ۴ عملیات ADD و به ازای ۵ عملیات مقایسه رو انجام میده (البته برای مقایسه هم میشه از XNOR استفاده کرد و تساوی رو سنجید).

امیدوارم که این مطلب به دردتون خورده باشه، همچنین میتونید این معماری رو پیاده کنید و نتیجش رو حتی روی برد بُرد بیارید 🙂 .

موفق باشید.

Share

ساخت یک کامپیوتر ساده در Logisim – قسمت دوم (مجموعه دستور العمل ها)

در قسمت قبلی، چالش رو مطرح کردیم که کامپیوتر هشت بیتی خودمون رو بسازیم. ببینیم چه مداراتی نیاز داریم؟!

خب ما دو ورودی هشت بیتی A و B رو خواهیم داشت، پس به این موارد نیاز داریم :

  1. مداری برای NOT کردن ورودی A
  2. مداری برای NOT کردن ورودی B
  3. مداری برای AND کردن هر دو ورودی
  4. مداری برای OR کردن هر دو ورودی
  5. مداری برای جمع کردن دو ورودی
  6. مداری برای تفریق دو ورودی

خب، چون ما از یک قطعه به اسم «دیکدر» برای انتخاب دستورات استفاده میکنیم، و دیکدرها هم یک ورودی با سایز n میگیرن، و خروجی اونها «دو به توان n» هست، و ما اینجا «مجموعه دستور العمل» یا Instruction Set مون دارای ۶ دستور هست، بهینه ترین حالت استفاده از یک دیکدر ۳ به ۸ هست. خب، با این حساب، باید کد عملیات ها یا Operation Code ها رو به این شکل تعریف کنیم :

Operation Code
NOT A 000
NOT B 001
AND A, B 010
OR A, B 011
ADD A , B 100
SUB A, B 101

خب الان ما میدونیم که کامپیوتر محترم باید چه دستوراتی رو اچرا کنه. در واقع، وقتی میگیم ۰ ، کامپیوتر اون رو به دیکدر میده و میفهمه که باید نقیض A رو بهمون بده. وقتی ۱ رو فراخوانی میکنیم، باید نقیض B بهمون داده شه، وقتی میگیم ۵ در واقع مقدار B رو از A کم میکنیم و … . با توجه به این که الان، ما یک دیکدر ۳ به ۸ در مدار «واحد محاسبه و منطق» داریم، میتونیم ۴ دستور العمل دیگه هم بهش اضافه کنیم (با شما 🙂 ). در قسمت بعدی این آموزش، میرسیم به این که ورودی ها و خروجی ها رو چطوری مدیریت کنیم. بعدش هم در مورد ساختار کلی ALU صحبت میشه و بعد از چند پست دیگه، یک ALU کامل با هم خواهیم داشت. پس فعلا در مورد بلاهایی که سر ۸ بیت ورودی میشه آورد فکر کنید و شاد باشید 🙂

Share

ساخت یک کامپیوتر ساده در Logisim – قسمت اول

بالاخره یه سری پست جدید تصمیم گرفتم بنویسم، و خب این سری قراره که مرحله به مرحله پیش بریم تا یک کامپیوتر ساده بسازیم. تنها دانشی که شما برای این سری از پست ها نیاز دارید :

۱. دونستن کمی مدار منطقی (که قبلا در وبلاگ راجع بهش حسابی صحبت کردم)

۲. بلد بودن کار با Logisim (که میشه گفت مثل نقاشی کشیدن میمونه و همین پست ها رو دنبال کنید یاد میگیرید.).

راه اندازی محیط کار

برای این که بتونیم مداراتمون رو طراحی و آزمایش کنیم، نیاز داریم که نرم افزار Logisim رو داشته باشیم. یه نسخه خوب از این نرم افزار به اسم Logisim Evolution طراحی شده که کار ما رو به شدت ساده تر کرده، خروجی گرفتن ازش بی دردسر تره، و همچنین مدارات و ویژگی هاشون دقیق تر طراحی شده. برای دانلود و نصب و روش راه اندازیش میتونید به اینجا برید. فقط هم نیازه که جاوا روی سیستمتون نصب باشه.

چالش های پیش رو

خب، برای این که بیایم یک کامپیوتر بسیار ساده طراحی کنیم نیاز داریم که یک سری سوالات از خودمون بپرسیم و جواب بدیمشون، اینطوری راحت تر میتونیم مدارات مورد نیاز رو طراحی کنیم و از پیچیدگی محصول نهایی جلوگیری کنیم.

کامپیوتر ما باید چه عملیاتی انجام بده؟

یک کامپیوتر ساده که بتونه به راحتی قابل درک هم باشه، هم باید Word Size کوچیکی داشته باشه (توی آموزش ها با ۸ بیت میریم جلو) و هم Instruction Setش باید کوچیک باشه. یک سری دستور پایه هست که هر کامپیوتری میتونه انجامش بده، ما کامپیوترمون رو اینطور طراحی مکنیم که AND, OR, NOT رو بتونه انجام بده، علاوه بر اون بتونه جمع و تفریق هم بکنه. پس باید :

  1. مداری طراحی کنیم که بتونه ۸ بیت رو NOT کنه
  2. مداری طراحی کنیم که بتونه ۸ بیت رو OR کنه
  3. مداری طراحی کنیم که بتونه ۸ بیت رو AND کنه
  4. و مدار(ها)ی طراحی کنیم که بتونن ۸ بیت رو جمع و تفریق کنن.

حالا به سادگی میتونیم بفهمیم که چی میخوایم. البته این صرفا واحد محاسبه و منطق هست، ما باید یک واحد حافظه، یک واحد کنترل و چند واحد حافظه موقتی و کوچک هم طراحی کنیم که با چسبوندنشون به هم، بتونیم به کامپیوتر کامل برسیم.

در پست های بعدی، زیرمدارهای کامپیوتر خودمون رو میسازیم. در این پست صرفا با کامپیوتر ساده و کوچیکمون آشنا شدیم 🙂

Share

نوشتن اسمبلی ۳۲ بیت

در گذشته، پست هایی که در مورد اسمبلی قرار دادم، همه در مورد اسمبلی ۱۶ بیت بودن اما حالا میخوایم بریم سراغ اسمبلی ۳۲ بیت. خب فرق ۱۶ با ۳۲ بیت در چیه؟!

اولین نکته، سایز ثبات هاست! در ۱۶ بیت در هر ثبات میتونستیم حداکثر یک مقدار ۴ رقمی هگزادسیمال ذخیره کنیم ولی در ۳۲ بیت این مقدار به ۸ رقم میرسه! حالا خیلی مسائل دیگه مثل دیتاباس و کنترل باس و … که بماند (چون اینجا داریم برنامه نویسی میکنیم و بیشتر با ثبات ها کار داریم).

اینجا، قضیه یه فرقای کوچولویی داره، مثلا اسمبلر nasm قراره استفاده بشه (گرچه قبلا در ساخت اون سیستم عامل کوچک ازش استفاده کردیم) و همچنین وقفه ها و system call هایی که استفاده میکنیم شماره و مقدارشون و مکانشون متفاوته.

بیاید این برنامه رو در نظر بگیریم :

کد   
section .text
	global_start
 
_start:
	mov edx, len
	mov ecx, msg
	mov eax, 0x04
	int 0x80
 
	mov eax, 0x01
	int 0x80
 
section .data
	msg db 'Hello, World!', 0xa
	len equ $ - msg

 

خب در بخش اول، تابعی که نیاز داریم فراخوانی کنیم رو تعریف کردیم. بعدش اومدیم start رو نوشتیم. حالا بیاید این بخش رو بررسی کنیم :

کد   
mov edx, len
mov ecx, msg
mov eax, 0x04
int 0x80

اینجا، مقدار طول رشته ای که خواستیم چاپ کنیم رو توی EDX یا رجیستر داده قرار دادیم. بعدش اومدیم پیامی که میخوایم چاپ بشه رو قرار دادیم درو نECX .

بعدش سیستم کال ۴ یا sys_write رو توی eax قرار دادیم و وقفه ۸۰ رو صدا زدیم. حالا وقفه ۸۰ با مقدار ۴ که توی eax ذخیره شده، میگرده دنبال رشته ای که توی ecx هست و بعدش چاپش میکنه.

حالا بخش دوم کد سگمنت رو بررسی میکنیم :

کد   
mov eax, 0x01
int 0x80

اینجا هم مقدار ۰۱ یا sys_exit رو وارد eax کردیم، تا برنامه پس از اجرا، خارج شه. بعد از این هم باز وقفه ۸۰ رو صدا زدیم.

بخش دیتا هم، مثل همه برنامه های قبلی، تمام داده های مورد نیاز رو با Directive ها تعریف کردیم که بتونیم به راحتی توی کد سگمنت ازشون استفاده کنیم و چون قبلا توضیح داده شده، دیگه دوباره کاری نمی کنم. فقط این پست رو نوشتم تا فرقهای اسمبلی ۳۲ و ۱۶ بیت رو ببینیم. که درآینده بسطش خواهم داد به ۶۴ بیت.

امیدوارم که این پست، بدردتون خورده باشه.

موفق و موید باشید!

Share

درآمدی بر پردازنده ها

ALUwithRegister

پس از مدتها تحقیق و بررسی در مورد پردازنده های مرسوم، و همچنین خوندن داکیومنت های مربوط به ساخت و پیاده سازی پردازنده ها، تصمیم گرفتم یک داکیومنت ساده دست و پا کنم، که توی اون از ساده ترین قطعات و بخش های کامپیوتر، به یک پردازنده ساده برسیم که بتونه چند عملیات انجام بده و نتیجه رو ذخیره کنه.

داکیومنت از اینجا قابل دریافت هست.

با تشکر.

Share