欢迎订阅专栏:3分钟Solidity--智能合约--Web3区块链技术必学
如需获取本内容的最新版本,请参见 Cyfrin.io 上的汇编循环(代码示例)
Yul支持for循环,它由一个包含初始化部分的头,一个条件,一个后迭代部分和一个主体组成。
条件必须是一个表达式,而其他三个是代码块。
如果初始化部分在顶层声明了任何变量,这些变量的范围将延伸到循环的所有其他部分。
break 和 continue 语句可以在主体中使用,分别用于退出循环或跳到后部分。
下面的例子是计算内存中一个代码区域的总和。
{
let x := 0
for { let i := 0 } lt(i, 0x100) { i := add(i, 0x20) } {
x := add(x, mload(i))
}
}
For循环也可以作为while循环的替代: 只需将初始化和后迭代部分留为空即可。
{
let x := 0
let i := 0
for { } lt(i, 0x100) { } { // while(i < 0x100)
x := add(x, mload(i))
i := add(i, 0x20)
}
}
汇编中的循环示例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract AssemblyLoop {
function yul_for_loop() public pure returns (uint256 z) {
assembly {
for { let i := 0 } lt(i, 10) { i := add(i, 1) } { z := add(z, 1) }
}
}
function yul_while_loop() public pure returns (uint256 z) {
assembly {
let i := 0
for {} lt(i, 5) {} {
i := add(i, 1)
z := add(z, 1)
}
}
}
}
Remix Lite 尝试一下
END