diff --git a/ebpf.py b/ebpf.py
index 4307feb99050f2e94787fb69a14cdcee5d19ade3..07eee42bbe255905ca5508cde5ace063b2a6f429 100644
--- a/ebpf.py
+++ b/ebpf.py
@@ -580,7 +580,7 @@ class EBPF:
 
     def assemble(self):
         return b"".join(
-            pack("<BBHI", i.opcode, i.dst | i.src << 4,
+            pack("<BBHI", i.opcode.value, i.dst | i.src << 4,
                  i.off % 0x10000, i.imm % 0x100000000)
             for i in self.opcodes)
 
diff --git a/ebpf_test.py b/ebpf_test.py
index 58c51d1eded46498ab5aae71c3b89c3527e3bc11..e876e979e5909dd1b2a58ff97760579197aec205 100644
--- a/ebpf_test.py
+++ b/ebpf_test.py
@@ -10,7 +10,7 @@ opcodes.sort(reverse=True)
 
 
 def Instruction(opcode, dst, src, off, imm):
-    if isinstance(opcode, OpcodeFlags):
+    if isinstance(opcode, (Opcode, OpcodeFlags)):
         return ebpf.Instruction(opcode, dst, src, off, imm)
     bigger = [(k, v) for k, v in opcodes if opcode >= k]
     for bk, bv in bigger:
@@ -29,7 +29,7 @@ def Instruction(opcode, dst, src, off, imm):
 class Tests(TestCase):
     def test_assemble(self):
         e = EBPF()
-        e.append(0x24, 3, 4, 0x2c3d, 0x2d3e4f5e)
+        e.append(Opcode.MUL, 3, 4, 0x2c3d, 0x2d3e4f5e)
         self.assertEqual(e.assemble(), b"$C=,^O>-")
 
     def test_assign(self):