- 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
广告