Solidity - 汇编语言



Solidity 提供了一个选项,可以使用汇编语言在 Solidity 源代码中编写内联汇编。我们也可以编写独立的汇编代码,然后将其转换为字节码。独立汇编是 Solidity 编译器的中间语言,它将 Solidity 代码转换为独立汇编,然后再转换为字节码。我们可以使用与内联汇编相同的语言来编写独立汇编代码。

内联汇编

内联汇编代码可以与 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 第一个应用章节中提供的步骤运行以上程序。

注意 - 点击部署按钮前,请在下拉菜单中选择测试。

输出

0: uint256: 15
广告