Learn EVM Opcodes IV
We are continuing to progress in opcode business. In this lesson you will learn many new opcodes. These are MOD, EXP, LT,GT, EQ, ISZERO, SHL,SHR and BYTE
MOD Opcode
It gives the remaining value in the division operation on the stack. First we enter the value 2 and then the value 7. With the help of the MOD opcode, we learn the result of the 7%2 operation.
ADDMOD Opcode
It is an opcode used with 3 values. The first and second values are summed and the mode of the total result is taken according to the third value.
Like (10+12)%7
MULMOD Opcode
It is an opcode used with 3 values. The first and second values are multiplied and the mode of the total result is taken according to the third value.
Like (10+12)%7
EXP Opcode
The exponential function is one of the most important functions in mathematics. We can use function thanks to the EXP opcode.
The 7² (7 to the second power) operation was performed and the result was represented on the stack as hexadecimal(31).
LT Opcode
Returns 1 if the last value on the stack is less than the previous value, 0 otherwise.
PUSH1 5
PUSH1 4
LT
GT Opcode
Returns 1 if the last value on the stack is more than the previous value, 0 otherwise.
EQ Opcode
Returns 1 if the last value on the stack is equal to the previous value, 0 otherwise.
ISZERO Opcode
Returns 1 if the last value on the stack is equal to 0, 0 otherwise.
BYTE Opcode
Consider the data on the stack as an array. With this opcode, we can get data from any point of the array.
We wrote 32 byte sized value.
This is: 0xCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAABBCCDDEE
The first byte of this data (you must call it 0) is CC.
The last byte of this data (you must call it 31) is EE.
We called byte 27. in this example. This is AA.
Would you like to read more ? Let’s get more practice.
PUSH2 0xCCFF
PUSH1 30
BYTE
We wrote a 2 byte sized value : 0xCCFF
Let’s ask it to return whatever is in the 30th byte on this data.
The answer is CC.
Why CC, because values are written starting from the far right of each 32 byte slot.
It’s like this;
0x000000000000000000000000000000000000000000000000000000000000CCFF
SHL Opcode
We use it to shift the value to the left in “Bits”.
We wrote 32 byte sized value.
0xCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAABBCCDDEE
When we shift this data 4 BITS to the left, the first letter “C” representing the first 4 bits disappears and is replaced by “0” at the end (right) of the data.
We need to understand this opcode.
We wrote 32 byte sized value.
0xCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAABBCCDDEE
When we shift this data 8 BITS to the left, the first two letter “CC” representing the first 8 bits disappears and is replaced by “00” at the end (right) of the data.
SHR Opcode
We use it to shift the value to the right in “Bits”.
We wrote 32 byte sized value.
0xCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAABBCCDDEE
When we shift this data 4 BITS to the right, the last letter “E” representing the last 4 bits disappears and is replaced by “0” at the start (left) of the data.
You can’t see “0” in the start (left) of the data but there is “0” in the start.
We wrote 32 byte sized value.
0xCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAABBCCDDEE
When we shift this data 8 BITS to the right, the last two letters “EE” representing the last 8 bits disappears and is replaced by “00” at the start (left) of the data.