Solidity – 使用汇编(Assembly)代码

与c/c++类似,solability程序中,可以使用EVM汇编语言。

内联汇编

使用内联汇编,可以在Solidity源程序中嵌入汇编代码,对EVM有更细粒度的控制,在编写库函数时很有用。

汇编代码嵌入使用:

assembly { ... } 

示例

尝试下面的代码,来理解汇编是怎么使用的。

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 – 第一个程序中的步骤,运行上述程序。

在单击deploy按钮之前,从下拉菜单中选择Test。

输出

0: uint256: 15


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载