بلوک‌های سازنده دستورات ماشین: عملیات‌ها و عملوندها

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

مجموعه دستوراتعملیات‌های ماشینرجیسترها و عملوندها

~3 min read · Updated Sep 6, 2026

چرا دستورات سخت‌افزاری ساده نگه داشته می‌شوند

یک پردازنده عبارات غنی و بیانگر را آن‌طور که یک زبان برنامه‌نویسی قابل‌فهم برای انسان دارد، نمی‌فهمد. در عوض، واژگانی کوچک و ثابت از عملیات‌های بسیار ساده را اجرا می‌کند، که در مجموع Instruction Set نامیده می‌شود. کوچک و منظم نگه‌داشتن این مجموعه، سخت‌افزاری که دستورات را decode و اجرا می‌کند را ساده‌تر، ارزان‌تر و سریع‌تر برای ساخت می‌کند.

این اصل ارتباط نزدیکی با فلسفه پشت طراحی‌های RISC (Reduced Instruction Set Computer) مانند RISC-V دارد، جایی که هر دستور یک عمل کاملاً مشخص انجام می‌دهد به‌جای ترکیب چند عملیات در یک دستور پیچیده واحد.

عملیات‌های اصلی که یک پردازنده انجام می‌دهد

با وجود پیچیدگی ظاهری نرم‌افزار، تقریباً همه محاسبات به تعداد اندکی دسته عملیات تقلیل می‌یابند.

  • Arithmetic Operations مانند جمع و تفریق، که مقادیر عددی را مستقیماً دستکاری می‌کنند.
  • Data Transfer Operations، که مقادیر را بین حافظه و ذخیره‌سازی داخلی سریع پردازنده جابه‌جا می‌کنند.
  • Logical Operations، که بیت‌های تکی را دستکاری می‌کنند.
  • Conditional Operations، که جریان معمولی و پی‌درپی اجرا را بر اساس یک مقایسه تغییر می‌دهند.

یک دستور جمع نماینده در اسمبلی RISC-V به این شکل است:

add a, b, c

این یک خط به سخت‌افزار دستور می‌دهد مقادیر نگه‌داشته‌شده در b و c را جمع کند، سپس نتیجه را در a قرار دهد. توجه کنید که این دستور همیشه دقیقاً یک عملیات و تعداد ثابت و کمی عملوند مشخص می‌کند — این نظم عمدی است و یکی از هشت ایده اصلی طراحی است که پیش‌تر در این مجموعه بررسی شد.

عملوندها کجا زندگی می‌کنند: رجیسترها و حافظه

یک دستور به جایی برای خواندن مقادیر ورودی خود و جایی برای نوشتن نتیجه‌اش نیاز دارد. این مکان‌ها Operands نامیده می‌شوند، و سخت‌افزار دو مکان بسیار متفاوت برای ذخیره آن‌ها فراهم می‌کند.

رجیسترها: ذخیره‌سازی سریع اما محدود

Registers مکان‌های ذخیره‌سازی کوچکی هستند که مستقیماً داخل پردازنده ساخته شده‌اند. دسترسی به آن‌ها بسیار سریع است اما تعدادشان محدود است — یک پردازنده RISC-V، برای مثال، دقیقاً ۳۲ رجیستر همه‌منظوره فراهم می‌کند. چون تعداد رجیسترها این‌قدر کم است، یک کامپایلر باید با دقت تصمیم بگیرد کدام مقادیر در هر لحظه شایسته اشغال این ذخیره‌سازی سریع هستند.

حافظه: ذخیره‌سازی بزرگ اما کندتر

وقتی یک برنامه نیاز دارد با داده‌ای بیشتر از آنچه رجیسترهای موجود می‌توانند نگه دارند کار کند — مانند یک آرایه کامل — آن داده به‌جای آن در Memory نگه داشته می‌شود. حافظه به‌صورت یک آرایه بزرگ از Bytes قابل‌آدرس‌دهی جداگانه سازمان‌دهی شده است، و جابه‌جایی داده بین حافظه و رجیسترها نیازمند دستورات صریح انتقال داده است.

یک دستور معمول که یک مقدار را از حافظه به یک رجیستر بارگذاری می‌کند به این شکل است:

ld a, offset(b)

در اینجا، پردازنده یک آدرس حافظه را با افزودن یک آفست ثابت به آدرس ذخیره‌شده در رجیستر b محاسبه می‌کند، مقدار ذخیره‌شده در آن آدرس حافظه را بازیابی می‌کند، و آن را در رجیستر a قرار می‌دهد.

چرا این تمایز برای کارایی اهمیت دارد

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

Written & researched by Dr. Shahin Siami

Related Articles

تصورات غلط رایج درباره محاسبات موازی و درس‌های نهایی کتاب

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

Continue

واقعیت‌های عملی: بنچمارک CPU در مقابل GPU و ضرب ماتریس چندپردازنده‌ای

مقایسه منصفانه یک CPU و یک GPU نیازمند مدلی است که هم توان عملیاتی محاسباتی و هم محدودیت‌های پهنای باند حافظه را با هم در نظر بگیرد. این مقاله مدل roofline مورد استفاده برای مقایسه سخت‌افزار واقعی مانند Intel Core i7 و NVIDIA Tesla GPU را معرفی می‌کند، سپس نشان می‌دهد ضرب ماتریس چگونه در سراسر چند پردازنده تسریع می‌شود، به‌عنوان کاربرد عملی نهایی مفاهیم موازی این فصل.

Continue

بنچمارک کردن چندپردازنده‌ها و مدل‌سازی کارایی موازی

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

Continue

شبکه‌سازی کلاستر: ارتباط با دنیای بیرون

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

Continue

کلاسترها، کامپیوترهای در مقیاس انبار، و توپولوژی‌های شبکه

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

Continue

مقدمه‌ای بر GPU: موازی‌سازی عظیم برای بارهای کاری سنگین از نظر داده

یک GPU ایده SIMD که پیش‌تر در این مجموعه پوشش داده شد را به یک مقیاس افراطی می‌برد، و هزاران رشته سبک را به‌طور هم‌زمان اجرا می‌کند تا حجم عظیمی از داده مستقل را پردازش کند. این مقاله توضیح می‌دهد چرا GPU ها از نظر معماری این‌قدر با CPU متفاوت‌اند، مدل اجرای رشته آن‌ها چگونه کار می‌کند، و چه نوع بارهای کاری بیشترین بهره را از این طراحی می‌برند.

Continue