کامپیوترها چگونه اعداد را نمایش می‌دهند و دستورات را به باینری کدگذاری می‌کنند

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

اعداد علامت‌دار و بدون علامتمکمل دوکدگذاری دستورات

~3 min read · Updated Sep 6, 2026

چرا اعداد به نمایش ثابت نیاز دارند

سخت‌افزار کامپیوتر هر مقدار را با تعداد ثابتی بیت ذخیره می‌کند، که معمولاً در گروه‌های ۳۲ بیتی یا ۶۴ بیتی به نام Words قرار می‌گیرند. چون تعداد بیت‌ها ثابت است، محدودیت سختی روی بازه مقادیر قابل‌نمایش وجود دارد، و همان الگوی بیتی می‌تواند بسته به نحوه تفسیرش معانی متفاوتی داشته باشد.

اعداد بدون علامت: نمایش فقط مقادیر غیرمنفی

یک Unsigned Number از تمام بیت‌های موجود برای نمایش مقدار استفاده می‌کند، بدون اینکه هیچ بیتی برای علامت رزرو شود. برای یک عدد بدون علامت n بیتی، بازه قابل‌نمایش این است:

بازه: 0 تا (2^n − 1)

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

اعداد علامت‌دار و مکمل دو

بیشتر محاسبات در برنامه‌های واقعی به مقادیر منفی نیز نیاز دارند. نمایشی که تقریباً به‌طور جهانی در سخت‌افزار امروزی استفاده می‌شود Two's Complement نام دارد.

در نمایش مکمل دو، بیت سمت چپ Sign Bit نامیده می‌شود: برای اعداد غیرمنفی صفر و برای اعداد منفی یک است، اما برخلاف نمایش ساده علامت-مقدار، بقیه بیت‌ها فقط یک مقدار ساده نیستند — کل الگو به‌گونه‌ای محاسبه می‌شود که جمع و تفریق با همان مدار سخت‌افزاری، صرف‌نظر از علامت، درست کار کند.

برای منفی کردن یک عدد در مکمل دو، تمام بیت‌ها معکوس شده و سپس ۱ به نتیجه اضافه می‌شود:

مرحله ۱: تمام بیت‌های عدد را معکوس کن
مرحله ۲: به نتیجه معکوس‌شده ۱ اضافه کن

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

دستورات ماشین چگونه کدگذاری می‌شوند

درست همان‌طور که داده عددی به‌شکل الگوهای باینری با عرض ثابت ذخیره می‌شود، خود دستورات نیز به همین شکل کدگذاری می‌شوند. هر دستور RISC-V در یک کلمه ثابت ۳۲ بیتی بسته‌بندی می‌شود، که به Fields مجزا تقسیم شده، هرکدام حامل یک قطعه اطلاعات مشخص است.

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

  • Opcode: مشخص می‌کند دستور به کدام دسته عملیات پایه تعلق دارد.
  • Destination Register (rd): مشخص می‌کند نتیجه کجا ذخیره خواهد شد.
  • Source Registers (rs1, rs2): مشخص می‌کنند مقادیر عملوند ورودی از کجا می‌آیند.
  • Funct Fields: بیت‌های اضافی مورد نیاز برای تمایز کامل عملیات دقیق را فراهم می‌کنند، وقتی opcode به‌تنهایی به‌اندازه کافی مشخص نیست.

این ساختار لایه‌ای فیلدها Format دستور نامیده می‌شود، و RISC-V تعداد کمی فرمت استاندارد تعریف می‌کند تا سخت‌افزار decode بتواند هر فیلد را با استفاده از همان موقعیت‌های بیتی ثابت در بسیاری از دستورات مختلف استخراج کند، و منطق decode را ساده و سریع نگه دارد.

چرا کدگذاری با عرض ثابت اهمیت دارد

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

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