مشخصات مقاله
-
0.0
-
667
-
0
-
0
اسمبلی در سالیدیتی
Solidity گزینه ای برای استفاده از زبان اسمبلی (برای نوشتن اسمبلی درون خطی) در کد منبع Solidity فراهم می کند. ما همچنین می توانیم یک کد اسمبلی مستقل بنویسیم که سپس به بایت کد تبدیل می شود. اسمبلی مستقل یک زبان میانی برای کامپایلر Solidity است و کد Solidity را به یک اسمبلی مستقل و سپس به کد بایت تبدیل می کند. ما می توانیم از همان زبانی که در Inline Assembly استفاده می شود برای نوشتن کد در یک اسمبلی مستقل استفاده کنیم.
Assembly درون خطی
کد اسمبلی درون خطی را می توان در پایه کد 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);
}
}