diff options
-rw-r--r-- | 014indirect_addressing.cc | 9 | ||||
-rw-r--r-- | 302stack_allocate.subx | 13 | ||||
-rwxr-xr-x | apps/mu | bin | 388957 -> 388971 bytes |
3 files changed, 13 insertions, 9 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() { diff --git a/302stack_allocate.subx b/302stack_allocate.subx index 02ad84f2..4634039d 100644 --- a/302stack_allocate.subx +++ b/302stack_allocate.subx @@ -37,15 +37,12 @@ $push-n-zero-bytes:prologue: 89/<- %ebp 4/r32/esp $push-n-zero-bytes:copy-ra: # -- esp = ebp - 50/push-eax - # -- esp+8 = ebp+4 - # -- esp+4 = ebp - 8b/-> *(esp+4) 0/r32/eax + 89/<- *Push-n-zero-bytes-eax 0/r32/eax + 8b/-> *esp 0/r32/eax 2b/subtract *(ebp+4) 4/r32/esp - # -- esp+4+n = ebp - 89/<- *(esp+4) 0/r32/eax - 58/pop-to-eax # -- esp+n = ebp + 89/<- *esp 0/r32/eax + 8b/-> *Push-n-zero-bytes-eax 0/r32/eax $push-n-zero-bytes:bulk-cleaning: 89/<- *Push-n-zero-bytes-esp 4/r32/esp 81 0/subop/add *Push-n-zero-bytes-esp 4/imm32 @@ -60,3 +57,5 @@ Push-n-zero-bytes-ebp: # (addr int) 0/imm32 Push-n-zero-bytes-esp: # (addr int) 0/imm32 +Push-n-zero-bytes-eax: + 0/imm32 diff --git a/apps/mu b/apps/mu index 2cf5d31c..0a95526a 100755 --- a/apps/mu +++ b/apps/mu Binary files differ |