Solidity - 汇编
Solidity 提供了一个选项,可以使用汇编语言在 Solidity 源代码中编写内联汇编。 我们还可以编写独立的汇编代码,然后将其转换为字节码。 Standalone Assembly 是 Solidity 编译器的中间语言,它将 Solidity 代码转换为 Standalone Assembly,然后转换为字节码。 我们可以使用内联汇编中使用的相同语言在独立汇编中编写代码。
内联汇编
内联汇编代码可以在 Solidity 代码库中交错,以便对 EVM 进行更细粒度的控制,特别是在编写库函数时使用。
汇编代码写在 assembly { ... } 块下。
示例
尝试以下代码来了解库在 Solidity 中的工作原理。
pragma solidity ^0.5.0;
library Sum {
function sumUsingInlineAssembly(uint[] memory _data) public pure returns (uint o_sum) {
for (uint i = 0; i < _data.length; ++i) {
assembly {
o_sum := add(o_sum, mload(add(add(_data, 0x20), mul(i, 0x20))))
}
}
}
}
contract Test {
uint[] data;
constructor() public {
data.push(1);
data.push(2);
data.push(3);
data.push(4);
data.push(5);
}
function sum() external view returns(uint){
return Sum.sumUsingInlineAssembly(data);
}
}
使用 Solidity First 应用 章节中提供的步骤运行上述程序。
Note − Select Test from dropdown before clicking the deploy button.
输出
0: uint256: 15

