程序集逻辑左移固定性不起作用

时间:2018-08-20 10:47:42

标签: solidity

function shift(int val) returns(int) {
    int res;
    assembly {
        let m := mload(0x40)
        mstore(m, shl(2, val))
        mstore(0x40, add(m, 0x20))
        res := mload(m)
    }

    return res;
}

文档 shl(x,y)//逻辑向y左移x位

结果始终为0; 在testrPC中,它根本不起作用。

Geth版本:1.8.10稳定 作业系统:ubuntu 16.04 Go版本:1.9.2

1 个答案:

答案 0 :(得分:0)

我在编译您的代码时收到此警告:

browser/Untitled3.sol:8:23: Warning: The "shl" instruction is only available for
Constantinople-compatible VMs. You are currently compiling for "byzantium", where it will
be interpreted as an invalid instruction.

            mstore(m, shl(2, val))
                      ^---------^

似乎有一个计划在君士坦丁堡叉子中添加此指令,https://github.com/ethereum/EIPs/issues/145尚未发生。目前,尚无此类操作码。