Documentation ¶
Index ¶
- type DAdd
- type DDiv
- type DMul
- type DNeg
- type DRem
- type DSub
- type FAdd
- type FDiv
- type FMul
- type FNeg
- type FRem
- type FSub
- type IAdd
- type IAnd
- type IDiv
- type IInc
- type IMul
- type INeg
- type IOr
- type IRem
- type IShL
- type IShR
- type ISub
- type IUShR
- type IXOr
- type LAdd
- type LAnd
- type LDiv
- type LMul
- type LNeg
- type LOr
- type LRem
- type LShL
- type LShR
- type LSub
- type LUShR
- type LXOr
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DAdd ¶
type DAdd struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf dadd Page.509
格式: dadd 字节: 0x63 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1+value2)
PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 相反符号无穷大相加 结果为 NaN - 3. 相同符号无穷大相加 结果为 当下符号的无穷大 4. 任何无穷大的数和非无穷大的数相加,结果为该无穷大 5. -0.0 + +0.0 = +0.0 6. -0.0 + -0.0 = -0.0 7. +0.0 + +0.0 = +0.0 8. 0.0 + 非0.0 = 非0.0 9. -x + +x = +0.0 10. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果double无法表示,则会转成最相近的数) 术语定义:
Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg 1. NaN: sign(1bit), exponent(8bits),fraction(23bit) sign = either 0 or 1. biased exponent = all 1 bits. fraction = anything except all 0 bits (since all 0 bits represents infinity).
type DDiv ¶
type DDiv struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: ddiv 字节: 0x6f 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶
..., value2, value1 /> ..., (value2/value1)
PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义)
value1 为 0 时,结果为无穷大
type DMul ¶
type DMul struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: dmul 字节: 0x6b 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1*value2)
PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 都不是NaN时,若两个操作数符号相同,则结果符号为正,否则为负 3. 无穷大 * 0.0 = NaN 4. 任何无穷大的数和非无穷大的数相乘,结果为无穷大,符号由规则2定义 5. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果float无法表示,则会转成最相近的数) 术语定义:
Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg 1. NaN: sign(1bit), exponent(8bits),fraction(23bit) sign = either 0 or 1. biased exponent = all 1 bits. fraction = anything except all 0 bits (since all 0 bits represents infinity).
type DNeg ¶
type DNeg struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: dneg 字节: 0x77 操作: 弹出操作数栈顶的double取反后,并将结果推到操作数栈顶
..., value1 -> ..., (-value1)
type DRem ¶
type DRem struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: drem 字节: 0x73 操作: 计算操作数栈顶两个double的余数,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2 % value1)
PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义)
type DSub ¶
type DSub struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf dsub Page.504
格式: dsub 字节: 0x67 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2-value1)
PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义) 等同 value2 + (-value1)
type FAdd ¶
type FAdd struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf fadd Page.509
格式: fadd 字节: 0x62 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1+value2)
PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 相反符号无穷大相加 结果为 NaN - 3. 相同符号无穷大相加 结果为 当下符号的无穷大 4. 任何无穷大的数和非无穷大的数相加,结果为该无穷大 5. -0.0 + +0.0 = +0.0 6. -0.0 + -0.0 = -0.0 7. +0.0 + +0.0 = +0.0 8. 0.0 + 非0.0 = 非0.0 9. -x + +x = +0.0 10. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果float无法表示,则会转成最相近的数) 术语定义:
Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg 1. NaN: sign(1bit), exponent(8bits),fraction(23bit) sign = either 0 or 1. biased exponent = all 1 bits. fraction = anything except all 0 bits (since all 0 bits represents infinity).
type FDiv ¶
type FDiv struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: fdiv 字节: 0x6e 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶
..., value2, value1 /> ..., (value2/value1)
PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义)
value1 为 0 时,结果为无穷大
type FMul ¶
type FMul struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: fmul 字节: 0x6a 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1*value2)
PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 都不是NaN时,若两个操作数符号相同,则结果符号为正,否则为负 3. 无穷大 * 0.0 = NaN 4. 任何无穷大的数和非无穷大的数相乘,结果为无穷大,符号由规则2定义 5. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果float无法表示,则会转成最相近的数) 术语定义:
Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg 1. NaN: sign(1bit), exponent(8bits),fraction(23bit) sign = either 0 or 1. biased exponent = all 1 bits. fraction = anything except all 0 bits (since all 0 bits represents infinity).
type FNeg ¶
type FNeg struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: fneg 字节: 0x76 操作: 弹出操作数栈顶的float取反后,并将结果推到操作数栈顶
..., value1 -> ..., (-value1)
type FRem ¶
type FRem struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: frem 字节: 0x72 操作: 计算操作数栈顶两个flaot的余数,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2%value1)
PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义)
type FSub ¶
type FSub struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf fsub Page.503
格式: fsub 字节: 0x66 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2-value1)
PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义) 等同 value2 + (-value1)
type IAdd ¶
type IAdd struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf iadd Page.452
格式: iadd 字节: 0x60 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1+value2)
PS: value1 和 value2 都必须是整数,若发生溢出,则保留低 32位,溢出时不抛异常
type IAnd ¶
type IAnd struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: iand 字节: 0x7e 操作: 栈顶两个 int 型操作数做与操作
..., num2, num1 -> ..., (num2 & num1)
type IDiv ¶
type IDiv struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: idiv 字节: 0x6c 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶
..., value2, value1 /> ..., (value2/value1)
PS: value1 和 value2 都必须是整数,不能整除时,向 0 取整 当除数为 0 时抛 ArithmeticException 异常
type IInc ¶
type IInc struct { base.Index8Instruction Const int32 }
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: iinc [index] [const] (index, const 都是一字节) 字节: 0x84 0x01 0x02 // 给本地变量表下标为 1 的变量加上常量 2 操作: 给本地变量表下标为 index 的整型变量加上常量 const
func (*IInc) FetchOperands ¶
func (this *IInc) FetchOperands(reader *base.ByteCodeReader)
type IMul ¶
type IMul struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: imul 字节: 0x68 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1*value2)
PS: value1 和 value2 都必须是整数,若发生溢出,则保留低 32位,溢出时不抛异常
type INeg ¶
type INeg struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: ineg 字节: 0x74 操作: 弹出操作数栈顶的整数取反后,并将结果推到操作数栈顶
..., value1 -> ..., (-value1)
type IOr ¶
type IOr struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: ior 字节: 0x80 操作: 栈顶两个 long 型操作数做或操作
..., num2, num1 -> ..., (num2 | num1)
type IRem ¶
type IRem struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: irem 字节: 0x70 操作: 计算操作数栈顶两个整数的余数,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2%value1)
PS: value1 和 value2 都必须是整数, 当除数为 0 时抛 ArithmeticException 异常
type IShL ¶
type IShL struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: ishl 字节: 0x78 操作: 将栈顶整型元素左移 bits 位
..., num, bits -> ..., (num << (bits & 0x1F))
PS: 因为是int,所以左移操作的位数不会超过 31,所以拿到 bits 后,截取后 5个bit 作为位移距离
type IShR ¶
type IShR struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: ishr 字节: 0x7a 操作: 将栈顶整型元素右移 bits 位(算数右移)
..., num, bits -> ..., (num >> (bits & 0x1F))
PS: 因为是int,所以位移操作的位数不会超过 31,所以拿到 bits 后,截取后 5个bit 作为位移距离
type ISub ¶
type ISub struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf isub Page.501
格式: isub 字节: 0x64 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2-value1)
PS: value1 和 value2 都必须是整数,若发生溢出,则保留低 32位,溢出时不抛异常
type IUShR ¶
type IUShR struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: iushr 字节: 0x7c 操作: 将栈顶整型元素逻辑右移 bits 位
..., num, bits -> ..., (num >> (bits & 0x1F))
PS: 因为是int,所以位移操作的位数不会超过 31,所以拿到 bits 后,截取后 5个bit 作为位移距离
type IXOr ¶
type IXOr struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: ixor 字节: 0x82 操作: 栈顶两个 int 型操作数做异或操作
..., num2, num1 -> ..., (num2 ^ num1)
type LAdd ¶
type LAdd struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf ladd Page.509
格式: ladd 字节: 0x61 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1+value2)
PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常
type LAnd ¶
type LAnd struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: land 字节: 0x7f 操作: 栈顶两个 long 型操作数做与操作
..., num2, num1 -> ..., (num2 & num1)
type LDiv ¶
type LDiv struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: ldiv 字节: 0x6d 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶
..., value2, value1 /> ..., (value2/value1)
PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常
type LMul ¶
type LMul struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: lmul 字节: 0x69 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value1*value2)
PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常
type LNeg ¶
type LNeg struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: lneg 字节: 0x75 操作: 弹出操作数栈顶的long取反后,并将结果推到操作数栈顶
..., value1 -> ..., (-value1)
type LOr ¶
type LOr struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: lor 字节: 0x81 操作: 栈顶两个 long 型操作数做或操作
..., num2, num1 -> ..., (num2 | num1)
type LRem ¶
type LRem struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: lrem 字节: 0x71 操作: 计算操作数栈顶两个long型整数的余数,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2%value1)
PS: value1 和 value2 都必须是long
type LShL ¶
type LShL struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: lshl 字节: 0x79 操作: 将栈顶long型元素左移 bits 位
..., num, bits -> ..., (num << (bits & 0x3F))
PS: num 是 long,bits是 int,左移操作的位数不会超过 63,所以拿到 bits 后,截取后 6个bit 作为位移距离
type LShR ¶
type LShR struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: lshr 字节: 0x7b 操作: 将栈顶long型元素右移 bits 位(算数右移)
..., num, bits -> ..., (num >> (bits & 0x3F))
PS: num 是 long,bits是 int,左移操作的位数不会超过 63,所以拿到 bits 后,截取后 6个bit 作为位移距离
type LSub ¶
type LSub struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf lsub Page.502
格式: lsub 字节: 0x65 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶
..., value2, value1 -> ..., (value2-value1)
PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常
type LUShR ¶
type LUShR struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: lushr 字节: 0x7d 操作: 将栈顶long型元素逻辑右移 bits 位
..., num, bits -> ..., (num >> (bits & 0x3F))
PS: num 是 long,bits是 int,左移操作的位数不会超过 63,所以拿到 bits 后,截取后 6个bit 作为位移距离
type LXOr ¶
type LXOr struct {
base.NoOperandsInstruction
}
指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
格式: land 字节: 0x83 操作: 栈顶两个 long 型操作数做异或操作
..., num2, num1 -> ..., (num2 ^ num1)