Gordons Projects

--> Projects Top-Level GIT

Initial GIT creation
[lmc] / square.lmc
1 // Square program from the wikipedia entry
2 //    Some changes for the RTB version of LMC by GH
3 //    See ORG below.
4
5 START   LDA ZERO     // Initialize for multiple program run
6         STA RESULT
7         STA COUNT
8         INP          // User provided input
9         BRZ END      // Branch to program END if input = 0
10         STA VALUE    // Store input as VALUE
11 LOOP    LDA RESULT   // Load the RESULT
12         ADD VALUE    // Add VALUE, the user provided input, to RESULT
13         STA RESULT   // Store the new RESULT
14         LDA COUNT    // Load the COUNT
15         ADD ONE      // Add ONE to the COUNT
16         STA COUNT    // Store the new COUNT
17         SUB VALUE    // Subtract the user provided input VALUE from COUNT
18         BRZ ENDLOOP  // If zero (VALUE has been added to RESULT by VALUE times), branch to ENDLOOP
19         BRA LOOP     // Branch to LOOP to continue adding VALUE to RESULT
20 ENDLOOP LDA RESULT   // Load RESULT
21         OUT          // Output RESULT
22         BRA START    // Branch to the START to initialize and get another input VALUE
23 END     HLT          // HALT - a zero was entered so done!
24
25 // Start data at 90 for visual effect in the RTB version
26
27         ORG 90
28
29 ZERO    DAT          // Constant, value of 0 (defaults to 0)
30 ONE     DAT 1        // Constant, value of 1
31
32 RESULT  DAT          // Computed result (defaults to 0)
33 COUNT   DAT          // Counter (defaults to 0)
34 VALUE   DAT          // User provided input, the value to be squared (defaults to 0)