diff --git a/decoder.k b/decoder.k
index b05ac65bceeab41336f22f2b77e06fa768699576..60fe9d731b35811cc464670fbff7bfd9ce17d8ec 100644
--- a/decoder.k
+++ b/decoder.k
@@ -93,11 +93,11 @@ module DECODER
        <decoderBuffer> _ => B </decoderBuffer>
        <instructionpointer> _ => A </instructionpointer>
 
-  rule <k> OutputDisassembly => DecodedInstruction(Q, S, INumOSZToOpcode(N, O) .Operands) ... </k>
+  rule <k> OutputDisassembly => DecodedInstruction(Q, S, INumOSZToOpcode(N, O -Int 1) .Operands) ... </k>
        <ilen> Q </ilen>
        <REP> R </REP>
        <INUM> N </INUM>
-       <OSZ> O </OSZ>
+       <EOSZ> O </EOSZ>
        <suffix> SF </suffix>
        <disassemblerOut> S </disassemblerOut>
 
diff --git a/run-on-large-program.sh b/run-on-large-program.sh
new file mode 100755
index 0000000000000000000000000000000000000000..219d87ec612b07f290d25e56dd5cb04c83963255
--- /dev/null
+++ b/run-on-large-program.sh
@@ -0,0 +1,29 @@
+#!/bin/bash 
+#set -x
+
+CUR_DIR="$(pwd)"
+SEMANTICS_DIR="$(dirname "$CUR_DIR/$0")"
+
+WORK_DIR="$(mktemp -d)"
+OUT_FILE="$(mktemp)"
+TEMP_OUT="$(mktemp)"
+
+trap "{ cat \"$OUT_FILE\"; rm -rf \"$WORK_DIR\"; rm -f \"$OUT_FILE\"; rm -f \"$TEMP_OUT\"; cd \"$CUR_DIR\"; }" EXIT 
+# https://stackoverflow.com/questions/687014/removing-created-temp-files-in-unexpected-bash-exit
+
+cd $WORK_DIR
+split -a 3 -d "$CUR_DIR/$1"
+
+cd $SEMANTICS_DIR
+
+for filename in $WORK_DIR/*; do # https://stackoverflow.com/questions/20796200/how-to-iterate-over-files-in-a-directory-with-bash
+    krun -o none "$filename" > $TEMP_OUT
+    LINES_NEEDED="$(wc -l <$filename)"
+    LINES_GOT="$(wc -l <$TEMP_OUT)"
+    cat "$TEMP_OUT" >> "$OUT_FILE"
+    if [ "$LINES_NEEDED" -ne "$LINES_GOT" ] 
+        then
+        >&2 echo "Lines for $FILE did not match.  Needed $LINES_NEEDED, but got $LINES_GOT"
+    fi
+done
+