Re: I'm having trouble finding opcodes
- From: Herbert Kleebauer <klee@xxxxxxxxx>
- Date: Sun, 30 Apr 2006 20:43:05 +0200
corey wrote:
Where is hex BC? Anyone know?
Help please i'm trying to write a disassembler - I've managed it for
Z80 but I can't even start with x86.
It's all in the processor manual. Here a list which (at least I
think) is much better readable:
r0 (eax,ax,al)
r1 (edx,dx,dl)
r2 (ecx,cx,cl)
r3 (ebx,bx,bl)
r4 (ebp,bp) ; nur .w und .l
r5 (esi,si) ; nur .w und .l
r6 (edi,di) ; nur .w und .l
r7 (esp,sp) ; nur .w und .l
m0 (ah) ; nur .b
m1 (dh) ; nur .b
m2 (ch) ; nur .b
m3 (bh) ; nur .b
BEFEHLSFORMAT:
=============
Anzahl Bytes gueltige Werte
--------------------|----------------|--------------
Instruction Prefix | 0 oder 1 | $f3 (rep,repeq); $f2 (rep,repne);
| | $f0 (lock)
Addresssize Prefix | 0 oder 1 | $67
Operandsize Prefix | 0 oder 1 | $66
Segment Override | 0 oder 1 | $3e (s0); $26 (s1); $64 (s2);
| | $65 (s3); $2e (s6); $36 (s7);
Opcode | 1 oder 2 | siehe Tabelle Opcodes
ModR/M | 0 oder 1 | siehe Tabelle ModR/M
SIB | 0 oder 1 | siehe Tabelle SIB
Dispacement | 0,1,2 oder 4 | beliebig
Immediate | 0,1,2 oder 4 | beliebig
OPCODES:
=======
00 /r add.b rk,ADRS
01 /r add.w rk,ADRS
add.l rk,ADRS
02 /r add.b ADRS,rk
03 /r add.w ADRS,rk
add.l ADRS,rk
04 (ib) add.b #imm8, r0
05 (iw) add.w #imm16,r0
add.l #imm32,r0
06 move.w s1,-(sp)
move.l s1,-(sp)
07 move.w (sp)+,s1
move.l (sp)+,s1
08 /r or.b rk,ADRS
09 /r or.w rk,ADRS
or.l rk,ADRS
0a /r or.b ADRS,rk
0b /r or.w ADRS,rk
or.l ADRS,rk
0c (ib) or.b #imm8, r0
0d (iw) or.w #imm16,r0
or.l #imm32,r0
0e move.w s6,-(sp)
0f 00 /0 move.w ldtr,ADRS
/1 move.w tr,ADRS
/2 move.w ADRS,ldtr
/3 move.w ADRS,tr
/4 verr.w ADRS
/5 verw.w ADRS
0f 01 /0 move.w gdtr,MADRS
move.l gdtr,MADRS
/1 move.w idtr,MADRS
move.l idtr,MADRS
/2 move.w MADRS,gdtr
move.l MADRS,gdtr
/3 move.w MADRS,idtr
move.l MADRS,idtr
/4 move.w cr0,ADRS
/6 move.w ADRS,cr0
0f 02 /r lar.w ADRS,rk
lar.l ADRS,rk
0f 03 /r ldsl.w ADRS,rk
ldsl.l ADRS,rk
0f 06 bclr.w #3,cr0
0f 08 invl_cache
0f 09 invl_cache_wb
0f 20 /j move.l crj,rk (rk=ADRS: MOD=11 R/M=k)
0f 21 /j move.l drj,rk (rk=ADRS: MOD=11 R/M=k)
0f 22 /j move.l rk,crj (rk=ADRS: MOD=11 R/M=k)
0f 23 /j move.l rk,drj (rk=ADRS: MOD=11 R/M=k)
0f 24 /j move.l trj,rk (rk=ADRS: MOD=11 R/M=k)
0f 26 /j move.l rk,trj (rk=ADRS: MOD=11 R/M=k)
0f 80 cw bvs.w label
cl bvs.l label
0f 81 cw bvc.w label
cl bvc.l label
0f 82 cw bcs.w label
cl bcs.l label
0f 83 cw bcc.w label
cl bcc.l label
0f 84 cw beq.w label
cl beq.l label
0f 85 cw bne.w label
cl bne.l label
0f 86 cw bls.w label
cl bls.l label
0f 87 cw bhi.w label
cl bhi.l label
0f 88 cw bmi.w label
cl bmi.l label
0f 89 cw bpl.w label
cl bpl.l label
0f 8a cw bps.w label
cl bps.l label
0f 8b cw bpc.w label
cl bpc.l label
0f 8c cw blt.w label
cl blt.l label
0f 8d cw bge.w label
cl bge.l label
0f 8e cw ble.w label
cl ble.l label
0f 8f cw bgt.w label
cl bgt.l label
0f 90 svs.b ADRS
0f 91 svc.b ADRS
0f 92 scs.b ADRS
0f 93 scc.b ADRS
0f 94 seq.b ADRS
0f 95 sne.b ADRS
0f 96 sls.b ADRS
0f 97 shi.b ADRS
0f 98 smi.b ADRS
0f 99 spl.b ADRS
0f 9a sps.b ADRS
0f 9b spc.b ADRS
0f 9c slt.b ADRS
0f 9d sge.b ADRS
0f 9e sle.b ADRS
0f 9f sgt.b ADRS
0f a0 move.w s2,-(sp)
move.l s2,-(sp)
0f a1 move.w (sp)+,s2
move.l (sp)+,s2
0f a3 /r btst.w rk,ADRS
btst.l rk,ADRS
0f a4 /r ib dsl.w #imm8,ADRS<rk
dsl.l #imm8,ADRS<rk
0f a5 /r dsl.w r2,ADRS<rk
dsl.l r2,ADRS<rk
0f a8 move.w s3,-(sp)
move.l s3,-(sp)
0f a9 move.w (sp)+,s3
move.l (sp)+,s3
0f ab /r bset.w rk,ADRS
bset.l rk,ADRS
0f ac /r ib dsr.w #imm8,rk>ADRS
dsr.l #imm8,rk>ADRS
0f ad /r dsr.w r2,rk>ADRS
dsr.l r2,rk>ADRS
0f af /r muls.w ADRS,rk,rk
muls.l ADRS,rk,rk
0f b0 /r cas.b r0,rk,ADRS
0f b1 /r cas.w r0,rk,ADRS
cas.l r0,rk,ADRS
0f b2 /r move.w MADRS,s7|rk
move.l MADRS,s7|rk
0f b3 /r bclr.w rk,ADRS
bclr.l rk,ADRS
0f b4 /r move.w MADRS,s2|rk
move.l MADRS,s2|rk
0f b5 /r move.w MADRS,s3|rk
move.l MADRS,s3|rk
0f b6 /r movu.bw ADRS,rk
movu.bl ADRS,rk
0f b7 /r movu.wl ADRS,rk
(movu.ww ADRS,rk) ; = move.w ADRS,rk
0f ba /4 (ib) btst.w #imm8,ADRS
btst.l #imm8,ADRS
0f ba /5 (ib) bset.w #imm8,ADRS
bset.l #imm8,ADRS
0f ba /6 (ib) bclr.w #imm8,ADRS
bclr.l #imm8,ADRS
0f ba /7 (ib) bchg.w #imm8,ADRS
bchg.l #imm8,ADRS
0f bb /r bchg.w rk,ADRS
bchg.l rk,ADRS
0f bc /r bscf.w ADRS,rk
bscf.l ADRS,rk
0f bd /r bscr.w ADRS,rk
bscr.l ADRS,rk
0f be /r movs.bw ADRS,rk
movs.bl ADRS,rk
0f bf /r movs.wl ADRS,rk
(movs.ww ADRS,rk) ; = move.w ADRS,rk
0f c0 /r xadd.b rk,ADRS
0f c1 /r xadd.w rk,ADRS
xadd.l rk,ADRS
0f c8 bswap.l r0
0f c9 bswap.l r2
0f ca bswap.l r1
0f cb bswap.l r3
0f cc bswap.l r7
0f cd bswap.l r4
0f ce bswap.l r5
0f cf bswap.l r6
10 /r addc.b ri,ADRS
11 /r addc.w ri,ADRS
addc.l ri,ADRS
12 /r addc.b ADRS,ri
13 /r addc.w ADRS,ri
addc.l ADRS,ri
14 (ib) addc.b #imm8, r0
15 (iw) addc.w #imm16,r0
(il) addc.l #imm32,r0
16 move.w s7,-(sp)
move.l s7,-(sp)
17 move.w (sp)+,s7
move.l (sp)+,s7
18 /r subc.b ri,ADRS
19 /r subc.w ri,ADRS
subc.l ri,ADRS
1a /r subc.b ADRS,ri
1b /r subc.w ADRS,ri
subc.l ADRS,ri
1c (ib) subc.b #imm8, r0
1d (iw) subc.w #imm16,r0
(il) subc.l #imm32,r0
1e move.w s0,-(sp)
move.l s0,-(sp)
1f move.w (sp)+,s0
move.l (sp)+,s0
20 /r and.b ri,ADRS
21 /r and.w ri,ADRS
and.l ri,ADRS
22 /r and.b ADRS,ri
23 /r and.w ADRS,ri
and.l ADRS,ri
24 (ib) and.b #imm8, r0
25 (iw) and.w #imm16,r0
(il) and.l #imm32,r0
26 {s1}
27 adj_dec_add r0
28 /r sub.b ri,ADRS
29 /r sub.w ri,ADRS
sub.l ri,ADRS
2a /r sub.b ADRS,ri
2b /r sub.w ADRS,ri
sub.l ADRS,ri
2c (ib) sub.b #imm8, r0
2d (iw) sub.w #imm16,r0
(il) sub.l #imm32,r0
2e {s6}
2f adj_dec_sub r0
30 /r eor.b ri,ADRS
31 /r eor.w ri,ADRS
eor.l ri,ADRS
32 /r eor.b ADRS,ri
33 /r eor.w ADRS,ri
eor.l ADRS,ri
34 (ib) eor.b #imm8, r0
35 (iw) eor.w #imm16,r0
(il) eor.l #imm32,r0
36 {s7}
37 adj_asc_add r0
38 /r cmp.b ri,ADRS
39 /r cmp.w ri,ADRS
cmp.l ri,ADRS
3a /r cmp.b ADRS,ri
3b /r cmp.w ADRS,ri
cmp.l ADRS,ri
3c (ib) cmp.b #imm8, r0
3d (iw) cmp.w #imm16,r0
(il) cmp.l #imm32,r0
3e {s0}
3f adj_asc_sub r0
40 inc.w r0
inc.l r0
41 inc.w r2
inc.l r2
42 inc.w r1
inc.l r1
43 inc.w r3
inc.l r3
44 inc.w r7
inc.l r7
45 inc.w r4
inc.l r4
46 inc.w r5
inc.l r5
47 inc.w r6
inc.l r6
48 dec.w r0
dec.l r0
49 dec.w r2
dec.l r2
4a dec.w r1
dec.l r1
4b dec.w r3
dec.l r3
4c dec.w r7
dec.l r7
4d dec.w r4
dec.l r4
4e dec.w r5
dec.l r5
4f dec.w r6
dec.l r6
50 move.w r0,-(sp)
move.l r0,-(sp)
51 move.w r2,-(sp)
move.l r2,-(sp)
52 move.w r1,-(sp)
move.l r1,-(sp)
53 move.w r3,-(sp)
move.l r3,-(sp)
54 move.w r7,-(sp)
move.l r7,-(sp)
55 move.w r4,-(sp)
move.l r4,-(sp)
56 move.w r5,-(sp)
move.l r5,-(sp)
57 move.w r6,-(sp)
move.l r6,-(sp)
58 move.w (sp)+,r0
move.l (sp)+,r0
59 move.w (sp)+,r2
move.l (sp)+,r2
5a move.w (sp)+,r1
move.l (sp)+,r1
5b move.w (sp)+,r3
move.l (sp)+,r3
5c move.w (sp)+,r7
move.l (sp)+,r7
5d move.w (sp)+,r4
move.l (sp)+,r4
5e move.w (sp)+,r5
move.l (sp)+,r5
5f move.w (sp)+,r6
move.l (sp)+,r6
60 movem.w r0-r7,-(sp)
movem.l r0-r7,-(sp)
61 movem.w (sp)+,r0-r7
movem.l (sp)+,r0-r7
62 /r chk.w MADRS,rk
chk.l MADRS,rk
63 /r arpl.w rk,ADRS
64 {s2}
65 {s3}
66 operand-size prefix
67 address-size prefix
68 (iw) move.w #imm16,-(sp)
(il) move.l #imm32,-(sp)
69 /r (iw) muls.w #imm16,ADRS,rk
(il) muls.l #imm32,ADRS,rk
6a ib moveq.w #imm8,-(sp)
moveq.l #imm8,-(sp)
6b /r (ib) mulsq.w #imm8,ADRS,rk
mulsq.l #imm8,ADRS,rk
6c in.b r1,(r6.w)+-{s1}
in.b r1,(r6.l)+-{s1}
6d in.w r1,(r6.w)+-{s1}
in.w r1,(r6.l)+-{s1}
in.l r1,(r6.w)+-{s1}
in.l r1,(r6.l)+-{s1}
6e out.b (r5.w)+-{si},r1
out.b (r5.l)+-{si},r1
6f out.w (r5.w)+-{si},r1
out.w (r5.l)+-{si},r1
out.l (r5.w)+-{si},r1
out.l (r5.l)+-{si},r1
70 (cb) bvs.b label
71 (cb) bvc.b label
72 (cb) bcs.b label
73 (cb) bcc.b label
74 (cb) beq.b label
75 (cb) bne.b label
76 (cb) bls.b label
77 (cb) bhi.b label
78 (cb) bmi.b label
79 (cb) bpl.b label
7a (cb) bps.b label
7b (cb) bpc.b label
7c (cb) blt.b label
7d (cb) bge.b label
7e (cb) ble.b label
7f (cb) bgt.b label
80 /0 (ib) add.b #imm8,ADRS
/1 (ib) or.b #imm8,ADRS
/2 (ib) addc.b #imm8,ADRS
/3 (ib) subc.b #imm8,ADRS
/4 (ib) and.b #imm8,ADRS
/5 (ib) sub.b #imm8,ADRS
/6 (ib) eor.b #imm8,ADRS
/7 (ib) cmp.b #imm8,ADRS
81 /0 (iw) add.w #imm16,ADRS
(il) add.l #imm32,ADRS
/1 (iw) or.w #imm16,ADRS
(il) or.l #imm32,ADRS
/2 (iw) addc.w #imm16,ADRS
(il) addc.l #imm32,ADRS
/3 (iw) subc.w #imm16,ADRS
(il) subc.l #imm32,ADRS
/4 (iw) and.w #imm16,ADRS
(il) and.l #imm32,ADRS
/5 (iw) sub.w #imm16,ADRS
(il) sub.l #imm32,ADRS
/6 (iw) eor.w #imm16,ADRS
(il) eor.l #imm32,ADRS
/7 (iw) cmp.w #imm16,ADRS
(il) cmp.l #imm32,ADRS
82 (wie 80 ?)
83 /0 (ib) addq.w #imm8,ADRS
addq.l #imm8,ADRS
/1 (ib) orq.w #imm8,ADRS
orq.l #imm8,ADRS
/2 (ib) addcq.w #imm8,ADRS
addcq.l #imm8,ADRS
/3 (ib) subcq.w #imm8,ADRS
subcq.l #imm8,ADRS
/4 (ib) andq.w #imm8,ADRS
andq.l #imm8,ADRS
/5 (ib) subq.w #imm8,ADRS
subq.l #imm8,ADRS
/6 (ib) eorq.w #imm8,ADRS
eorq.l #imm8,ADRS
/7 (ib) cmpq.w #imm8,ADRS
cmpq.l #imm8,ADRS
84 /r tst.b rk,ADRS
85 /r tst.w rk,ADRS
tst.l rk,ADRS
86 /r exg.b rk,ADRS
87 /r exg.w rk,ADRS
exg.l rk,ADRS
88 /r move.b rk,ADRS
89 /r move.w rk,ADRS
move.l rk,ADRS
8a /r move.b ADRS,rk
8b /r move.w ADRS,rk
move.l ADRS,rk
8c /0 move.w s1,ADRS
/1 move.w s6,ADRS
/2 move.w s7,ADRS
/3 move.w s0,ADRS
/4 move.w s2,ADRS
/5 move.w s3,ADRS
8d /r lea.w MADRS,rk
lea.l MADRS,rk
8e /0 move.w ADRS,s1
/2 move.w ADRS,s7
/3 move.w ADRS,s0
/4 move.w ADRS,s2
/5 move.w ADRS,s3
8f /0 move.w (sp)+,ADRS
move.l (sp)+,ADRS
90 nop
91 exg.w r0,r2
exg.l r0,r2
92 exg.w r0,r1
exg.l r0,r1
93 exg.w r0,r3
exg.l r0,r3
94 exg.w r0,r7
exg.l r0,r7
95 exg.w r0,r4
exg.l r0,r4
96 exg.w r0,r5
exg.l r0,r5
97 exg.w r0,r6
exg.l r0,r6
98 ext.w r0
ext.l r0
99 ext.w r0,r0|r1
ext.l r0,r0|r1
9a (cd) jsr.ww segment:label
(cp) jsr.wl segment:label
9b wait
9c move.w sr,-(sp)
move.l sr,-(sp)
9d move.w (sp)+,sr
move.l (sp)+,sr
9e move.b m0,sr
9f move.b sr,m0
a0 (w) move.b OFF16{si},r0
(l) move.b OFF32{si},r0
a1 (w) move.w OFF16{si},r0
move.l OFF16{si},r0
(l) move.w OFF32{si},r0
move.l OFF32{si},r0
a2 (w) move.b r0,OFF16{si}
(l) move.b r0,OFF32{si}
a3 (w) move.w r0,OFF16{si}
move.l r0,OFF16{si}
(l) move.w r0,OFF32{si}
move.l r0,OFF32{si}
a4 move.b (r5.w)+-{si},(r6.w)+-{s1}
move.b (r5.l)+-{si},(r6.l)+-{s1}
a5 move.w (r5.w)+-{si},(r6.w)+-{s1}
move.w (r5.l)+-{si},(r6.l)+-{s1}
move.l (r5.w)+-{si},(r6.w)+-{s1}
move.l (r5.l)+-{si},(r6.l)+-{s1}
a6 cmp.b (r6.w)+-{s1},(r5.w)+-{si}
cmp.b (r6.l)+-{s1},(r5.l)+-{si}
a7 cmp.w (r6.w)+-{s1},(r5.w)+-{si}
cmp.w (r6.l)+-{s1},(r5.l)+-{si}
cmp.l (r6.w)+-{s1},(r5.w)+-{si}
cmp.l (r6.l)+-{s1},(r5.l)+-{si}
a8 (ib) tst.b #imm8,r0
a9 (iw) tst.w #imm16,r0
(il) tst.l #imm32,r0
aa move.b r0,(r6.w)+-{s1}
move.b r0,(r6.l)+-{s1}
ab move.w r0,(r6.w)+-{s1}
move.w r0,(r6.l)+-{s1}
move.l r0,(r6.w)+-{s1}
move.l r0,(r6.l)+-{s1}
ac move.b (r5.w)+-{si},r0
move.b (r5.l)+-{si},r0
ad move.w (r5.w)+-{si},r0
move.w (r5.l)+-{si},r0
move.l (r5.w)+-{si},r0
move.l (r5.l)+-{si},r0
ae cmp.b (r6.w)+-{s1},r0
cmp.b (r6.l)+-{s1},r0
af cmp.w (r6.w)+-{s1},r0
cmp.w (r6.l)+-{s1},r0
cmp.l (r6.w)+-{s1},r0
cmp.l (r6.l)+-{s1},r0
b0 (ib) move.b #imm8,r0
b1 (ib) move.b #imm8,r2
b2 (ib) move.b #imm8,r1
b3 (ib) move.b #imm8,r3
b4 (ib) move.b #imm8,m0
b5 (ib) move.b #imm8,m2
b6 (ib) move.b #imm8,m1
b7 (ib) move.b #imm8,m3
b8 (iw) move.w #imm16,r0
(il) move.l #imm32,r0
b9 (iw) move.w #imm16,r2
(il) move.l #imm32,r2
ba (iw) move.w #imm16,r1
(il) move.l #imm32,r1
bb (iw) move.w #imm16,r3
(il) move.l #imm32,r3
bc (iw) move.w #imm16,r7
(il) move.l #imm32,r7
bd (iw) move.w #imm16,r4
(il) move.l #imm32,r4
be (iw) move.w #imm16,r5
(il) move.l #imm32,r5
bf (iw) move.w #imm16,r6
(il) move.l #imm32,r6
c0 /0 (ib) rol.b #imm8,ADRS
/1 (ib) ror.b #imm8,ADRS
/2 (ib) rocl.b #imm8,ADRS
/3 (ib) rocr.b #imm8,ADRS
/4 (ib) lsl.b #imm8,ADRS
/5 (ib) lsr.b #imm8,ADRS
/6 (ib) asl.b #imm8,ADRS
/7 (ib) asr.b #imm8,ADRS
c1 /0 (ib) rol.w #imm8,ADRS
rol.l #imm8,ADRS
/1 (ib) ror.w #imm8,ADRS
ror.l #imm8,ADRS
/2 (ib) rocl.w #imm8,ADRS
rocl.l #imm8,ADRS
/3 (ib) rocr.w #imm8,ADRS
rocr.l #imm8,ADRS
/4 (ib) lsl.w #imm8,ADRS
lsl.l #imm8,ADRS
/5 (ib) lsr.w #imm8,ADRS
lsr.l #imm8,ADRS
/6 (ib) asl.w #imm8,ADRS
asl.l #imm8,ADRS
/7 (ib) asr.w #imm8,ADRS
asr.l #imm8,ADRS
c2 (iw) rts.w #imm16
rts.l #imm16
c3 rts.w
rts.l
c4 /r move.w MADRS,s1|rk
move.l MADRS,s1|rk
c5 /r move.w MADRS,s0|rk
move.l MADRS,s0|rk
c6 /x (ib) move.b #imm8,ADRS
c7 /x (iw) move.w #imm16,ADRS
(il) move.l #imm32,ADRS
c8 (iw) (ib) link.w r4,#imm16,#imm8
link.l r4,#imm16,#imm8
c9 unlk.w r4
unlk.l r4
ca (iw) rts.ww #imm16
rts.ll #imm16
cb rts.ww
rts.ll
cc trap #3
cd (ib) trap #imm8
ce trapv
cf rte.w
rte.l
d0 /0 rol.b #1,ADRS
/1 ror.b #1,ADRS
/2 rocl.b #1,ADRS
/3 rocr.b #1,ADRS
/4 lsl.b #1,ADRS
/5 lsr.b #1,ADRS
/6 asl.b #1,ADRS
/7 asr.b #1,ADRS
d1 /0 rol.w #1,ADRS
rol.l #1,ADRS
/1 ror.w #1,ADRS
ror.l #1,ADRS
/2 rocl.w #1,ADRS
rocl.l #1,ADRS
/3 rocr.w #1,ADRS
rocr.l #1,ADRS
/4 lsl.w #1,ADRS
lsl.l #1,ADRS
/5 lsr.w #1,ADRS
lsr.l #1,ADRS
/6 asl.w #1,ADRS
asl.l #1,ADRS
/7 asr.w #1,ADRS
asr.l #1,ADRS
d2 /0 rol.b r2,ADRS
/1 ror.b r2,ADRS
/2 rocl.b r2,ADRS
/3 rocr.b r2,ADRS
/4 lsl.b r2,ADRS
/5 lsr.b r2,ADRS
/6 asl.b r2,ADRS
/7 asr.b r2,ADRS
d3 /0 rol.w r2,ADRS
rol.l r2,ADRS
/1 ror.w r2,ADRS
ror.l r2,ADRS
/2 rocl.w r2,ADRS
rocl.l r2,ADRS
/3 rocr.w r2,ADRS
rocr.l r2,ADRS
/4 lsl.w r2,ADRS
lsl.l r2,ADRS
/5 lsr.w r2,ADRS
lsr.l r2,ADRS
/6 asl.w r2,ADRS
asl.l r2,ADRS
/7 asr.w r2,ADRS
asr.l r2,ADRS
d4 0a adj_asc_mul r0
(ib) adj_asc_mul #imm8,r0 (imm8 <> $0a)
d5 0a adj_asc_div r0
(ib) adj_asc_div #imm8,r0 (imm8 <> $0a)
d6 ext.b CARRY,r0 ; undokumentierter Befehl
; r0.b = 0 falls C=0
; r0.b = $ff falls C=1
d7 move.b (r3.w,r0.b){si},r0
move.b (r3.l,r0.b){si},r0
d8 \
d9 \
da |
db \ Escape to
dc / Coprozessor
dd |
de /
df /
e0 (cb) dbeq.w r2,label
dbeq.l r2,label
e1 (cb) dbne.w r2,label
dbne.l r2,label
e2 (cb) dbf.w r2,label
dbf.l r2,label
e3 (cb) beqr2w.b label
beqr2l.b label
e4 (ib) in.b #imm8,r0
e5 (ib) in.w #imm8,r0
in.l #imm8,r0
e6 (ib) out.b r0,#imm8
e7 (ib) out.w r0,#imm8
out.l r0,#imm8
e8 (cw) bsr.w label
(cd) bsr.l label
e9 (cw) br.w label
(cd) br.l label
ea (cd) jmp.ww segment:label
(cp) jmp.wl segment:label
eb (cb) br.b label
ec in.b r1,r0
ed in.w r1,r0
in.l r1,r0
ee out.b r0,r1
ef out.w r0,r1
out.l r0,r1
f0 lock
f2 rep_r2 (fuer INS,MOVS,OUTS,LODS,STOS)
repne_r2 (fuer CMPS,SCAS)
f3 rep_r2 (fuer INS,MOVS,OUTS,LODS,STOS)
repeq_r2 (fuer CMPS,SCAS)
f4 halt
f5 bchg.w #0,sr
f6 /0 (ib) tst.b #imm8,ADRS
/2 (ib) not.b ADRS
/3 (ib) neg.b ADRS
/4 mulu.b ADRS,r0,m0|r0
/5 muls.b ADRS,r0,m0|ro
/6 divu.b ADRS,m0|r0
/7 divs.b ADRS,m0|r0
f7 /0 (iw) tst.w #imm16,ADRS
(id) tst.l #imm32,ADRS
/2 (iw) not.w ADRS
(id) not.l ADRS
/3 (iw) neg.w ADRS
(id) neg.l ADRS
/4 mulu.w ADRS,r0,r1|r0
mulu.l ADRS,r0,r1|r0
/5 muls.w ADRS,r0,r1|r0
muls.l ADRS,r0,r1|r0
/6 divu.w ADRS,r0,r1|r0
divu.l ADRS,r0,r1|r0
/7 divs.w ADRS,r0,r1|r0
divs.l ADRS,r0,r1|r0
f8 bclr.w #0,sr
f9 bset.w #0,sr
fa bclr.w #9,sr
fb bset.w #9,sr
fc bclr.w #10,sr
fd bset.w #10,sr
fe /0 inc.b ADRS
/1 dec.b ADRS
ff /0 inc.w ADRS
inc.l ADRS
/1 dec.w ADRS
dec.l ADRS
/2 jsr.w (ADRS)
jsr.l (ADRS)
/3 jsr.ww (ADRS)
jsr.wl (ADRS)
/4 jmp.w (ADRS)
jmp.l (ADRS)
/5 jmp.ww (ADRS)
jmp.wl (ADRS)
/6 move.w ADRS,-(sp)
move.l ADRS,-(sp)
ModR/M fuer 16-Bit Adressierung
| | m0 m2 m1 m3
| Register | r0 r2 r1 r3 r7 r4 r5 r6
| /n | 0 1 2 3 4 5 6 7
-------------------------------------------------------------------------
(r3.w,r5.w) | 00 /n 000 | 00 08 10 18 20 28 30 38
(r3.w,r6.w) | 00 /n 001 | 01 09 11 19 21 29 31 39
(r4.w,r5.w) | 00 /n 010 | 02 0a 12 1a 22 2a 32 3a
(r4.w,r6.w) | 00 /n 011 | 03 0b 13 1b 23 2b 33 3b
(r5.w) | 00 /n 100 | 04 0c 14 1c 24 2c 34 3c
(r6.w) | 00 /n 101 | 05 0d 15 1d 25 2d 35 3d
off.w | 00 /n 110 | 06 0e 16 1e 26 2e 36 3e
(r3.w) | 00 /n 111 | 07 0f 17 1f 27 2f 37 3f
-------------------------------------------------------------------------
off.b(r3.w,r5.w) | 01 /n 000 | 40 48 50 58 60 68 70 78
off.b(r3.w,r6.w) | 01 /n 001 | 41 49 51 59 61 69 71 79
off.b(r4.w,r5.w) | 01 /n 010 | 42 4a 52 5a 62 6a 72 7a
off.b(r4.w,r6.w) | 01 /n 011 | 43 4b 53 5b 63 6b 73 7b
off.b(r5.w) | 01 /n 100 | 44 4c 54 5c 64 6c 74 7c
off.b(r6.w) | 01 /n 101 | 45 4d 55 5d 65 6d 75 7d
off.b(r4.w) | 01 /n 110 | 46 4e 56 5e 66 6e 76 7e
off.b(r3.w) | 01 /n 111 | 47 4f 57 5f 67 6f 77 7f
-------------------------------------------------------------------------
off.w(r3.w,r5.w) | 10 /n 000 | 80 88 90 98 a0 a8 b0 b8
off.w(r3.w,r6.w) | 10 /n 001 | 81 89 91 99 a1 a9 b1 b9
off.w(r4.w,r5.w) | 10 /n 010 | 82 8a 92 9a a2 aa b2 ba
off.w(r4.w,r6.w) | 10 /n 011 | 83 8b 93 9b a3 ab b3 bb
off.w(r5.w) | 10 /n 100 | 84 8c 94 9c a4 ac b4 bc
off.w(r6.w) | 10 /n 101 | 85 8d 95 9d a5 ad b5 bd
off.w(r4.w) | 10 /n 110 | 86 8e 96 9e a6 ae b6 be
off.w(r3.w) | 10 /n 111 | 87 8f 97 9f a7 af b7 bf
-------------------------------------------------------------------------
r0 | 11 /n 000 | c0 c8 d0 d8 e0 e8 f0 f8
r2 | 11 /n 001 | c1 c9 d1 d9 e1 e9 f1 f9
r1 | 11 /n 010 | c2 ca d2 da e2 ea f2 fa
r3 | 11 /n 011 | c3 cb d3 db e3 eb f3 fb
r7 / m0 | 11 /n 100 | c4 cc d4 dc e4 ec f4 fc
r4 / m2 | 11 /n 101 | c5 cd d5 dd e5 ed f5 fd
r5 / m1 | 11 /n 110 | c6 ce d6 de e6 ee f6 fe
r6 / m3 | 11 /n 111 | c7 cf d7 df e7 ef f7 ff
-------------------------------------------------------------------------
Adressierungsarten die (r4.w) bzw. (r4.w,ri.w) enthalten wird uber
s7 adressiert.
=========================================================================
ModR/M fuer 32-Bit Adressierung
| | m0 m2 m1 m3
| Register | r0 r2 r1 r3 r7 r4 r5 r6
| /n | 0 1 2 3 4 5 6 7
-------------------------------------------------------------------------
(r0.l) | 00 /n 000 | 00 08 10 18 20 28 30 38
(r2.l) | 00 /n 001 | 01 09 11 19 21 29 31 39
(r1.l) | 00 /n 010 | 02 0a 12 1a 22 2a 32 3a
(r3.l) | 00 /n 011 | 03 0b 13 1b 23 2b 33 3b
[sib1-byte] | 00 /n 100 | 04 0c 14 1c 24 2c 34 3c
off.l | 00 /n 101 | 05 0d 15 1d 25 2d 35 3d
(r5.l) | 00 /n 110 | 06 0e 16 1e 26 2e 36 3e
(r6.l) | 00 /n 111 | 07 0f 17 1f 27 2f 37 3f
-------------------------------------------------------------------------
off.b(r0.l) | 01 /n 000 | 40 48 50 58 60 68 70 78
off.b(r2.l) | 01 /n 001 | 41 49 51 59 61 69 71 79
off.b(r1.l) | 01 /n 010 | 42 4a 52 5a 62 6a 72 7a
off.b(r3.l) | 01 /n 011 | 43 4b 53 5b 63 6b 73 7b
off.b+[sib2-byte] | 01 /n 100 | 44 4c 54 5c 64 6c 74 7c
off.b(r4.l) | 01 /n 101 | 45 4d 55 5d 65 6d 75 7d
off.b(r5.l) | 01 /n 110 | 46 4e 56 5e 66 6e 76 7e
off.b(r6.l) | 01 /n 111 | 47 4f 57 5f 67 6f 77 7f
-------------------------------------------------------------------------
off.l(r0.l) | 10 /n 000 | 80 88 90 98 a0 a8 b0 b8
off.l(r2.l) | 10 /n 001 | 81 89 91 99 a1 a9 b1 b9
off.l(r1.l) | 10 /n 010 | 82 8a 92 9a a2 aa b2 ba
off.l(r3.l) | 10 /n 011 | 83 8b 93 9b a3 ab b3 bb
off.l+[sib2-byte] | 10 /n 100 | 84 8c 94 9c a4 ac b4 bc
off.l(r4.l) | 10 /n 101 | 85 8d 95 9d a5 ad b5 bd
off.l(r5.l) | 10 /n 110 | 86 8e 96 9e a6 ae b6 be
off.l(r6.l) | 10 /n 111 | 87 8f 97 9f a7 af b7 bf
-------------------------------------------------------------------------
r0 | 11 /n 000 | c0 c8 d0 d8 e0 e8 f0 f8
r2 | 11 /n 001 | c1 c9 d1 d9 e1 e9 f1 f9
r1 | 11 /n 010 | c2 ca d2 da e2 ea f2 fa
r3 | 11 /n 011 | c3 cb d3 db e3 eb f3 fb
r7 / m0 | 11 /n 100 | c4 cc d4 dc e4 ec f4 fc
r4 / m2 | 11 /n 101 | c5 cd d5 dd e5 ed f5 fd
r5 / m1 | 11 /n 110 | c6 ce d6 de e6 ee f6 fe
r6 / m3 | 11 /n 111 | c7 cf d7 df e7 ef f7 ff
-------------------------------------------------------------------------
Adressierungsarten die (r4.l) enthalten, werden ueber s7 adressiert.
sib_byte
Index-Register rk | r0 r2 r1 r3 none r4 r5 r6
/n | 0 1 2 3 4 5 6 7
-------------------------------------------------------------------------
(r0.l,rk.l) | 00 /n 000 | 00 08 10 18 20 28 30 38
(r2.l,rk.l) | 00 /n 001 | 01 09 11 19 21 29 31 39
(r1.l,rk.l) | 00 /n 010 | 02 0a 12 1a 22 2a 32 3a
(r3.l,rk.l) | 00 /n 011 | 03 0b 13 1b 23 2b 33 3b
(r7.l,rk.l) | 00 /n 100 | 04 0c 14 1c 24 2c 34 3c
off32(rk.l) | 00 /n 101 | 05 0d 15 1d 25 2d 35 3d *)
(r4.l,rk.l) | 00 /n 101 | 05 0d 15 1d 25 2d 35 3d **)
(r5.l,rk.l) | 00 /n 110 | 06 0e 16 1e 26 2e 36 3e
(r6.l,rk.l) | 00 /n 111 | 07 0f 17 1f 27 2f 37 3f
-------------------------------------------------------------------------
(r0.l,rk.l*2) | 01 /n 000 | 40 48 50 58 60 68 70 78
(r2.l,rk.l*2) | 01 /n 001 | 41 49 51 59 61 69 71 79
(r1.l,rk.l*2) | 01 /n 010 | 42 4a 52 5a 62 6a 72 7a
(r3.l,rk.l*2) | 01 /n 011 | 43 4b 53 5b 63 6b 73 7b
(r7.l,rk.l*2) | 01 /n 100 | 44 4c 54 5c 64 6c 74 7c
off32(rk.l*2) | 01 /n 100 | 45 4d 55 5d 65 6d 75 7d *)
(r4.l,rk.l*2) | 01 /n 101 | 45 4d 55 5d 65 6d 75 7d **)
(r5.l,rk.l*2) | 01 /n 110 | 46 4e 56 5e 66 6e 76 7e
(r6.l,rk.l*2) | 01 /n 111 | 47 4f 57 5f 67 6f 77 7f
-------------------------------------------------------------------------
(r0.l,rk.l*4) | 10 /n 000 | 80 88 90 98 a0 a8 b0 b8
(r2.l,rk.l*4) | 10 /n 001 | 81 89 91 99 a1 a9 b1 b9
(r1.l,rk.l*4) | 10 /n 010 | 82 8a 92 9a a2 aa b2 ba
(r3.l,rk.l*4) | 10 /n 011 | 83 8b 93 9b a3 ab b3 bb
(r7.l,rk.l*4) | 10 /n 100 | 84 8c 94 9c a4 ac b4 bc
off32(rk.l*4) | 10 /n 101 | 85 8d 95 9d a5 ad b5 bd *)
(r4.l,rk.l*4) | 10 /n 101 | 85 8d 95 9d a5 ad b5 bd **)
(r5.l,rk.l*4) | 10 /n 110 | 86 8e 96 9e a6 ae b6 be
(r6.l,rk.l*4) | 10 /n 111 | 87 8f 97 9f a7 af b7 bf
-------------------------------------------------------------------------
(r0.l,rk.l*8) | 11 /n 000 | c0 c8 d0 d8 e0 e8 f0 f8
(r2.l,rk.l*8) | 11 /n 001 | c1 c9 d1 d9 e1 e9 f1 f9
(r1.l,rk.l*8) | 11 /n 010 | c2 ca d2 da e2 ea f2 fa
(r3.l,rk.l*8) | 11 /n 011 | c3 cb d3 db e3 eb f3 fb
(r7.l,rk.l*8) | 11 /n 100 | c4 cc d4 dc e4 ec f4 fc
off32(rk.l*8) | 11 /n 101 | c5 cd d5 dd e5 ed f5 fd *)
(r4.l,rk.l*8) | 11 /n 101 | c5 cd d5 dd e5 ed f5 fd **)
(r5.l,rk.l*8) | 11 /n 110 | c6 ce d6 de e6 ee f6 fe
(r6.l,rk.l*8) | 11 /n 111 | c7 cf d7 df e7 ef f7 ff
-------------------------------------------------------------------------
Adressierungsarten die als Base-Register (nicht als Indexregister) r4
oder r7 enthalten, werden ueber s7 adressiert.
*) fuer sib1-Byte (MOD=00) kein Base-Register sondern off.l
**) fuer sib2-Byte (MOD=01 oder MOD=10)
.
- References:
- I'm having trouble finding opcodes
- From: corey
- I'm having trouble finding opcodes
- Prev by Date: Re: I'm having trouble finding opcodes
- Next by Date: Re: HLA vs ???
- Previous by thread: Re: I'm having trouble finding opcodes
- Next by thread: NAND
- Index(es):