📅  最后修改于: 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