ماشین برنامه ذخیره‌شده با دسترسی تصادفی
مرحلهٔ واکشی

ماشین حالت، هم مستقیم و هم غیرمستقیم، به تمام رجیسترها دسترسی دارد؛ بنابراین #۱ را به عنوان "شمارشگر برنامه" (PC) اتخاذ می‌کند. نقش شمارشگر برنامه "حفظ موقعیت" در فهرست برنامه خواهد بود؛ ماشین حالت، برای کاربرد اختصاصی‌اش، دارای رجیستر حالتِ منحصربفرد خود است.
به محض شروع، ماشین حالت منتظر یافتن یک شماره درون PC می‌ماند، یعنی اولین "فرمان برنامه‌ای" درون برنامه (مثلاً در #۵).
(بدون استفاده از کپی‌های غیرمستقیم، وظیفهٔ رساندن فرمان برنامه‌ایِ مورد اشاره به #۲ کمی دشوار است. ماشینِ حالت، رجیستر مورد اشاره را به‌طور غیرمستقیم کاهش خواهد داد، درحالیکه رجیستر (خالیِ) #۲ را افزایش می‌دهد. در طول مرحلهٔ "تجزیه"، مقادیر ارائه شدهٔ #۵ را بوسیلهٔ قربانی کردن شمارهٔ درون #۲، ترمیم خواهد نمود)
هدف از نکتهٔ انحرافی بالا این است که نشان دهیم، زمانی‌که ماشین حالت به دو نوع کپی غیرمستقیم دسترسی دارد، کارها آسان‌تر خواهند بود:
کپی غیرمستقیم از i و مستقیم به j: CPY <<hi>>,<hj>
کپی مستقیم از i و غیرمستقیم به j: CPY <hi>,<<hj>>
مثال بعدی نشان می‌دهد که در طی مرحلهٔ "واکشی" ماشینِ حالت، چه اتفاقی رخ می‌دهد. عملیات‌های ماشینِ حالت در زیر ستونی با عنوان "فرمان‌های ماشینِ حالت ↓ " فهرست شده‌اند. مشاهده کنید که در انتهای واکشی، رجیستر #۲ حاوی مقدار عددی ۳ از "کد عملیاتی" ("opcode") فرمان اول JZ است.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|  |  |  | PC | PIR |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  | hole # → | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | ۸ | ۹ | ۱۰ | ۱۱ | ۱۲ | ۱۳ | ۱۴ | ۱۵ | ۱۶ | ۱۷ | ۱۸ | ۱۹ |
|  |  | program, parameters → | ۵ |  |  |  | JZ | ۱۸ | ۱۵ | DEC | ۱۸ | INC | ۱۹ | JZ | ۱۵ | ۵ | H |  |  | n |  |
|  |  | encoded program → | ۵ |  |  |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n |  |
| step |  | state machine instructions ↓ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
: 
| ۱   | fetch_instr:   | CPY <<1>>,<2> | 5 i | [۳] |  |  | [۳] | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
مرحلهٔ تجزیه: اکنون که شمارهٔ فرمان برنامه‌ای (مثلاً ۳=”JZ”) درون رجیستر #۲ –رجیستر فرمان برنامه‌ای– قرار دارد، ماشینِ حالت به کاهش شماره تا زمانی‌که رجیستر فرمان (IR) خالی شود، ادامه می‌دهد:
اگر IR پیش از کاهش خالی بود، پس فرمان برنامه‌ای ۰=HALT خواهد بود، و ماشین به روال "HALT" خود جهش خواهد نمود. پس از اولین کاهش، در صورتی که حفره خالی بود، فرمان INC خواهد بود، و ماشین به فرمان "inc_routine" جهش خواهد نمود. پس از دومین کاهش، IR خالی DEC را نمایش داده و ماشین به فرمان "dec_routine" جهش خواهد کرد. پس از سومین کاهش، IR واقعاً خالی می‌شود و این امر منجر به جهش به روال "JZ_routine" خواهد شد. در صورتی‌که یک عدد غیرمنتظره همچنان درون IR وجود داشته باشد، (برای مثال) ماشین یک خطا را شناسایی نموده و HALT خواهد نمود."
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|  |  |  | PC | IR |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  | hole # → | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | ۸ | ۹ | ۱۰ | ۱۱ | ۱۲ | ۱۳ | ۱۴ | ۱۵ | ۱۶ | ۱۷ | ۱۸ | ۱۹ |
|  |  | program, parameters → | ۵ |  |  |  | JZ | ۱۸ | ۱۵ | DEC | ۱۸ | INC | ۱۹ | JZ | ۱۵ | ۵ | H |  |  | n |  |
|  |  | encoded program → | ۵ |  |  |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n |  |
| step |  | state machine instructions ↓ |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
: 
| ۱   | fetch_instr:   | CPY <<1>>,<2> | 5 i | [۳] |  |  | [۳] | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| ۲   | parse_instr:   | JZ 2,halt | ۵ | ۳ |  |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۹ | ۵ | ۰ |  |  | n   |  |
| ۳   |   | 2-Dec   | ۵ | ۲   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| ۴   |   | JZ 2,dec_routine:   | ۵ | ۲   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| ۵   |   | 2-Dec   | ۵ | ۱   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| ۶   |   | JZ 2,inc_routine   | ۵ | ۱   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| ۷   |   | 2-Dec   | ۵ | ۰   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| ۸   |   | JZ 2, JZ_routine   | ۵ | ۰ !   |   |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   |  |
| --   | halt:   | HALT   | ۵ | ۳   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| --   | inc_routine:   | etc.   | ۵ | ۳   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| --   | dec_routine:   | etc.   | ۵ | ۳   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |
| ۹   | JZ_routine:   | etc.   | ۵ | ۳   |   |  | ۳ | ۱۸ | ۱۵ | ۲ | ۱۸ | ۱ | ۱۹ | ۳ | ۱۵ | ۵ | ۰ |  |  | n   |  |