我正在尝试创建一个函数来查找作为参数输入的4个数字中的最大值。
使用Solidity汇编代码。
我已经做了一个成功的最大的2个数字已经,但似乎不能弄清楚这一个。
这是我的代码,每次都返回0
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.4.26;
contract LargestOfFourNums {
function largestOfFour(
uint256 num1,
uint256 num2,
uint256 num3,
uint256 num4
) public view returns (uint256 result) {
assembly {
let winnerA := gt(num1, num2)
let winnerB := gt(num3, num4)
jumpi(num1Greater, gt(winnerA, winnerB))
jump(num2Greater)
num1Greater:
result := winnerA
jump(end)
num2Greater:
result := winnerB
end:
}
}
}
我尝试过使用mstore(0x80,winnerA)
但这似乎并没有改变什么。
我甚至尝试了sload(0x80)和sload(winnerA),以便稍后调用它
1条答案
按热度按时间gcmastyq1#
为什么要进行额外的跳转?
jump(num2Greater)
无论如何都是冗余的。在其中一种情况下,您可能会让代码“失败”。可以使用next方法获取两个32位整数的最大值和最小值:
这允许无分支解决方案: