I have this simple Smart Contract
contract C {
uint256 a;
function C() {
a = 1;
}
}
running
solc --bin --asm c1.sol
it throws out:
======= C =======
EVM assembly:
.code:
PUSH 60 contract C {...
PUSH 40 contract C {...
MSTORE contract C {...
tag2:
JUMPDEST function C() {...
PUSH 1 1
PUSH 0 a
PUSH 0 a
POP a = 1
DUP2 a = 1
SWAP1 a = 1
SSTORE a = 1
POP a = 1
tag3:
JUMPDEST function C() {...
PUSH #[$00000000…00000000] contract C {...
DUP1 contract C {...
PUSH [$00000000…00000000] contract C {...
PUSH 0 contract C {...
CODECOPY contract C {...
PUSH 0 contract C {...
RETURN contract C {...
.data:
0:
.code:
PUSH 60 contract C {...
PUSH 40 contract C {...
MSTORE contract C {...
PUSH [tag2] contract C {...
JUMP contract C {...
tag2:
JUMPDEST contract C {...
STOP contract C {...
Binary:
60606040525b60016000600050819055505b600a80601d6000396000f360606040526008565b00
I can't understand this two OPCODE
PUSH 0 a POP a = 1
I'm trying to reconstruct the stack:
- PUSH 1 --> [1]
- PUSH 0 --> [0,1]
- PUSH 0 --> [0,0,1]
- POP --> [0,1]
- DUP2 --> [1,0,1]
- SWAP1 --> [0,1,1]
- SSTORE --> [1]
- POP --> []
Why I need Instruction at point 3 and 4? They look unuseful