diff --git a/8086_sim/sim86.cpp b/8086_sim/sim86.cpp
index f1b2525..3a63360 100644
--- a/8086_sim/sim86.cpp
+++ b/8086_sim/sim86.cpp
@@ -6,6 +6,8 @@
 #include <stdio.h>
 #include <string.h>
 
+#define MEM_SIZE (1 << 16)
+
 struct basic_string {
   char str[4096];
 };
@@ -22,6 +24,9 @@ int main(int argc, char *argv[]) {
     return 1;
   }
 
+  u8 memory[MEM_SIZE];
+  memset((void *)memory, 0, MEM_SIZE);
+
   const char *filename = argv[1];
 
   printf("Filename: %s\n", filename);
@@ -37,10 +42,7 @@ int main(int argc, char *argv[]) {
 
   fseek(fp, 0, SEEK_SET);
 
-  u8 buffer[size + 1];
-  memset((void *)buffer, 0, size + 1);
-
-  fread((void *)buffer, sizeof(u8), size, fp);
+  fread((void *)memory, sizeof(u8), size, fp);
 
   fclose(fp);
 
@@ -55,7 +57,7 @@ int main(int argc, char *argv[]) {
 
   while (offset < size) {
     instruction decoded;
-    Sim86_Decode8086Instruction(size - offset, buffer + offset, &decoded);
+    Sim86_Decode8086Instruction(size - offset, memory + offset, &decoded);
 
     if (decoded.Op) {
       offset += decoded.Size;