index = NUM_INTREGS;
     } else {
         if (machInst.addrSize == 2) {
-            warn("I'm not really using 16 bit MODRM like I'm supposed to!\n");
+            unsigned rm = machInst.modRM.rm;
+            if (rm <= 3) {
+                scale = 1;
+                if (rm < 2) {
+                    base = INTREG_RBX;
+                } else {
+                    base = INTREG_RBP;
+                }
+                index = (rm % 2) ? INTREG_RDI : INTREG_RSI;
+            } else {
+                scale = 0;
+                switch (rm) {
+                  case 4:
+                    base = INTREG_RSI;
+                    break;
+                  case 5:
+                    base = INTREG_RDI;
+                    break;
+                  case 6:
+                    base = INTREG_RBP;
+                    break;
+                  case 7:
+                    base = INTREG_RBX;
+                    break;
+                }
+            }
         } else {
             scale = 0;
             base = machInst.modRM.rm | (machInst.rex.b << 3);