موضوع مقاله: رایانه مرد کوچک | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # رایانه مرد کوچک | مقدمه: این رایانه در حالت کلی برای آموزش دانشجویان مورد استفاده قرار می‌گیرد، زیرا یک رایانه با معماری ون نیومن ساده – که شامل تمامی ویژگی‌های اساسی رایانه‌های مدرن است - را مدل می‌کند. | ## بخش 1: رایانه مرد کوچک | این نوع رایانه قابلیت برنامه‌ریزی شدن در زبان ماشین (دهدهی به جای دودویی) یا زبان اسمبلی را دارد. این مدل بر اساس مفهوم حبس کردن یک مرد کوچک در یک اتاق پستی دربسته تعریف شده‌است (مشابه با یک رایانه در این طرح). در یک سوی انتهایی اتاق ۱۰۰ جعبهٔ نامه (حافظه) وجود دارد که از ۰ تا ۹۹ شماره‌گذاری شده‌اند، که هر کدام می‌تواند شامل یک دستورالعمل یا دادهٔ ۳ رقمی باشد (از رنج ۰۰۰ تا ۹۹۹). به‌علاوه دو جعبهٔ نامه در سمت دیگر انتهایی اتاق قرار دارد که با برچسب‌های INBOX و OUTBOX برچسب‌گذاری شده‌اند و برای ارسال و دریافت داده‌ها استفاده می‌شوند. در مرکز اتاق یک محوطهٔ کاری وجود دارد که شامل ۱) دو دستورالعمل سادهٔ محاسباتی است (جمع و تفریق) که آن را به نام انباره و ۲) یک شمارش‌گر قابل بازنشاندن که با نام «شمارش‌گر برنامه» می‌شناسیم. این شمارش‌گر برنامه آدرس دستورالعمل بعدی که مرد کوچک آن را انجام خواهد داد، نگاه می‌دارد. افزایش یک واحدی شمارشگر برنامه در حالت عادی بعد از اجرای هر دستورالعمل، به مرد کوچک اجازه می‌دهد تا در طی یک برنامه به‌طور متوالی فعالیت داشته باشد. دستورالعمل‌های انشعاب اجازهٔ قراردادن تکرار (حلقه) و ساختارهای برنامه ایی شرطی را در یک برنامه می‌دهند. قرار دادن شمارشگر برنامه بر روی یک آدرس غیر متوالی در صورت رخداد یک شرط خاص (نوعاً در اینجا وقتی مقدار داخل انباره صفر یا مثبت شود). هر جعبهٔ نامه (نشان دهندهٔ یک مکان حافظهٔ منحصر به فرد) شامل هردوی دستورالعمل‌ها و داده هاست. در نتیجه بایستی مراقب بود تا زمانی‌که یک آدرس حافظه شامل داده است، شمارشگر برنامه را از افزایش بازداریم (مرد کوچک تلاش می‌کند تا آن را برای یک دستورالعمل متوقف نکند). این مزیت نی تواند با نوشتن دستورالعمل‌ها در جعبهٔ نامه بدست آید که به معنی آن است که کد مورد وقفه قرار گرفته تا یک کدِ خوداصلاحگر ایجاد نماید. برای استفاده از رایانه مرد کوچک، کاربر داده‌ها را در جعبه‌های نامه بارگذاری می‌نماید و سپس برای شروع اجرا به مرد کوچک اطلاع می‌دهد؛ که با دستورالعمل ذخیره شده در خانهٔ صفر حافظه آغاز می‌شود. در یک حالت متفاوت، ریست کردن شمارشگر برنامه به صفر، باعث راه اندازی مجدد برنامه می‌شود. چرخهٔ اجرا مرد کوچک برای اجرای یک برنامه مراحل زیر را اعمال می‌کند: شمارشگر برنامه را برای شمارهٔ صندوق پستی که شامل دستورالعمل برنامه است، چک می‌کند. هر دستورالعمل شامل ۲ فیلد است: یک آپکد opcode (نشان دهندهٔ عملیات اعمالی) و یک فیلد آدرس (نشان دهندهٔ مکان داده ایست که روی آن عملیات اعمال می‌شود). اگر دستورالعمل از داده‌های ذخیره شده در صندوق پستی دیگری استفاده کند سپس از فیلد آدرس برای پیدا کردن شماره صندوق پستی استفاده می‌کند تا این داده‌ها بدست آورد (به عنوان مثال، دریافت اطلاعات از صندوق پستی ۴۲). | ## بخش 2: رایانه مرد کوچک | انشعاب یا ذخیرهٔ نتیجه (در خروجی، انباره، یا صندوق پستی با آدرس تعیین شده در مرحله ۴). دستورات در حالی که رایانه مرد کوچک منعکس‌کنندهٔ عملکرد واقعی پردازنده دودویی می‌باشد، سادگی اعداد اعشاری انتخاب شده برای به حداقل رساندن پیچیدگی برای دانش آموزانی که ممکن است در کار با دودویی/هگزادسیمال مشکل داشته باشند. دستورالعمل‌ها برخی از شبیه‌سازهای این نوع رایانه به‌طور مستقیم با استفاده از ۳ دستورالعمل عددی و برخی دیگر با استفاده از ۳-کد حفظی نامه و برچسب، برنامه‌ریزی شده‌اند. در هر صورت این مجموعه دستورالعمل به‌طور عامدانه برای ساده کردن درک، بسیار محدود است (به‌طور معمول حدود ده دستورالعمل). اگر این رایانه از کد حفظی و برچسب استفاده کند سپس هنگامی که برنامه اسمبل شده‌است، این‌ها به ۳ دستورالعمل عددی تبدیل می‌شوند. نکته: محتوای صندوق پستی تغییر نمی‌کند، و عمل‌های انباره (حاسبگر) برای دستورالعمل‌های جمعی که جمع‌های بیشتر از ۳ را انجام می‌دهند، تعریف نشده‌اند. نکته: محتوای صندوق پستی تغییر نمی‌کند، و عمل‌های انباره (حاسبگر) برای دستورالعمل‌های تفریق که نتایج منفی می‌دهند، تعریف نشده‌اند-اگر چه یک پرچم منفی نشانده خواهد شد تا در نتیجه (7xx (BRZ و (8xx (BRP بتوانند به درستی استفاده شوند. نکته: مقادیر انباره (حسابگر) بدون تغییر باقی می‌مانند (تخریب نمی‌شوند)، اما مقادیر صندوق پستی یا مقداری که در آنجا بوده جایگزین می‌شوند (تخریب می‌شوند).5xx LDA LOADمقدار صندوق پستیِ xx را بارگذاری می‌کند (از بین نمی‌برد) و آن را به انباره وارد می‌کند (از بین می‌برد). زمانی‌که تفریق باعث پاریز انباشتگر می‌شود، این پرچم تنظیم می‌شود، بعد از اینکه انباشتگر تعریف نشده باشد، به صورت بالقوه صفر، باعث تعریف نشده بودن رفتار BRZ روی پاریز می‌باشد. رفتار پیشنهادی اگر انباشتگر مقدار صفر و پرچم منفی نیز تنظیم نشده باشد، انشعاب می‌شود. نکته: تا زمانی که برنامه در حافظه ذخیره ذخیره می‌شود، تمامی داده‌ها و دستورالعمل‌های برنامه فرمت آدرس/مکان یکسانی دارند. از آنجایی که سلول‌های حافظه در این نوع رایانه‌ها تنها مقادیر بین ۰ تا ۹۹۹ را می‌پذیرند، این دستورالعمل تنها به پرچم منفی که با یک پاریز روی تفریق و به‌طور بالقوه روی یک سریز جمع تنظیم می‌شوند، وابسته است (تعریف نشده). نکته: تا زمانی که برنامه در حافظه ذخیره ذخیره می‌شود، تمامی داده‌ها و دستورالعمل‌های برنامه فرمت آدرس/مکان یکسانی دارند. ۹۰۱ INP INPUTبرو به صندوق ورودی، مقدار را از کاربر واکشی کن، و در انباره (حسابگر) قرار ده نکته: این عمل باعث بازنویسی هر مقداری که داخل انباره بوده‌است می‌شود (مخرب). برای مثال DAT 984 مقدار ۹۸۴ درون صندوق پستی در آدرسی که در دستور DAT قرار دارد، ذخیره می‌کند. نمونه‌ها استفاده از کدهای دستورالعملی عددی این برنامه (دستورالعمل ۹۰۱ به دستورالعمل ۰۰۰) فقط با استفاده از کدهای عددی نوشته شده‌است. توجه کنید که اجرا در صندوق پستی ۰۰ شروع می‌شود و پس از آن در صندوق پستی ۰۷ اتمام می‌یابد. | ## بخش 3: رایانه مرد کوچک | معایب برنامه‌نویسی رایانه مرد کوچک، استفاده از کدهای دستورالعملی عددی مورد بحث در زیر است. صندوق پستی کد عددی عملیات نظرات ۰۰ ۹۰۱ صندوق ورودی--> انباره ورودی اولین شماره وارد کردن در حسابگر (پاک کردن هر آنچه وجود دارد) ۰۱ ۳۰۸ انباره--> حافظه[۰۸] ذخیره مقدار فعلی حسابگر (آماده شدن برای مرحله بعدی…) ۰۲ ۹۰۱ صندوق ورودی --> انباره ورودی دومین شماره وارد کردن در حسابگر (پاک کردن هر آنچه وجود دارد) ۰۳ ۳۰۹ انباره--> حافظه[۰۹]ذخیره مقدار فعلی حسابگر (دوباره آماده شدن برای مرحله بعدی…) ۰۴ ۵۰۸ حافظه[۰۸] --> انباره (اکنون هر دو مقادیر ورودی ذخیره شده در صندوق پستی ۰۸ و ۰۹... هستند) بارگیری مقدار اول به حسابگر (پاک کردن هر آنچه وجود دارد) ۰۵ ۲۰۹ انباره= انباره- حافظه[۰۹] تفریق عدد دوم از مقدار فعلی حسابگر (که فقط تنظیم می‌شود به شماره اول) ۰۶ ۹۰۲ انباره--> صندوق خروجی خروجی نتیجه حسابگر به صندوق خروجی ۰۷ ۰۰۰ (بدون عملیات انجام شده) توقف رایانه استفاده از حفظیات و برچسب‌ها زبان اسمبلی یک زبان برنامه‌نویسی سطح پایین است که به جای کدهای دستورالعمل عددی از حفظیات و برچسب‌ها استفاده می‌کند. اگرچه رایانه‌های مرد کوچک تنها از یک دستهٔ محدود از حفظیات استفاده می‌کنند، راحتی استفاده از یک حفظی برای هر دستورالعمل از زبان اسمبلی همان برنامه-که در زیر نشان داده شده-روشن می‌سازد. برنامه‌نویس نیازی به بخاطر سپردن یک مجموعه از کدهای عددی بینام ندارد و اکنون می‌تواند بوسیلهٔ یک مجموعه از کدهای بیشتر حفظی قابل یادآوری برنامه‌ریزی شود. اگر این حفظی یک دستورالعمل شامل یک آدرس حافظه باشد (یک دستور انشعاب یا بارگیری/ذخیره داده) سپس یک برچسب برای نامگذاری آدرس حافظه استفاده می‌شود. این مثال برنامه‌ای است که می‌تواند روی یک شبیه‌ساز رایانه مرد کوچک کامپایل و اجرا می‌شود قابل دسترس در وب سایت دانشگاه یورک (تورنتو، کانادا) یا روی یک برنامه کاربردی که توسط Mike Coley نوشته شده‌است. تمام این شبیه‌سازها شامل تمامی دستورالعمل‌ها و برنامه‌های ساده، یک اسمبلر برای تبدیل کد اسمبلی به کد ماشین، و یک توضیح جزئیاتی مرحله به مرحله از هر دستورالعمل رایانه مرد کوچک است. در مثال کد عددی، اگر یک دستورالعمل جدید قبل از دستورالعمل HLT پایانی، وارد شود، سپس این دستورالعمل HLT از آدرس ۰۷ به ۰۸ انتقال می‌یابد (برچسب‌گذاری آدرس از مکان ۰۰ شروع می‌شود). دستورالعمل ۳۰۸ معنی می‌دهد که این مقدار در آدر ۰۸ ذخیره خواهد شد و دستورالعمل 000 (HLT) بازنویسی می‌شود؛ بنابراین ۶۰۰ معنی می‌دهد "انشعاب به صندوق پستی آدرس ۰۰" برنامه به جای توقف، در یک چرخهٔ بی پایان قرار خواهد گرفت. برای کار روی این مشکل، اکثر زبان‌های اسمبلی (شامل رایانه مرد کوچک) شامل محفوظات و برچسبهاست. یک برچسب به‌طور ساده یک کلمه است که برای نام یک آدرس حافظه که یک دستورالعمل یا داده ذخیره شده‌اند، یا ارجاع به آدرس داخل دستورالعمل. زمانیکه یک برنامه اسمبل می‌شود: یک برچسب در قسمت چپ از یک دستورالعمل حفظی به یک آدرس حافظه‌ای که دستورالعمل یا داده در آن ذخیره شده تبدیل می‌شود. از این رو برچسب‌ها استفاده می‌شوند برای: مشخص کردن یک دستورالعمل خاص به عنوان یک هدف برای یک دستورالعمل انشعاب. مشخص کردن یک مکان حافظه به عنوان یک متغیر نامدار (با استفاده از DAT) و به‌طور اختیاری داده‌ها را در برنامه در زمان اسمبل کردن برای استفاده توسط برنامه، بارگذاری می‌کند (این استفاده تا زمانی‌که در نظر بگیرد که هیچ راهی برای اضافه کردن یک واحد به شمارنده نیست، مشخص نمی‌شود. ممکن است از کاربر خواسته شود که ۱ را در ابتدا وارد کند، اما بهتر است که این بارگذاری را در زمان اسمبل کردن با استفاده از دستور one DAT 1، داشته باشیم) مثال این برنامه یک ورودی از کاربر دریافت کرده و آن را تا صفر به‌طور کاهشی می‌شمارد. (نکته: یک ورودی که خروجی را به بیش از ۹۹۹ نگاشت دهد، باعث بروز یک خطا به دلیل محدودیت تعداد ۳ رقم LMC می‌شود). | ## جمع‌بندی | مکان ۰ در هر تکرار اضافه می‌شود، آن خط کد را به خروجی برده، تا زمانی‌که خروجی کد ۱ شود، در این نقطه به مکان ONE پرش می‌کند.