Execute Computer/Zero: Difference between revisions
Content added Content deleted
(→{{header|ALGOL 68}}: Initialise the memory before loading the program) |
|||
Line 365: | Line 365: | ||
</pre> |
</pre> |
||
=={{header|Phix}}== |
|||
First three were easy enough... |
|||
<!--<lang Phix>(phixonline)--> |
|||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">NOP</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b000_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- no operation</span> |
|||
<span style="color: #000000;">LDA</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b001_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- load accumulator, a := memory [xxxxx]</span> |
|||
<span style="color: #000000;">STA</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b010_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- store accumulator, memory [xxxxx] := a</span> |
|||
<span style="color: #000000;">ADD</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b011_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- add, a := a + memory [xxxxx]</span> |
|||
<span style="color: #000000;">SUB</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b100_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- subtract, a := a – memory [xxxxx]</span> |
|||
<span style="color: #000000;">BRZ</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b101_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- branch on zero, if a = 0 then goto xxxxx</span> |
|||
<span style="color: #000000;">JMP</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b110_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- jump, goto xxxxx</span> |
|||
<span style="color: #000000;">STP</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b111_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- stop</span> |
|||
<span style="color: #000000;">OP</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b111_00000</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- operator</span> |
|||
<span style="color: #000000;">ARG</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0b000_11111</span> <span style="color: #000080;font-style:italic;">-- memory location (0 based)</span> |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">execute</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">sequence</span> <span style="color: #000000;">program</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">memory</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">program</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">pc</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> |
|||
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">op</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">program</span><span style="color: #0000FF;">[</span><span style="color: #000000;">pc</span><span style="color: #0000FF;">],</span><span style="color: #000000;">OP</span><span style="color: #0000FF;">),</span> |
|||
<span style="color: #000000;">arg</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">program</span><span style="color: #0000FF;">[</span><span style="color: #000000;">pc</span><span style="color: #0000FF;">],</span><span style="color: #000000;">ARG</span><span style="color: #0000FF;">)+</span><span style="color: #000000;">1</span> |
|||
<span style="color: #000000;">pc</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span> |
|||
<span style="color: #008080;">switch</span> <span style="color: #000000;">op</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">NOP</span><span style="color: #0000FF;">:</span> <span style="color: #008080;">break</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">LDA</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">memory</span><span style="color: #0000FF;">[</span><span style="color: #000000;">arg</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">STA</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">memory</span><span style="color: #0000FF;">[</span><span style="color: #000000;">arg</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">a</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">ADD</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">memory</span><span style="color: #0000FF;">[</span><span style="color: #000000;">arg</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">SUB</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">-=</span> <span style="color: #000000;">memory</span><span style="color: #0000FF;">[</span><span style="color: #000000;">arg</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">BRZ</span><span style="color: #0000FF;">:</span> <span style="color: #008080;">if</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #000000;">pc</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">arg</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">JMP</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">pc</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">arg</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #000000;">STP</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s: %d\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #008080;">return</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">switch</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
<span style="color: #000000;">execute</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"2+2"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ADD</span><span style="color: #0000FF;">+</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STP</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #000000;">execute</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"7*8"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ADD</span><span style="color: #0000FF;">+</span><span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">SUB</span><span style="color: #0000FF;">+</span><span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">BRZ</span><span style="color: #0000FF;">+</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">JMP</span><span style="color: #0000FF;">+</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STP</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #000000;">execute</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"fibonacci"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ADD</span><span style="color: #0000FF;">+</span><span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">16</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">SUB</span><span style="color: #0000FF;">+</span><span style="color: #000000;">17</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">BRZ</span><span style="color: #0000FF;">+</span><span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">16</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">JMP</span><span style="color: #0000FF;">+</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">LDA</span><span style="color: #0000FF;">+</span><span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">STP</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">})</span> |
|||
<!--</lang>--> |
|||
{{out}} |
|||
<pre> |
|||
2+2: 4 |
|||
7*8: 56 |
|||
fibonacci: 55 |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
As I'm unclear whether the interpreter should be able to deal with labels, the programs all use literal memory addresses for now. Output is in decimal. |
As I'm unclear whether the interpreter should be able to deal with labels, the programs all use literal memory addresses for now. Output is in decimal. |