Last active
September 26, 2017 07:49
-
-
Save gcolvin/1654c4c88518a4372926f0db39ca09a5 to your computer and use it in GitHub Desktop.
stupid simple EVM assembler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For example take this code | |
// XPUSH(1,1) ff | |
// XPUSH(1,1) ee | |
// XAND(1,1) | |
// run it through the preprocessor and tr | |
// gcc -E -P -x c-header -include masm.h test.evm | tr -d [:space:] | |
// and get this output | |
// e011ffe011eed611 | |
// Haven't figured out labels yet, might have to just count. | |
// No, this is not suitable for real work, but will suffice | |
// for initial testing, and was easy to write. | |
#define STOP 00 | |
#define ADD 01 | |
#define MUL 02 | |
#define SUB 03 | |
#define DIV 04 | |
#define SDIV 05 | |
#define MOD 06 | |
#define SMOD 08 | |
#define ADDMOD 09 | |
#define MULMOD 0a | |
#define EXP 0b | |
#define SIGNEXTEND 0c | |
#define LT 10 | |
#define GT 11 | |
#define SLT 12 | |
#define SGT 13 | |
#define EQ 14 | |
#define ISZERO 15 | |
#define AND 16 | |
#define OR 17 | |
#define XOR(n,sz) 18 | |
#define NOT 19 | |
#define BYTE 20 | |
#define SHL 21 | |
#define SHR 22 | |
#define SAR 23 | |
#define SHA3 20 | |
#define ADDRESS 30 | |
#define BALANCE 31 | |
#define ORIGIN 32 | |
#define CALLER 33 | |
#define CALLVALUE 34 | |
#define CALLDATALOAD 35 | |
#define CALLDATASIZE 36 | |
#define CALLDATACOPY 37 | |
#define CODESIZE 38 | |
#define CODECOPY 39 | |
#define GASPRICE 3a | |
#define EXTCODESIZE 3b | |
#define EXTCODECOPY 3c | |
#define RETURNDATASIZE 3d | |
#define RETURNDATACOPY 3e | |
#define BLOCKHASH 40 | |
#define COINBASE 41 | |
#define TIMESTAMP 42 | |
#define NUMBER 43 | |
#define DIFFICULTY 44 | |
#define GASLIMIT 45 | |
#define POP 50 | |
#define MLOAD 51 | |
#define MSTORE 52 | |
#define MSTORE8 53 | |
#define SLOAD 54 | |
#define SSTORE 55 | |
#define JUMP 56 | |
#define JUMPI 57 | |
#define PC 58 | |
#define MSIZE 59 | |
#define GAS 5a | |
#define JUMPDEST 5b | |
#define PUSH1(bytes) 60 bytes | |
#define PUSH2(bytes) 61 bytes | |
#define PUSH3(bytes) 62 bytes | |
#define PUSH4(bytes) 63 bytes | |
#define PUSH5(bytes) 64 bytes | |
#define PUSH6(bytes) 65 bytes | |
#define PUSH7(bytes) 66 bytes | |
#define PUSH8(bytes) 67 bytes | |
#define PUSH9(bytes) 68 bytes | |
#define PUSH10(bytes) 69 bytes | |
#define PUSH11(bytes) 6a bytes | |
#define PUSH12(bytes) 6b bytes | |
#define PUSH13(bytes) 6c bytes | |
#define PUSH14(bytes) 6d bytes | |
#define PUSH15(bytes) 6e bytes | |
#define PUSH16(bytes) 6f bytes | |
#define PUSH17(bytes) 70 bytes | |
#define PUSH18(bytes) 71 bytes | |
#define PUSH19(bytes) 72 bytes | |
#define PUSH20(bytes) 73 bytes | |
#define PUSH21(bytes) 74 bytes | |
#define PUSH22(bytes) 75 bytes | |
#define PUSH23(bytes) 76 bytes | |
#define PUSH24(bytes) 77 bytes | |
#define PUSH25(bytes) 78 bytes | |
#define PUSH26(bytes) 79 bytes | |
#define PUSH27(bytes) 7a bytes | |
#define PUSH28(bytes) 7b bytes | |
#define PUSH29(bytes) 7c bytes | |
#define PUSH30(bytes) 7d bytes | |
#define PUSH31(bytes) 7e bytes | |
#define PUSH32(bytes) 7f bytes | |
#define DUP1 80 | |
#define DUP2 81 | |
#define DUP3 82 | |
#define DUP4 83 | |
#define DUP5 84 | |
#define DUP6 85 | |
#define DUP7 86 | |
#define DUP8 87 | |
#define DUP9 88 | |
#define DUP10 89 | |
#define DUP11 8a | |
#define DUP12 8b | |
#define DUP13 8c | |
#define DUP14 8d | |
#define DUP15 8e | |
#define DUP16 8f | |
#define SWAP1 90 | |
#define SWAP2 91 | |
#define SWAP3 92 | |
#define SWAP4 93 | |
#define SWAP5 94 | |
#define SWAP6 95 | |
#define SWAP7 96 | |
#define SWAP8 97 | |
#define SWAP9 98 | |
#define SWAP10 99 | |
#define SWAP11 9a | |
#define SWAP12 95 | |
#define SWAP13 9c | |
#define SWAP14 9d | |
#define SWAP15 9e | |
#define SWAP16 9f | |
#define LOG0 a0 | |
#define LOG1 a1 | |
#define LOG2 a2 | |
#define LOG3 a3 | |
#define LOG4 a4 | |
#define JUMPTO b0 | |
#define JUMPIF b1 | |
#define JUMPSUB b2 | |
#define JUMPV b3 | |
#define JUMPSUBV b4 | |
#define BEGINSUB b5 | |
#define BEGINDATA b6 | |
#define RETURNSUB b7 | |
#define PUTLOCAL b8 | |
#define GETLOCAL b9 | |
#define XADD(n,sz) c1 n sz | |
#define XMUL(n,sz) c2 n sz | |
#define XSUB(n,sz) c3 n sz | |
#define XDIV(n,sz) c4 n sz | |
#define XSDIV(n,sz) c5 n sz | |
#define XMOD(n,sz) c6 n sz | |
#define XSMOD(n,sz) c7 n sz | |
#define XLT(n,sz) d0 n sz | |
#define XGT(n,sz) d1 n sz | |
#define XSLT(n,sz) d2 n sz | |
#define XSGT(n,sz) d3 n sz | |
#define XEQ(n,sz) d4 n sz | |
#define XISZERO(n,sz) d5 n sz | |
#define XAND(n,sz) d6 n sz | |
#define XOOR(n,sz) d7 n sz | |
#define XXOR(n,sz) d8 n sz | |
#define XNOT(n,sz) d9 n sz | |
#define XSHL(n,sz) db n sz | |
#define XSHR(n,sz) dc n sz | |
#define XSAR(n,sz) dd n sz | |
#define XROL(n,sz) de n sz | |
#define XROR(n,sz) df n sz | |
#define XPUSH(n,sz) e0 n sz | |
#define XMLOAD(n,sz) e1 n sz | |
#define XMSTORE(n,sz) e2 n sz | |
#define XPOP(n,sz) e3 n sz | |
#define XSLOAD(n,sz) e4 n sz | |
#define XSSTORE(n,sz) e5 n sz | |
#define XVTOWIDE(n,sz) e6 n sz | |
#define XWIDETOV(n,sz) e7 n sz | |
#define XGET(n,sz) e8 n sz | |
#define XPUT(n,sz) e9 n sz | |
#define XSWIZZLE(n,sz) ea n sz | |
#define XSHUFFLE(n,sz) eb n sz | |
#define XSCATTER(n,sz) ec n sz | |
#define XGATHER(n,sz) ed n sz | |
#define CREATE f0 | |
#define CALL f1 | |
#define CALLCODE f2 | |
#define RETURN f3 | |
#define DELEGATECALL f4 | |
#define STATICCALL fa | |
#define CREATE2 fb | |
#define REVERT fd | |
#define INVALID fe | |
#define SUICIDE ff |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment