1. 程式人生 > >solidity 學習筆記(7)內聯彙編

solidity 學習筆記(7)內聯彙編

為什麼要有內聯彙編?

 

//普通迴圈和內斂彙編迴圈比較

pragma solidity ^0.4.25;

contract Assembly{
function nativeLoop() public view returns(uint _r){

for(uint i=0;i<10;i++){
_r = _r +i;
}
}

function asmLoop() public view returns (uint _r){
assembly{
let i:=0
loop:
i:=add(i,1)
_r:=add(_r,i)
jumpi(loop,lt(i,9))
}
}

}

 

官網:https://solidity.readthedocs.io/en/develop/assembly.html

 

函式式操作碼:mul(1, add(2, 3)) 替代 push1 3 push1 2 add push1 1 mul
彙編區域性變數:let x := add(2, 3) let y := mload(0x40) x := add(x, y)
訪問外部變數:function f(uint x) { assembly { x := sub(x, 1) } }
標籤:let x := 10 repeat: x := sub(x, 1) jumpi(repeat, eq(x, 0))
迴圈:for { let i := 0 } lt(i, x) { i := add(i, 1) } { y := mul(2, y) }
switch語句:switch x case 0 { y := mul(x, 2) } default { y := 0 }
函式呼叫:function f(x) -> y { switch x case 0 { y := 1 } default { y := mul(x, f(sub(x, 1))) } }