about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorserpilliere <fabrice.desclaux@cea.fr>2015-07-20 21:52:34 +0200
committerserpilliere <fabrice.desclaux@cea.fr>2015-07-20 21:52:34 +0200
commitb3a837cda82456e95b2d40953dc12141dc860c96 (patch)
tree8e9bf6f6a6a9390e991135b1ee9441a81270f5e8
parente82d888243fc5f283e7a3d5b12e5cefaf950edc5 (diff)
downloadmiasm-b3a837cda82456e95b2d40953dc12141dc860c96.tar.gz
miasm-b3a837cda82456e95b2d40953dc12141dc860c96.zip
X86/Arch: push/pop 16 becomes pushw/popw
-rw-r--r--miasm2/arch/x86/arch.py73
1 files changed, 56 insertions, 17 deletions
diff --git a/miasm2/arch/x86/arch.py b/miasm2/arch/x86/arch.py
index 33fd428f..f966c860 100644
--- a/miasm2/arch/x86/arch.py
+++ b/miasm2/arch/x86/arch.py
@@ -3751,13 +3751,30 @@ addop("outsd", [bs8(0x6f), bs_opmode64])
 
 # addop("pause", [bs8(0xf3), bs8(0x90)])
 
-addop("pop", [bs8(0x8f), stk] + rmmod(d0))
-addop("pop", [bs("01011"), stk, reg])
-addop("pop", [bs8(0x1f), stk, d_ds])
-addop("pop", [bs8(0x07), stk, d_es])
-addop("pop", [bs8(0x17), stk, d_ss])
-addop("pop", [bs8(0x0f), stk, bs8(0xa1), d_fs])
-addop("pop", [bs8(0x0f), stk, bs8(0xa9), d_gs])
+addop("popw", [bs8(0x8f), stk, bs_opmode16] + rmmod(d0))
+addop("popw", [bs("01011"), stk, reg, bs_opmode16])
+addop("popw", [bs8(0x1f), stk, d_ds, bs_opmode16])
+addop("popw", [bs8(0x07), stk, d_es, bs_opmode16])
+addop("popw", [bs8(0x17), stk, d_ss, bs_opmode16])
+addop("popw", [bs8(0x0f), stk, bs8(0xa1), d_fs, bs_opmode16])
+addop("popw", [bs8(0x0f), stk, bs8(0xa9), d_gs, bs_opmode16])
+
+addop("pop", [bs8(0x8f), stk, bs_opmode32] + rmmod(d0))
+addop("pop", [bs("01011"), stk, reg, bs_opmode32])
+addop("pop", [bs8(0x1f), stk, d_ds, bs_opmode32])
+addop("pop", [bs8(0x07), stk, d_es, bs_opmode32])
+addop("pop", [bs8(0x17), stk, d_ss, bs_opmode32])
+addop("pop", [bs8(0x0f), stk, bs8(0xa1), d_fs, bs_opmode32])
+addop("pop", [bs8(0x0f), stk, bs8(0xa9), d_gs, bs_opmode32])
+
+addop("pop", [bs8(0x8f), stk, bs_opmode64] + rmmod(d0))
+addop("pop", [bs("01011"), stk, reg, bs_opmode64])
+addop("pop", [bs8(0x1f), stk, d_ds, bs_opmode64])
+addop("pop", [bs8(0x07), stk, d_es, bs_opmode64])
+addop("pop", [bs8(0x17), stk, d_ss, bs_opmode64])
+addop("pop", [bs8(0x0f), stk, bs8(0xa1), d_fs, bs_opmode64])
+addop("pop", [bs8(0x0f), stk, bs8(0xa9), d_gs, bs_opmode64])
+
 
 # popa_name = {16:'POPA', 32:'POPAD'}
 # bs_popa_name = bs_modname_size(l=0, name=popa_name)
@@ -3777,16 +3794,38 @@ addop("prefetch1", [bs8(0x0f), bs8(0x18)] + rmmod(d2, rm_arg_m08))
 addop("prefetch2", [bs8(0x0f), bs8(0x18)] + rmmod(d3, rm_arg_m08))
 addop("prefetchnta", [bs8(0x0f), bs8(0x18)] + rmmod(d0, rm_arg_m08))
 
-addop("push", [bs8(0xff), stk] + rmmod(d6))
-addop("push", [bs("01010"), stk, reg])
-addop("push", [bs8(0x6a), s08, stk])
-addop("push", [bs8(0x68), d_imm, stk])
-addop("push", [bs8(0x0e), stk, d_cs])
-addop("push", [bs8(0x16), stk, d_ss])
-addop("push", [bs8(0x1e), stk, d_ds])
-addop("push", [bs8(0x06), stk, d_es])
-addop("push", [bs8(0x0f), stk, bs8(0xa0), d_fs])
-addop("push", [bs8(0x0f), stk, bs8(0xa8), d_gs])
+addop("pushw", [bs8(0xff), stk, bs_opmode16] + rmmod(d6))
+addop("pushw", [bs("01010"), stk, reg, bs_opmode16])
+addop("pushw", [bs8(0x6a), s08, stk, bs_opmode16])
+addop("pushw", [bs8(0x68), d_imm, stk, bs_opmode16])
+addop("pushw", [bs8(0x0e), stk, d_cs, bs_opmode16])
+addop("pushw", [bs8(0x16), stk, d_ss, bs_opmode16])
+addop("pushw", [bs8(0x1e), stk, d_ds, bs_opmode16])
+addop("pushw", [bs8(0x06), stk, d_es, bs_opmode16])
+addop("pushw", [bs8(0x0f), stk, bs8(0xa0), d_fs, bs_opmode16])
+addop("pushw", [bs8(0x0f), stk, bs8(0xa8), d_gs, bs_opmode16])
+
+addop("push", [bs8(0xff), stk, bs_opmode32] + rmmod(d6))
+addop("push", [bs("01010"), stk, reg, bs_opmode32])
+addop("push", [bs8(0x6a), s08, stk, bs_opmode32])
+addop("push", [bs8(0x68), d_imm, stk, bs_opmode32])
+addop("push", [bs8(0x0e), stk, d_cs, bs_opmode32])
+addop("push", [bs8(0x16), stk, d_ss, bs_opmode32])
+addop("push", [bs8(0x1e), stk, d_ds, bs_opmode32])
+addop("push", [bs8(0x06), stk, d_es, bs_opmode32])
+addop("push", [bs8(0x0f), stk, bs8(0xa0), d_fs, bs_opmode32])
+addop("push", [bs8(0x0f), stk, bs8(0xa8), d_gs, bs_opmode32])
+
+addop("push", [bs8(0xff), stk, bs_opmode64] + rmmod(d6))
+addop("push", [bs("01010"), stk, reg, bs_opmode64])
+addop("push", [bs8(0x6a), s08, stk, bs_opmode64])
+addop("push", [bs8(0x68), d_imm, stk, bs_opmode64])
+addop("push", [bs8(0x0e), stk, d_cs, bs_opmode64])
+addop("push", [bs8(0x16), stk, d_ss, bs_opmode64])
+addop("push", [bs8(0x1e), stk, d_ds, bs_opmode64])
+addop("push", [bs8(0x06), stk, d_es, bs_opmode64])
+addop("push", [bs8(0x0f), stk, bs8(0xa0), d_fs, bs_opmode64])
+addop("push", [bs8(0x0f), stk, bs8(0xa8), d_gs, bs_opmode64])
 
 # pusha_name = {16:'PUSHA', 32:'PUSHAD'}
 # bs_pusha_name = bs_modname_size(l=0, name=pusha_name)