OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 /* | |
6 * Table of relevant information about how to decode the ModR/M byte. | |
7 * Based on information in the IA 32 Intel Architecture | |
8 * Software Developer's Manual Volume 2: Instruction Set Reference. | |
9 */ | |
10 | |
11 #include "mini_disassembler.h" | |
12 #include "mini_disassembler_types.h" | |
13 | |
14 namespace sidestep { | |
15 | |
16 const ModrmEntry MiniDisassembler::s_ia16_modrm_map_[] = { | |
17 // mod == 00 | |
18 /* r/m == 000 */ { false, false, OS_ZERO }, | |
19 /* r/m == 001 */ { false, false, OS_ZERO }, | |
20 /* r/m == 010 */ { false, false, OS_ZERO }, | |
21 /* r/m == 011 */ { false, false, OS_ZERO }, | |
22 /* r/m == 100 */ { false, false, OS_ZERO }, | |
23 /* r/m == 101 */ { false, false, OS_ZERO }, | |
24 /* r/m == 110 */ { true, false, OS_WORD }, | |
25 /* r/m == 111 */ { false, false, OS_ZERO }, | |
26 // mod == 01 | |
27 /* r/m == 000 */ { true, false, OS_BYTE }, | |
28 /* r/m == 001 */ { true, false, OS_BYTE }, | |
29 /* r/m == 010 */ { true, false, OS_BYTE }, | |
30 /* r/m == 011 */ { true, false, OS_BYTE }, | |
31 /* r/m == 100 */ { true, false, OS_BYTE }, | |
32 /* r/m == 101 */ { true, false, OS_BYTE }, | |
33 /* r/m == 110 */ { true, false, OS_BYTE }, | |
34 /* r/m == 111 */ { true, false, OS_BYTE }, | |
35 // mod == 10 | |
36 /* r/m == 000 */ { true, false, OS_WORD }, | |
37 /* r/m == 001 */ { true, false, OS_WORD }, | |
38 /* r/m == 010 */ { true, false, OS_WORD }, | |
39 /* r/m == 011 */ { true, false, OS_WORD }, | |
40 /* r/m == 100 */ { true, false, OS_WORD }, | |
41 /* r/m == 101 */ { true, false, OS_WORD }, | |
42 /* r/m == 110 */ { true, false, OS_WORD }, | |
43 /* r/m == 111 */ { true, false, OS_WORD }, | |
44 // mod == 11 | |
45 /* r/m == 000 */ { false, false, OS_ZERO }, | |
46 /* r/m == 001 */ { false, false, OS_ZERO }, | |
47 /* r/m == 010 */ { false, false, OS_ZERO }, | |
48 /* r/m == 011 */ { false, false, OS_ZERO }, | |
49 /* r/m == 100 */ { false, false, OS_ZERO }, | |
50 /* r/m == 101 */ { false, false, OS_ZERO }, | |
51 /* r/m == 110 */ { false, false, OS_ZERO }, | |
52 /* r/m == 111 */ { false, false, OS_ZERO } | |
53 }; | |
54 | |
55 const ModrmEntry MiniDisassembler::s_ia32_modrm_map_[] = { | |
56 // mod == 00 | |
57 /* r/m == 000 */ { false, false, OS_ZERO }, | |
58 /* r/m == 001 */ { false, false, OS_ZERO }, | |
59 /* r/m == 010 */ { false, false, OS_ZERO }, | |
60 /* r/m == 011 */ { false, false, OS_ZERO }, | |
61 /* r/m == 100 */ { false, true, OS_ZERO }, | |
62 /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, | |
63 /* r/m == 110 */ { false, false, OS_ZERO }, | |
64 /* r/m == 111 */ { false, false, OS_ZERO }, | |
65 // mod == 01 | |
66 /* r/m == 000 */ { true, false, OS_BYTE }, | |
67 /* r/m == 001 */ { true, false, OS_BYTE }, | |
68 /* r/m == 010 */ { true, false, OS_BYTE }, | |
69 /* r/m == 011 */ { true, false, OS_BYTE }, | |
70 /* r/m == 100 */ { true, true, OS_BYTE }, | |
71 /* r/m == 101 */ { true, false, OS_BYTE }, | |
72 /* r/m == 110 */ { true, false, OS_BYTE }, | |
73 /* r/m == 111 */ { true, false, OS_BYTE }, | |
74 // mod == 10 | |
75 /* r/m == 000 */ { true, false, OS_DOUBLE_WORD }, | |
76 /* r/m == 001 */ { true, false, OS_DOUBLE_WORD }, | |
77 /* r/m == 010 */ { true, false, OS_DOUBLE_WORD }, | |
78 /* r/m == 011 */ { true, false, OS_DOUBLE_WORD }, | |
79 /* r/m == 100 */ { true, true, OS_DOUBLE_WORD }, | |
80 /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, | |
81 /* r/m == 110 */ { true, false, OS_DOUBLE_WORD }, | |
82 /* r/m == 111 */ { true, false, OS_DOUBLE_WORD }, | |
83 // mod == 11 | |
84 /* r/m == 000 */ { false, false, OS_ZERO }, | |
85 /* r/m == 001 */ { false, false, OS_ZERO }, | |
86 /* r/m == 010 */ { false, false, OS_ZERO }, | |
87 /* r/m == 011 */ { false, false, OS_ZERO }, | |
88 /* r/m == 100 */ { false, false, OS_ZERO }, | |
89 /* r/m == 101 */ { false, false, OS_ZERO }, | |
90 /* r/m == 110 */ { false, false, OS_ZERO }, | |
91 /* r/m == 111 */ { false, false, OS_ZERO }, | |
92 }; | |
93 | |
94 }; // namespace sidestep | |
OLD | NEW |