以太坊虚拟机介绍5-比较操作指令

以太坊虚拟机比较操作指令

EVM定义了6条比较操作指令,见下表:

下面是比较操作指令的操作码分布图: 

LT、GT、SLT、SGT、EQ
这5条指令都是从栈顶弹出两个元素,进行比较,然后把结果(1表示true,0表示false)推入栈顶。其中LT和GT把弹出的元素解释为无符号整数进行比较,SLT和SGT把弹出的元素解释为有符号数进行比较,EQ不关心符号。以LT指令为例,下面是它的操作示意图:

ISZERO

ISZERO指令从栈顶弹出一个元素,判断它是否为0,如果是,则把1推入栈顶,否则把0推入栈顶。下面是ISZERO指令的操作示意图:

实例分析
Solidity编译器使用LT和SLT指令实现小于运算符(<),使用GT和SGT指令实现大于运算符(>),使用EQ指令实现等于运算符(==),使用ISZERO指令实现布尔取反运算符(!)。读者可以编译下面这个智能合约(solc --asm --opcodes comparison_demo.sol),观察比较操作指令的使用:

// comparison_demo.sol
pragma solidity ^0.4.24;

contract C {

function test() public pure {
int s1; int s2;
uint u1; uint u2;

bool b1 = u1 < u2; // LT
bool b2 = u1 > u2; // GT
bool b3 = s1 < s2; // SLT
bool b4 = s1 > s2; // SGT
bool b5 = s1 == s2; // EQ
bool b6 = !b5; // ISZERO
}

}

总结

本文介绍了EVM比较操作指令,下一篇文章将介绍EVM存储相关指令。

 

转载于:https://www.cnblogs.com/405845829qq/p/9998262.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值