Guest User

Assembly Basic Operations

a guest
Nov 8th, 2018
114
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. contract AssemblyBasicOperations {
  2.     function normalLoop() public view returns (uint result) {
  3.         for (uint i = 0; i < 10; i++) {
  4.             result += i;
  5.         }
  6.     }
  7.    
  8.     function assemblyLoop() public view returns (uint result) {
  9.         uint i = 0;
  10.         assembly {
  11.            
  12.             loop:
  13.                
  14.                 // result += i
  15.                 result := add(result, i)
  16.                
  17.                 // i++
  18.                 i := add(i, 1)
  19.                
  20.                 // if (i < 10) loop again
  21.                 jumpi(loop, lt(i, 10))
  22.         }
  23.     }
  24.    
  25.     function normalIf(uint num1, uint num2) public view returns (uint result) {
  26.         if (num1 > num2) {
  27.             result = num1;
  28.         } else {
  29.             result = num2;
  30.         }
  31.     }
  32.    
  33.     function assemblyIf(uint num1, uint num2) public view returns (uint result) {
  34.         assembly {
  35.             jumpi(num1Greater, gt(num1, num2))
  36.             jump(num2IsGreaterOrEqual)
  37.            
  38.             // if (num1 > num2) goto num1Greater
  39.             num1Greater:
  40.                 // result = num1
  41.                 result := num1
  42.                 jump(end)
  43.             // else
  44.             num2IsGreaterOrEqual:
  45.                 // result = num2
  46.                 result := num2
  47.                
  48.             end:
  49.         }
  50.     }
  51. }
RAW Paste Data