about summary refs log tree commit diff stats
path: root/subx/014immediate_addressing.cc
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-07-20 17:08:55 -0700
committerKartik Agaram <vc@akkartik.com>2018-07-20 17:08:55 -0700
commit0ca791cd8cb84f71da011b3f3827c61126011492 (patch)
tree8f6b27c56284c267dff5e2c2f6c122fa9bf220eb /subx/014immediate_addressing.cc
parent3fa78f1c16714cf39e388757a046ed4e010ef2b9 (diff)
downloadmu-0ca791cd8cb84f71da011b3f3827c61126011492.tar.gz
4376 - subx: online help includes supported opcodes
Diffstat (limited to 'subx/014immediate_addressing.cc')
-rw-r--r--subx/014immediate_addressing.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/subx/014immediate_addressing.cc b/subx/014immediate_addressing.cc
index 11e825b8..9a04215f 100644
--- a/subx/014immediate_addressing.cc
+++ b/subx/014immediate_addressing.cc
@@ -1,5 +1,8 @@
 //: instructions that (immediately) contain an argument to act with
 
+:(before "End Initialize Op Names(name)")
+put(name, 0x81, "combine rm32 with imm32 based on subop");
+
 :(scenario add_imm32_to_r32)
 % Reg[EBX].i = 1;
 == 0x1
@@ -48,6 +51,9 @@ case 0x81: {  // combine imm32 with r/m32
 
 //:: subtract
 
+:(before "End Initialize Op Names(name)")
+put(name, 0x2d, "subtract imm32 from R0 (EAX)");
+
 :(scenario subtract_imm32_from_eax)
 % Reg[EAX].i = 0x0d0c0baa;
 == 0x1
@@ -101,6 +107,9 @@ case 5: {
 
 //:: and
 
+:(before "End Initialize Op Names(name)")
+put(name, 0x25, "R0 = bitwise AND of imm32 with R0 (EAX)");
+
 :(scenario and_imm32_with_eax)
 % Reg[EAX].i = 0xff;
 == 0x1
@@ -154,6 +163,9 @@ case 4: {
 
 //:: or
 
+:(before "End Initialize Op Names(name)")
+put(name, 0x0d, "R0 = bitwise OR of imm32 with R0 (EAX)");
+
 :(scenario or_imm32_with_eax)
 % Reg[EAX].i = 0xd0c0b0a0;
 == 0x1
@@ -205,6 +217,9 @@ case 1: {
 
 //:: xor
 
+:(before "End Initialize Op Names(name)")
+put(name, 0x35, "R0 = bitwise XOR of imm32 with R0 (EAX)");
+
 :(scenario xor_imm32_with_eax)
 % Reg[EAX].i = 0xddccb0a0;
 == 0x1
@@ -256,6 +271,9 @@ case 6: {
 
 //:: compare (cmp)
 
+:(before "End Initialize Op Names(name)")
+put(name, 0x3d, "subtract imm32 from R0 (EAX)");
+
 :(scenario compare_imm32_with_eax_greater)
 % Reg[EAX].i = 0x0d0c0b0a;
 == 0x1
@@ -377,6 +395,16 @@ case 7: {
 
 //:: copy (mov)
 
+:(before "End Initialize Op Names(name)")
+put(name, 0xb8, "copy imm32 to R0 (EAX)");
+put(name, 0xb9, "copy imm32 to R1 (ECX)");
+put(name, 0xba, "copy imm32 to R2 (EDX)");
+put(name, 0xbb, "copy imm32 to R3 (EBX)");
+put(name, 0xbc, "copy imm32 to R4 (ESP)");
+put(name, 0xbd, "copy imm32 to R5 (EBP)");
+put(name, 0xbe, "copy imm32 to R6 (ESI)");
+put(name, 0xbf, "copy imm32 to R7 (EDI)");
+
 :(scenario copy_imm32_to_r32)
 == 0x1
 # op  ModR/M  SIB   displacement  immediate
@@ -401,6 +429,9 @@ case 0xbf: {  // copy imm32 to r32
 
 //:
 
+:(before "End Initialize Op Names(name)")
+put(name, 0xc7, "copy imm32 to rm32");
+
 :(scenario copy_imm32_to_mem_at_r32)
 % Reg[EBX].i = 0x60;
 == 0x1
@@ -422,6 +453,9 @@ case 0xc7: {  // copy imm32 to r32
 
 //:: push
 
+:(before "End Initialize Op Names(name)")
+put(name, 0x68, "push imm32 to stack");
+
 :(scenario push_imm32)
 % Reg[ESP].u = 0x14;
 == 0x1