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