رایانه مرد کوچک
برچسب‌ها > مثال

این برنامه یک ورودی از کاربر دریافت کرده و آن را تا صفر به‌طور کاهشی می‌شمارد.
INP
 OUT      // Initialize output
LOOP BRZ QUIT // If the accumulator value is 0, jump to the memory address labeled QUIT
 SUB ONE  // Label this memory address as LOOP, The instruction will then subtract the value stored at address ONE from the accumulator
 OUT
 BRA LOOP // Jump (unconditionally) to the memory address labeled LOOP
QUIT HLT      // Label this memory address as QUIT
ONE DAT 1    // Store the value 1 in this memory address, and label it ONE (variable declaration)
این برنامه یک ورودی از کاربر گرفته، آن را مربع کرده، و پاسخ را برمی‌گرداند و سپس تکرار می‌کند. وارد کردن صفر منجر به اتمام برنامه خواهد شد. (نکته: یک ورودی که خروجی را به بیش از ۹۹۹ نگاشت دهد، باعث بروز یک خطا به دلیل محدودیت تعداد ۳ رقم LMC می‌شود).
START LDA ZERO     // Initialize for multiple program run
 STA RESULT
 STA COUNT
 INP          // User provided input
 BRZ END      // Branch to program END if input = ۰
 STA VALUE    // Store input as VALUE
LOOP LDA RESULT   // Load the RESULT
 ADD VALUE    // Add VALUE, the user provided input, to RESULT
 STA RESULT   // Store the new RESULT
 LDA COUNT    // Load the COUNT
 ADD ONE      // Add ONE to the COUNT
 STA COUNT    // Store the new COUNT
 SUB VALUE    // Subtract the user provided input VALUE from COUNT
 BRZ ENDLOOP  // If zero (VALUE has been added to RESULT by VALUE times), branch to ENDLOOP
 BRA LOOP     // Branch to LOOP to continue adding VALUE to RESULT
ENDLOOP LDA RESULT   // Load RESULT
 OUT          // Output RESULT
 BRA START    // Branch to the START to initialize and get another input VALUE
END HLT          // HALT - a zero was entered so done!
RESULT DAT          // Computed result (defaults to 0)
COUNT DAT          // Counter (defaults to 0)
ONE DAT 1        // Constant, value of 1
VALUE DAT          // User provided input, the value to be squared (defaults to 0)
ZERO DAT          // Constant, value of 0 (defaults to 0)
نکته: اگر بعد از دستور DAT داده‌ای نباشد آنگاه بطور پیش‌فرض عدد صفر در آدرس حافظه ذخیره می‌شود.
در مثال بالا، [BRZ ENDLOOP] وابسته به یک رفتار تعریف نشده‌است، از آنجایی که COUNT-VALUE می‌تواند منفی باشد، بعد از اینکه مقدار انباره undefined شد، نتیجه BRZ یا انشعاب می‌یابد یا هیچ (انباره می‌تواند صفر باشد، یا پوشیده شود). برای سازگاری کد با مشخصات، جایگزین کنید:
...
 LDA COUNT    // Load the COUNT
 ADD ONE      // Add ONE to the COUNT
 STA COUNT    // Store the new COUNT
 SUB VALUE    // Subtract the user provided input VALUE from COUNT
 BRZ ENDLOOP  // If zero (VALUE has been added to RESULT by VALUE times), branch to ENDLOOP
 ...
بوسیلهٔ نسخهٔ پیش رو، که VALUE-COUNT جایگزین COUNT-VALUE شده اس، مطمئن می‌شویم که انباره هرگز پاریز نخواهد شد:
...
 LDA COUNT    // Load the COUNT
 ADD ONE      // Add ONE to the COUNT
 STA COUNT    // Store the new COUNT
 LDA VALUE    // Load the VALUE
 SUB COUNT    // Subtract COUNT from the user provided input VALUE
 BRZ ENDLOOP  // If zero (VALUE has been added to RESULT by VALUE times), branch to ENDLOOP
 ...
مثال دیگر quine است، کد ماشین خودش را چاپ می‌کند (چاپ کردن منبع غیرممکن است زیرا حروف نمی‌توانند به خروجی روند):
LOAD LDA 0     // Load position 0 into the accumulator. This line will be modified on each loop to load the next lines into the accumulator
 OUT       // Output the accumulator's value. The accumulator's value will be the line that was just loaded
 SUB ONE   // Subtract 1 from the value in the accumulator. This is so we can do the BRZ in the next step to see if we are on the last line in the program
 BRZ ONE   // If the previous subtraction has made the accumulator 0 (which means we had the value 001 in the accumulator), then branch to position ONE
 LDA LOAD  // Load the LOAD position into the accumulator, this is in preparation to increment the address digits for this position
 ADD ONE   // Increment the position digits for the LOAD line. The value currently in the accumulator would, if read as an instruction, load the next line into the accumulator, compared to the last line loaded
 STA LOAD  // Store the newly incremented LOAD line back in the LOAD position
 BRA LOAD  // Return back to the beginning of the loop
ONE DAT 1     // The variable 1. If read as an instruction, this will be interpreted as HLT/COB and will end the program
این کواین با استفاده از کد خوداصلاحگر کار می‌کند. مکان ۰ در هر تکرار اضافه می‌شود، آن خط کد را به خروجی برده، تا زمانی‌که خروجی کد ۱ شود، در این نقطه به مکان ONE پرش می‌کند. مکان ONE با یک ۰ شروع شده، بنابراین به عنوان یک دستور HALT/COB تفسیر می‌شود.