7 my @regs = (1, (0) x 5);
16 push @code, [ split /\s+/ ];
21 my ($op, $a, $b, $c) = @{ $code[$ip] };
26 $regs[$c] = $regs[$a] + $regs[$b];
27 } elsif ($op eq 'addi') {
28 $regs[$c] = $regs[$a] + $b;
29 } elsif ($op eq 'mulr') {
30 $regs[$c] = $regs[$a] * $regs[$b];
31 } elsif ($op eq 'muli') {
32 $regs[$c] = $regs[$a] * $b;
33 } elsif ($op eq 'banr') {
34 $regs[$c] = $regs[$a] & $regs[$b];
35 } elsif ($op eq 'bani') {
36 $regs[$c] = $regs[$a] & $b;
37 } elsif ($op eq 'borr') {
38 $regs[$c] = $regs[$a] | $regs[$b];
39 } elsif ($op eq 'bori') {
40 $regs[$c] = $regs[$a] | $b;
41 } elsif ($op eq 'setr') {
42 $regs[$c] = $regs[$a];
43 } elsif ($op eq 'seti') {
45 } elsif ($op eq 'gtrr') {
46 $regs[$c] = $regs[$a] > $regs[$b] ? 1 : 0;
47 } elsif ($op eq 'eqrr') {
48 $regs[$c] = $regs[$a] == $regs[$b] ? 1 : 0;
49 } elsif ($op eq 'nop') {
52 die "Unknown op $ op at $ip";
54 say join(' ', $ip, "\t", @{ $code[$ip] }, "\t", @regs);
55 # $regs[3] = $ARGV[0] if $ip == 35;
56 $ip = $regs[$ip_reg] + 1;