مد ۸۰۸۶ مجازی

در ریزپردازنده‌های سری اینتل ۸۰۳۸۶ و به بعد، مد ۸۰۸۶ مجازی (که با نام‌های مد حقیقی مجازی، مد V86 یا VM86 نیز شناخته می‌شود) اجازه می‌دهد برنامه‌های نگاشته شده برای مد حقیقی (به طور مثال برنامه‌های نگاشته شده برای سیستم عامل DOS)، که توانایی اجرا در مد محافظت شده را ندارند، اجرا شوند. در این مد می‌توان با مجازی سازی سخت‌افزاری، چندین پردازنده ۸۰۸۶ را بر روی یک چیپ ۳۸۶ شبیه‌سازی کرد.

مد VM86 جهت آدرس‌دهی از ساختار قطعه‌بندی حافظه (به انگلیسی: Memory Segmentation) استفاده می‌کند. این مد برای شبیه‌سازی مد حقیقی، درست همانند مد حقیقی یک فضای آدرس‌دهی ۲۰-بیتی خطی ایجاد می‌کند، اما حافظه ایجاد شده، همچون حافظه‌های مد محافظت‌شده، با روش صفحه‌بندی مدیریت می‌شوند.

کاربرد

[ویرایش]

مد VM86 جهت اجرای برخی برنامه‌های DOS در سیستم عامل‌های اواس/۲، ویندوز 9x/ویندوز ام‌ای و بعد تر در ماشین مجازی DOS استفاده گشت. علاوه بر این SCO UNIX در Merge و لینوکس در dosemu از این مد بهره می‌جویند. ویندوزهای بر پایه NT جهت اجرای برنامه‌های DOS از مد VM86 در زیر سامانه NTVDM استفاده می‌کنند.

تشخیص وضعیت ۸۰۸۶ مجازی

[ویرایش]

تشخیص قرار داشتن در یکی از مدهای ۸۰۸۶ مجازی یا حقیقی، برای یک برنامه نگاشته شده برای مد حقیقی می‌تواند مفید باشد. برای رسیدن به این هدف، می‌توان در یک برنامه مد حقیقی، بخش ابتدایی ثبات CR0 را با استفاده از دستور SMSW[۱] بررسی کرد. بیت PE[۲] از این ثبات نشانگر فعال یا غیرفعال بودن مد محافظت‌شده است؛ بنابراین درصورتی که برنامه در مد ۸۰۸۶ مجازی اجراشده باشد، این بیت فعال است. چراکه مد ۸۰۸۶ مجازی درون مد محافظت‌شده اجرا می‌شود. تکه کد زیر این رهیافت را با زبان ماشین، بازگو می‌کند:[۳]

detect_v86:
  smsw ax
  and eax,1 ;CR0.PE bit
  ret

منابع

[ویرایش]
  1. «SMSW -- Store Machine Status Word». دریافت‌شده در ١ خرداد ١٣٩٣.
  2. «MSW - Machine Status Word (286+ only)». دریافت‌شده در ١ خرداد ١٣٩٣.
  3. «Virtual 8086 Mode». دریافت‌شده در ١ خرداد ١٣٩٣.