1 ;;;;------------------------------------------------------------------
3 ;;;; Copyright (C) 2001-2004,
4 ;;;; Department of Computer Science, University of Tromso, Norway
6 ;;;; Filename: instr-and-or.lisp
7 ;;;; Description: Bitwise boolean operations.
8 ;;;; Author: Frode Vatvedt Fjeld <frodef@acm.org>
9 ;;;; Created at: Tue Feb 1 17:39:09 2000
10 ;;;; Distribution: See the accompanying file COPYING.
12 ;;;; $Id: instr-and-or.lisp,v 1.3 2004/06/21 07:33:00 ffjeld Exp $
14 ;;;;------------------------------------------------------------------
16 (in-package #:ia-x86-instr
)
18 ;;; ----------------------------------------------------------------
19 ;;; AND [IISR page 11-64]
20 ;;; ----------------------------------------------------------------
22 (def-instr and
(instruction))
25 (:plain
#x24
(0 1) (imm8 al
))
26 (:digit
(#x80
4) 1 (imm8 r
/m8
))
31 (:plain
#x25
(0 2) (imm16 ax
) :operand-mode
:16-bit
)
32 (:digit
(#x81
4) 2 (imm16 r
/m16
) :operand-mode
:16-bit
)
33 (:digit
(#x83
4) 1 (simm8 r
/m16
) :operand-mode
:16-bit
)
34 (:r
#x21
(r16 r
/m16
) :operand-mode
:16-bit
)
35 (:r
#x23
(r/m16 r16
) :operand-mode
:16-bit
))
38 (:plain
#x25
(0 4) (imm32 eax
) :operand-mode
:32-bit
)
39 (:digit
(#x81
4) 4 (imm32 r
/m32
) :operand-mode
:32-bit
)
40 (:digit
(#x83
4) 1 (simm8 r
/m32
) :operand-mode
:32-bit
)
41 (:r
#x21
(r32 r
/m32
) :operand-mode
:32-bit
)
42 (:r
#x23
(r/m32 r32
) :operand-mode
:32-bit
))
44 ;;; ----------------------------------------------------------------
45 ;;; OR [IISR page 11-301]
46 ;;; ----------------------------------------------------------------
48 (def-instr or
(instruction))
51 (:plain
#x0c
(0 1) (imm8 al
))
52 (:digit
(#x80
1) 1 (imm8 r
/m8
))
57 (:plain
#x0d
(0 2) (imm16 ax
) :operand-mode
:16-bit
)
58 (:digit
(#x81
1) 2 (imm16 r
/m16
) :operand-mode
:16-bit
)
59 (:digit
(#x83
1) 1 (simm8 r
/m16
) :operand-mode
:16-bit
)
60 (:r
#x09
(r16 r
/m16
) :operand-mode
:16-bit
)
61 (:r
#x0b
(r/m16 r16
) :operand-mode
:16-bit
))
64 (:plain
#x0d
(0 4) (imm32 eax
) :operand-mode
:32-bit
)
65 (:digit
(#x81
1) 4 (imm32 r
/m32
) :operand-mode
:32-bit
)
66 (:digit
(#x83
1) 1 (simm8 r
/m32
) :operand-mode
:32-bit
)
67 (:r
#x09
(r32 r
/m32
) :operand-mode
:32-bit
)
68 (:r
#x0b
(r/m32 r32
) :operand-mode
:32-bit
))
70 ;;; ----------------------------------------------------------------
71 ;;; XOR [IISR page 11-392]
72 ;;; ----------------------------------------------------------------
74 (def-instr xor
(instruction))
77 (:plain
#x34
(0 1) (imm8 al
))
78 (:digit
(#x80
6) 1 (imm8 r
/m8
))
83 (:plain
#x35
(0 2) (imm16 ax
) :operand-mode
:16-bit
)
84 (:digit
(#x81
6) 2 (imm16 r
/m16
) :operand-mode
:16-bit
)
85 (:digit
(#x83
6) 1 (simm8 r
/m16
) :operand-mode
:16-bit
)
86 (:r
#x31
(r16 r
/m16
) :operand-mode
:16-bit
)
87 (:r
#x33
(r/m16 r16
) :operand-mode
:16-bit
))
90 (:plain
#x35
(0 4) (imm32 eax
) :operand-mode
:32-bit
)
91 (:digit
(#x81
6) 4 (imm32 r
/m32
) :operand-mode
:32-bit
)
92 (:digit
(#x83
6) 1 (simm8 r
/m32
) :operand-mode
:32-bit
)
93 (:r
#x31
(r32 r
/m32
) :operand-mode
:32-bit
)
94 (:r
#x33
(r/m32 r32
) :operand-mode
:32-bit
))
96 ;;; ----------------------------------------------------------------
97 ;;; NOT [IISR page 11-299]
98 ;;; ----------------------------------------------------------------
100 (def-instr not
(instruction))
101 (def-instr notb
(not) (:digit
(#xf6
2) 0 (r/m8
)))
102 (def-instr notw
(not) (:digit
(#xf7
2) 0 (r/m16
) :operand-mode
:16-bit
))
103 (def-instr notl
(not) (:digit
(#xf7
2) 0 (r/m32
) :operand-mode
:32-bit
))