about summary refs log tree commit diff stats
path: root/subx/016index_addressing.cc
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-10-01 11:09:07 -0700
committerKartik Agaram <vc@akkartik.com>2018-10-01 11:09:07 -0700
commitca00f6b97c52262b39c28cccb76b52e059553f13 (patch)
tree3c6e1ea3e36c849a344eac03a468b3e853241bb3 /subx/016index_addressing.cc
parent75e30d2faa3480ae8810856d6527089ba88346a5 (diff)
downloadmu-ca00f6b97c52262b39c28cccb76b52e059553f13.tar.gz
4634
Diffstat (limited to 'subx/016index_addressing.cc')
-rw-r--r--subx/016index_addressing.cc44
1 files changed, 22 insertions, 22 deletions
diff --git a/subx/016index_addressing.cc b/subx/016index_addressing.cc
index 58169083..f98d4c0d 100644
--- a/subx/016index_addressing.cc
+++ b/subx/016index_addressing.cc
@@ -2,17 +2,17 @@
 
 :(scenario add_r32_to_mem_at_r32_with_sib)
 % Reg[EBX].i = 0x10;
-% Reg[EAX].i = 0x60;
+% Reg[EAX].i = 0x2000;
 == 0x1  # code segment
 # op  ModR/M  SIB   displacement  immediate
   01  1c      20                             # add EBX to *EAX
 # ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB)
 # SIB in binary: 00 (scale 1) 100 (no index) 000 (base EAX)
-== 0x60  # data segment
+== 0x2000  # data segment
 01 00 00 00  # 1
 +run: add EBX to r/m32
-+run: effective address is initially 0x60 (EAX)
-+run: effective address is 0x60
++run: effective address is initially 0x2000 (EAX)
++run: effective address is 0x2000
 +run: storing 0x00000011
 
 :(before "End Mod 0 Special-cases(addr)")
@@ -48,51 +48,51 @@ uint32_t effective_address_from_sib(uint8_t mod) {
 
 :(scenario add_r32_to_mem_at_base_r32_index_r32)
 % Reg[EBX].i = 0x10;  // source
-% Reg[EAX].i = 0x5e;  // dest base
+% Reg[EAX].i = 0x1ffe;  // dest base
 % Reg[ECX].i = 0x2;  // dest index
 == 0x1  # code segment
 # op  ModR/M  SIB   displacement  immediate
   01  1c      08                             # add EBX to *(EAX+ECX)
 # ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB)
 # SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX)
-== 0x60  # data segment
+== 0x2000  # data segment
 01 00 00 00  # 1
 +run: add EBX to r/m32
-+run: effective address is initially 0x5e (EAX)
-+run: effective address is 0x60 (after adding ECX*1)
++run: effective address is initially 0x1ffe (EAX)
++run: effective address is 0x2000 (after adding ECX*1)
 +run: storing 0x00000011
 
 :(scenario add_r32_to_mem_at_displacement_using_sib)
 % Reg[EBX].i = 0x10;  // source
 == 0x1  # code segment
 # op  ModR/M  SIB   displacement  immediate
-  01  1c      25    60 00 00 00              # add EBX to *0x60
+  01  1c      25    00 20 00 00              # add EBX to *0x2000
 # ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB)
 # SIB in binary: 00 (scale 1) 100 (no index) 101 (not EBP but disp32)
-== 0x60  # data segment
+== 0x2000  # data segment
 01 00 00 00  # 1
 +run: add EBX to r/m32
-+run: effective address is initially 0x60 (disp32)
-+run: effective address is 0x60
++run: effective address is initially 0x2000 (disp32)
++run: effective address is 0x2000
 +run: storing 0x00000011
 
 //:
 
 :(scenario add_r32_to_mem_at_base_r32_index_r32_plus_disp8)
 % Reg[EBX].i = 0x10;  // source
-% Reg[EAX].i = 0x59;  // dest base
+% Reg[EAX].i = 0x1ff9;  // dest base
 % Reg[ECX].i = 0x5;  // dest index
 == 0x1  # code segment
 # op  ModR/M  SIB   displacement  immediate
   01  5c      08    02                       # add EBX to *(EAX+ECX+2)
 # ModR/M in binary: 01 (indirect+disp8 mode) 011 (src EBX) 100 (dest in SIB)
 # SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX)
-== 0x60  # data segment
+== 0x2000  # data segment
 01 00 00 00  # 1
 +run: add EBX to r/m32
-+run: effective address is initially 0x59 (EAX)
-+run: effective address is 0x5e (after adding ECX*1)
-+run: effective address is 0x60 (after adding disp8)
++run: effective address is initially 0x1ff9 (EAX)
++run: effective address is 0x1ffe (after adding ECX*1)
++run: effective address is 0x2000 (after adding disp8)
 +run: storing 0x00000011
 
 :(before "End Mod 1 Special-cases(addr)")
@@ -104,19 +104,19 @@ case 4:  // exception: mod 0b01 rm 0b100 => incoming SIB (scale-index-base) byte
 
 :(scenario add_r32_to_mem_at_base_r32_index_r32_plus_disp32)
 % Reg[EBX].i = 0x10;  // source
-% Reg[EAX].i = 0x59;  // dest base
+% Reg[EAX].i = 0x1ff9;  // dest base
 % Reg[ECX].i = 0x5;  // dest index
 == 0x1  # code segment
 # op  ModR/M  SIB   displacement  immediate
   01  9c      08    02 00 00 00              # add EBX to *(EAX+ECX+2)
 # ModR/M in binary: 10 (indirect+disp32 mode) 011 (src EBX) 100 (dest in SIB)
 # SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX)
-== 0x60  # data segment
+== 0x2000  # data segment
 01 00 00 00  # 1
 +run: add EBX to r/m32
-+run: effective address is initially 0x59 (EAX)
-+run: effective address is 0x5e (after adding ECX*1)
-+run: effective address is 0x60 (after adding disp32)
++run: effective address is initially 0x1ff9 (EAX)
++run: effective address is 0x1ffe (after adding ECX*1)
++run: effective address is 0x2000 (after adding disp32)
 +run: storing 0x00000011
 
 :(before "End Mod 2 Special-cases(addr)")