Solidity - 組合語言



Solidity 提供了一個選項,可以使用匯編語言在 Solidity 原始碼中編寫內聯彙編。我們也可以編寫獨立的彙編程式碼,然後將其轉換為位元組碼。獨立彙編是 Solidity 編譯器的中間語言,它將 Solidity 程式碼轉換為獨立彙編,然後再轉換為位元組碼。我們可以使用與內聯彙編相同的語言來編寫獨立彙編程式碼。

內聯彙編

內聯彙編程式碼可以與 Solidity 程式碼庫交織在一起,以便更精細地控制 EVM,尤其是在編寫庫函式時使用。

彙編程式碼寫在 assembly { ... } 塊中。

示例

嘗試以下程式碼來了解庫在 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 第一個應用章節中提供的步驟執行以上程式。

注意 - 點選部署按鈕前,請在下拉選單中選擇測試。

輸出

0: uint256: 15
廣告
© . All rights reserved.