# 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.