There are three memory opcodes that are important for us. One for loading and two for storing.
MLOAD
lets us load one word
specified by an offset. A word is 32 bytes.
MSTORE
allows us to save one word to memory and MSTORE8
allows us to save one byte to memory.
def mload(evm):
offset = evm.stack.pop()
value = evm.memory.load(offset)
evm.stack.push(value)
evm.pc += 1
def mstore(evm):
# TODO: should be right aligned
offset, value = evm.stack.pop(), cpu.stack.pop()
evm.memory.store(offset, value)
evm.pc += 1
def mstore8(evm):
offset, value = evm.stack.pop(), evm.stack.pop()
evm.memory.store(offset, value)
evm.pc += 1