内联汇编(Inline Assembly)

优质
小牛编辑
113浏览
2023-12-01

为了增强对语言的细粒度的控制,特别是在写通用库时,可以在一个语言中交错使用Solidity的语句来接近其中一个虚拟机。但由于EVM是基于栈执行的,所以有时很难定位到正确的栈槽位,从而提供正确的的参数或操作码。Solidit的内联汇编尝试解决这个问题,但也引入了其它的问题,当你通过下述特性进行手动的汇编时:

  • 函数式的操作码: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 := sub(x, 1) jumpi(repeat, eq(x, 0))

Solidity Assembly是对内联汇编的详细介绍。