about summary refs log tree commit diff stats
path: root/014indirect_addressing.cc
diff options
context:
space:
mode:
Diffstat (limited to '014indirect_addressing.cc')
-rw-r--r--014indirect_addressing.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/014indirect_addressing.cc b/014indirect_addressing.cc
index 19d4d509..fa679d6f 100644
--- a/014indirect_addressing.cc
+++ b/014indirect_addressing.cc
@@ -936,7 +936,7 @@ void test_add_r32_to_mem_at_r32_plus_disp32() {
 }
 
 :(before "End Mod Special-cases(addr)")
-case 2:  // indirect + disp32 addressing
+case 2: {  // indirect + disp32 addressing
   switch (rm) {
   default:
     addr = Reg[rm].u;
@@ -944,11 +944,16 @@ case 2:  // indirect + disp32 addressing
     break;
   // End Mod 2 Special-cases(addr)
   }
+  int32_t displacement = static_cast<int32_t>(next32());
   if (addr > 0) {
-    addr += next32();
+    addr += displacement;
     trace(Callstack_depth+1, "run") << "effective address is 0x" << HEXWORD << addr << " (after adding disp32)" << end();
   }
+  else {
+    trace(Callstack_depth+1, "run") << "null address; skipping displacement" << end();
+  }
   break;
+}
 
 :(code)
 void test_add_r32_to_mem_at_r32_plus_negative_disp32() {