Execute Computer/Zero: Difference between revisions

m
J: get rid of LIT pseudocode -- numbers are clear enough by themselves
m (J: be more consistent with LIT (literal number) pseudocode)
m (J: get rid of LIT pseudocode -- numbers are clear enough by themselves)
Line 115:
Here's one approach which might be sufficiently close to the task requirements:
 
<lang J>OPS=: ;:'nop lda sta add sub brz jmp stp lit'
 
assemble1=: {{
insy=. ;:tolower y
codins=. OPS {.;:y-.":i. {.ins10
valcod=. {.0".8|(;}:OPS) i. ins
val=. {.0".y-.OPS
if. 8=cod do.
if. *cod assertdo. 256>val
val
else.
assert. 8>cod
assert. 32>val
val+32*cod
else.
assert. 8256>codval
val
end.
}}
Line 164:
With this implementation, we can assemble and run representations of the five suggested programs:
 
<lang J> exec assemble 'LDA 3; ADD 4; STP; LIT 2; LIT 2'
4
exec assemble 'LDA 12; ADD 10; STA 12; LDA 11; SUB 13; STA 11; BRZ 8; JMP; LDA 12; STP; LIT 8; LIT 7; LIT 0; LIT 1'
56
exec assemble 'LDA 14; STA 15; ADD 13; STA 14; LDA 15; STA 13; LDA 16; SUB 17; BRZ 11; STA 16; JMP; LDA 14; STP; LIT 1; LIT 1; LIT 0; LIT 8; LIT 1'
55
exec assemble 'LDA 13; ADD 15; STA 5; ADD 16; STA 7; NOP; STA 14; NOP; BRZ 11; STA 15; JMP; LDA 14; STP; LDA; LIT 0; LIT 28; LIT 1; LIT 0; LIT 0; LIT 0; LIT 6; LIT 0; LIT 2; LIT 26; LIT 5; LIT 20; LIT 3; LIT 30; LIT 1; LIT 22; LIT 4; LIT 24'
6
exec assemble 'NOP; NOP; STP; NOP; LDA 3; SUB 29; BRZ 18; LDA 3; STA 29; BRZ 14; LDA 1; ADD 31; STA 1; JMP 2; LDA; ADD 31; STA; JMP 2; LDA 3; STA 29; LDA 1; ADD 30; ADD 3; STA 1; LDA; ADD 30; ADD 3; STA; JMP 2; LIT 0; LIT 1; LIT 3'
0</lang>
 
6,951

edits