// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
// Define a contract named SimpleAssembly
contract SimpleAssembly {
// A function that demonstrates the use of inline assembly to modify a variable
function AssemblyUsage() public pure returns (uint256) {
// Declare a variable `i` and initialize it with 10
uint256 i = 10;
// First assembly block
assembly {
// Directly set the value of `i` to 100 within the assembly context
i := 100
}
// Second assembly block
assembly {
// Directly set the value of `i` to 200 within the assembly context
i := 200
}
// Returns the value of `i`, which will be 200 due to the last assembly modification
return i;
}
}
// Define another contract for demonstrating assembly variables and simple operations
contract AssemblyVariablesAndSimpleFunctions {
// A function that demonstrates variable declaration and basic arithmetic in assembly
function AssemblyUsage() public pure returns (uint256) {
uint256 i;
assembly {
// Single line comment example
/*
Multi-line comment example.
These comments can span multiple lines.
*/
// Declare a string value in assembly (note: Solidity assembly does not support high-level types like strings directly)
let stringVal := "ritesh modi"
// Declare a uint value in assembly
let uintVal := 100
// Declare a byte value in assembly
let byteVal := 0x100
// Perform an addition operation and store the result in `newvariable`
let newvariable := add(10, 30)
// Assign the result of the addition to the Solidity variable `i`
i := newvariable
}
// Return the value of `i`, which is the result of the addition (40)
return i;
}
}