Execute Computer/Zero: Difference between revisions

m
J: maybe less concise overall but maybe easier to read (and relatively concise single line assembly)
m (J: more concise)
m (J: maybe less concise overall but maybe easier to read (and relatively concise single line assembly))
Line 133:
assemble=: {{
acc=: pc=: 0
code=if. assemble1@> cutLF^:(0=L.) y do.
delim=. {.((tolower y)-.(":i.10),;OPS),LF
y=. delim cut y
end.
code=. assemble1@> y
mem=: code (i.#code)} 32#0
}}
Line 160 ⟶ 164:
With this implementation, we can assemble and run representations of the five suggested programs:
 
<lang J> exec assemble 'LDA 3';' ADD 4';' STP';' NOP 2';' NOP 2'
4
exec assemble ';' cut 'LDA 12; ADD 10; STA 12; LDA 11; SUB 13; STA 11; BRZ 8; JMP 0; LDA 12; STP 0; NOP 8; NOP 7; NOP 0; NOP 1'
56
exec assemble ';' cut 'LDA 14; STA 15; ADD 13; STA 14; LDA 15; STA 13; LDA 16; SUB 17; BRZ 11; STA 16; JMP 0; LDA 14; STP 0; NOP 1; NOP 1; NOP 0; NOP 8; NOP 1'
55
exec assemble ';' cut 'LDA 13; ADD 15; STA 5; ADD 16; STA 7; NOP 0; STA 14; NOP 0; BRZ 11; STA 15; JMP 0; LDA 14; STP 0; LDA 0; NOP 0; NOP 28; NOP 1; NOP 0; NOP 0; NOP 0; NOP 6; NOP 0; NOP 2; NOP 26; NOP 5; NOP 20; NOP 3; NOP 30; NOP 1; NOP 22; NOP 4; NOP 24'
6
exec assemble ';' cut 'NOP 0; NOP 0; STP 0; NOP 0; LDA 3; SUB 29; BRZ 18; LDA 3; STA 29; BRZ 14; LDA 1; ADD 31; STA 1; JMP 2; LDA 0; ADD 31; STA 0; JMP 2; LDA 3; STA 29; LDA 1; ADD 30; ADD 3; STA 1; LDA 0; ADD 30; ADD 3; STA 0; JMP 2; NOP 0; NOP 1; NOP 3'
0</lang>
 
6,951

edits