evmil 0.4.8

An low-level immediate language for compiling to EVM bytecode
Documentation
# Overview

This is a library and tool for working with [EVM
bytecode](https://ethereum.org/en/developers/docs/evm/).  The tool
allows you to disassemble contracts into assembly language, and
assemble them back again.  The tool also supports a primitive
intermediate language which can be compiled into bytecode.

## Assembler / Disassembler

To illustrate the tool, we will first disassemble the bytecode
contract `0x60006000511161000f5760016000525b`.  We can do this as
follows:

```
evmil disassemble --code 0x60006000511161000f5760016000525b
```

This should produce the following output:

```
.code
        push 0x00
        push 0x00
        mload
        gt
        push 0x000f
        jumpi
        push 0x01
        push 0x00
        mstore
_0x000f:
        jumpdest
```

If we store this into a file `test.asm`, we can then assemble it back
as follows:

```
evmil assemble test.asm
```

And we should see our original bytecode being output:

```
0x60006000511161000f5760016000525b
```

Finally, when writing assembly language we can use labels for
simplicity.  For example, the above could be rewritten as follows:

```
.code
        push 0x00
        push 0x00
        mload
        gt
        push lab
        jumpi
        push 0x01
        push 0x00
        mstore
lab:
        jumpdest
```

This just makes writing the assembly language a bit easier.