Solidność - montaż
Solidity zapewnia opcję używania języka asemblera do pisania asemblacji w kodzie źródłowym Solidity. Możemy również napisać samodzielny kod asemblera, który następnie zostanie przekonwertowany na kod bajtowy. Samodzielny zestaw jest językiem pośrednim dla kompilatora Solidity i konwertuje kod Solidity na samodzielny zespół, a następnie na kod bajtowy. Możemy użyć tego samego języka, który jest używany w zestawie wbudowanym, do pisania kodu w zestawie autonomicznym.
Montaż w linii
Wbudowany kod asemblera może być przeplatany w ramach kodu Solidity, aby mieć bardziej precyzyjną kontrolę nad EVM i jest używany szczególnie podczas pisania funkcji bibliotecznych.
Kod asemblera jest zapisany pod assembly { ... } blok.
Przykład
Wypróbuj poniższy kod, aby zrozumieć, jak działa biblioteka w 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);
}
}
Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application .
Note - Wybierz opcję Test z listy rozwijanej przed kliknięciem przycisku wdrażania.
Wynik
0: uint256: 15