📜  Solidity-组装

📅  最后修改于: 2020-11-04 04:30:06             🧑  作者: Mango


 

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

内联汇编

内联汇编代码可以在Solidity代码库中插入,以对EVM进行更细粒度的控制,尤其是在编写库函数时使用。

汇编代码写在汇编{…}块下。

尝试以下代码以了解库如何在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 Application一章中提供的步骤运行上述程序。

注意-在单击部署按钮之前,从下拉列表中选择测试。

输出

0: uint256: 15