- Solidity 教程
- Solidity - 首頁
- Solidity - 概述
- Solidity - 環境搭建
- Solidity - 基本語法
- Solidity - 第一個應用
- Solidity - 註釋
- Solidity - 資料型別
- Solidity - 變數
- Solidity - 變數作用域
- Solidity - 運算子
- Solidity - 迴圈
- Solidity - 條件判斷
- Solidity - 字串
- Solidity - 陣列
- Solidity - 列舉
- Solidity - 結構體
- Solidity - 對映
- Solidity - 型別轉換
- Solidity - 以太幣單位
- Solidity - 特殊變數
- Solidity - 樣式指南
- Solidity 函式
- Solidity - 函式
- Solidity - 函式修飾符
- Solidity - View 函式
- Solidity - Pure 函式
- Solidity - 回退函式
- 函式過載
- 數學函式
- 加密函式
- Solidity 常用模式
- Solidity - 提款模式
- Solidity - 受限訪問
- Solidity 高階
- Solidity - 合約
- Solidity - 繼承
- Solidity - 建構函式
- Solidity - 抽象合約
- Solidity - 介面
- Solidity - 庫
- Solidity - 組合語言
- Solidity - 事件
- Solidity - 錯誤處理
- Solidity 有用資源
- Solidity - 快速指南
- Solidity - 有用資源
- Solidity - 討論
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
廣告