abstractx86stream.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 857 行 · 第 1/2 页
JAVA
857 行
/**
* Create a imul eax, srcReg
* @param srcReg
*/
public abstract void writeIMUL_EAX(Register srcReg);
/**
* Create a inc reg32
* @param dstReg
*/
public abstract void writeINC(Register dstReg);
/**
* Create a int vector
* @param vector
*/
public abstract void writeINT(int vector);
/**
* Create a conditional jump to a label The opcode sequence is: 0x0f <jumpOpcode><rel32>
* @param label
* @param jumpOpcode
*/
public abstract void writeJCC(Label label, int jumpOpcode);
/**
* Create a relative jump to a given label
*
* @param label
*/
public abstract void writeJMP(Label label);
/**
* Create a absolute jump to address in register
* @param reg32
*/
public abstract void writeJMP(Register reg32);
/**
* Create a absolute jump to [reg32+disp]
* @param reg32
*/
public abstract void writeJMP(Register reg32, int disp);
/**
* Create a absolute jump to address stored at the given offset
* in the given table pointer.
* @param tablePtr
* @param offset
* @param rawAddress If true, tablePtr is a raw address
*/
public abstract void writeJMP(Object tablePtr, int offset, boolean rawAddress);
/**
* Create a absolute jump to address stored at the given offset (in register)
* in the given table pointer.
* @param tablePtr
* @param offsetReg
*/
public abstract void writeJMP(Object tablePtr, Register offsetReg);
/**
* Create a LOOP label instruction. The given label must have be resolved before!
*
* @param label
* @throws UnresolvedObjectRefException
*/
public abstract void writeLOOP(Label label) throws UnresolvedObjectRefException;
/**
* Create a lea dstReg,[srcReg+disp]
* @param dstReg
* @param srcReg
* @param disp
*/
public abstract void writeLEA(Register dstReg, Register srcReg, int disp);
/**
* Create a lea dstReg,[srcReg+srcIdxReg*scale+disp]
* @param dstReg
* @param srcReg
* @param srcIdxReg
* @param scale
* @param disp
*/
public abstract void writeLEA(Register dstReg, Register srcReg, Register srcIdxReg, int scale, int disp);
/**
* Create a LODSD
*/
public abstract void writeLODSD();
/**
* Create a mov <reg>,<imm32>
* @param destReg
* @param imm32
*/
public abstract void writeMOV_Const(Register destReg, int imm32);
/**
* Create a mov [destReg+destDisp],<imm32>
* @param destReg
* @param destDisp
* @param imm32
*/
public abstract void writeMOV_Const(Register destReg, int destDisp, int imm32);
/**
* Create a mov <dstReg>,<srcReg>
* @param operandSize
* @param dstReg
* @param srcReg
*/
public abstract void writeMOV(int operandSize, Register dstReg, Register srcReg);
/**
* Create a mov [dstReg+dstDisp], <srcReg>
* @param operandSize
* @param dstReg
* @param dstDisp
* @param srcReg
*/
public abstract void writeMOV(int operandSize, Register dstReg, int dstDisp, Register srcReg);
/**
* Create a mov [dstReg+dstIdxReg*scale+dstDisp], <srcReg>
* @param operandSize
* @param dstReg
* @param dstIdxReg
* @param scale
* @param dstDisp
* @param srcReg
*/
public abstract void writeMOV(int operandSize, Register dstReg, Register dstIdxReg, int scale, int dstDisp, Register srcReg);
/**
* Create a mov dstReg, [srcReg+srcDisp]
* @param operandSize
* @param dstReg
* @param srcReg
* @param srcDisp
*/
public abstract void writeMOV(int operandSize, Register dstReg, Register srcReg, int srcDisp);
/**
* Create a mov dstReg, [srcReg+srcIdxReg*scale+srcDisp]
* @param operandSize
* @param dstReg
* @param srcReg
* @param srcIdxReg
* @param scale
* @param srcDisp
*/
public abstract void writeMOV(int operandSize, Register dstReg, Register srcReg, Register srcIdxReg, int scale, int srcDisp);
/**
* Create a mov <reg>,<label>
* @param dstReg
* @param label
*/
public abstract void writeMOV_Const(Register dstReg, Object label);
/**
* Create a movsx <dstReg>,<srcReg>
* @param dstReg
* @param srcReg
* @param srcSize
*/
public abstract void writeMOVSX(Register dstReg, Register srcReg, int srcSize);
/**
* Create a movzx <dstReg>,<srcReg>
* @param dstReg
* @param srcReg
* @param srcSize
*/
public abstract void writeMOVZX(Register dstReg, Register srcReg, int srcSize);
/**
* Create a mul eax, srcReg
* @param srcReg
*/
public abstract void writeMUL_EAX(Register srcReg);
/**
* Create a neg dword [dstReg+dstDisp]
* @param dstReg
* @param dstDisp
*/
public abstract void writeNEG(Register dstReg, int dstDisp);
/**
* Create a neg dstReg
* @param dstReg
*/
public abstract void writeNEG(Register dstReg);
/**
* Create a nop
*/
public abstract void writeNOP();
/**
* Create a OR dstReg, srcReg
* @param dstReg
* @param srcReg
*/
public abstract void writeOR(Register dstReg, Register srcReg);
/**
* Create a OR [dstReg+dstDisp], srcReg
* @param dstReg
* @param dstDisp
* @param srcReg
*/
public abstract void writeOR(Register dstReg, int dstDisp, Register srcReg);
/**
* Create a sahf
*/
public abstract void writeSAHF();
/**
* Create a SAL dstReg,cl
* @param dstReg
*/
public abstract void writeSAL_CL(Register dstReg);
/**
* Create a SAL dstReg,imm8
* @param dstReg
* @param imm8
*/
public abstract void writeSAL(Register dstReg, int imm8);
/**
* Create a SAR dstReg,cl
* @param dstReg
*/
public abstract void writeSAR_CL(Register dstReg);
/**
* Create a SAR dstReg,imm8
* @param dstReg
* @param imm8
*/
public abstract void writeSAR(Register dstReg, int imm8);
/**
* Create a SHL dstReg,cl
* @param dstReg
*/
public abstract void writeSHL_CL(Register dstReg);
/**
* Create a SHLD dstReg,srcReg,cl
* @param dstReg
* @param srcReg
*/
public abstract void writeSHLD_CL(Register dstReg, Register srcReg);
/**
* Create a SHL dstReg,imm8
* @param dstReg
* @param imm8
*/
public abstract void writeSHL(Register dstReg, int imm8);
/**
* Create a SHR dstReg,cl
* @param dstReg
*/
public abstract void writeSHR_CL(Register dstReg);
/**
* Create a SHRD dstReg,srcReg,cl
* @param dstReg
* @param srcReg
*/
public abstract void writeSHRD_CL(Register dstReg, Register srcReg);
/**
* Create a SHL dstReg,imm8
* @param dstReg
* @param imm8
*/
public abstract void writeSHR(Register dstReg, int imm8);
/**
* Create a SBB dstReg, srcReg
* @param dstReg
* @param srcReg
*/
public abstract void writeSBB(Register dstReg, Register srcReg);
/**
* Create a SBB dstReg, imm32
* @param dstReg
* @param imm32
*/
public abstract void writeSBB(Register dstReg, int imm32);
/**
* Create a SBB dword [dstReg+dstDisp], <imm32>
* @param dstReg
* @param dstDisp
* @param imm32
*/
public abstract void writeSBB(Register dstReg, int dstDisp, int imm32);
/**
* Create a SBB [dstReg+dstDisp], <srcReg>
* @param dstReg
* @param dstDisp
* @param srcReg
*/
public abstract void writeSBB(Register dstReg, int dstDisp, Register srcReg);
/**
* Create a SUB dstReg, srcReg
* @param dstReg
* @param srcReg
*/
public abstract void writeSUB(Register dstReg, Register srcReg);
/**
* Create a SUB reg, imm32
*
* @param reg
* @param imm32
*/
public abstract void writeSUB(Register reg, int imm32);
/**
* Create a SUB [dstReg+dstDisp], <srcReg>
* @param dstReg
* @param dstDisp
* @param srcReg
*/
public abstract void writeSUB(Register dstReg, int dstDisp, Register srcReg);
/**
* Create a XOR dstReg, srcReg
* @param dstReg
* @param srcReg
*/
public abstract void writeXOR(Register dstReg, Register srcReg);
/**
* Create a XOR [dstReg+dstDisp], srcReg
* @param dstReg
* @param dstDisp
* @param srcReg
*/
public abstract void writeXOR(Register dstReg, int dstDisp, Register srcReg);
/**
* Start a new object and write its header. An ObjectInfo object is returned, on which the
* <code>markEnd</code> mehod must be called after all data has been written into the object.
*
* @param cls
* @see ObjectInfo
* @return The info for the started object
*/
public abstract ObjectInfo startObject(VmType cls);
/**
* Create a pop reg32
* @param dstReg
*/
public abstract void writePOP(Register dstReg);
/**
* Create a pop dword [reg32+disp]
* @param dstReg
* @param dstDisp
*/
public abstract void writePOP(Register dstReg, int dstDisp);
/**
* Create a push dword <imm32>
* @param imm32
* @return The ofset of the start of the instruction.
*/
public abstract int writePUSH(int imm32);
/**
* Create a push reg32
* @param srcReg
* @return The ofset of the start of the instruction.
*/
public abstract int writePUSH(Register srcReg);
/**
* Create a push dword [reg32+disp]
* @param srcReg
* @param srcDisp
* @return The ofset of the start of the instruction.
*/
public abstract int writePUSH(Register srcReg, int srcDisp);
/**
* Create a push dword [baseReg+indexReg*scale+disp]
* @param srcBaseReg
* @param srcIndexReg
* @param srcScale
* @param srcDisp
* @return The ofset of the start of the instruction.
*/
public abstract int writePUSH(Register srcBaseReg, Register srcIndexReg, int srcScale, int srcDisp);
/**
* Create a ret near to caller
*/
public abstract void writeRET();
/**
* Create a ret imm16 near to caller
* @param imm16
*/
public abstract void writeRET(int imm16);
/**
* Create a TEST al, imm8
* @param value
*/
public abstract void writeTEST_AL(int value);
/**
* Create a TEST eax, imm32
* @param value
*/
public abstract void writeTEST_EAX(int value);
/**
* Create a TEST reg, imm32
*
* @param reg
* @param imm32
*/
public abstract void writeTEST(Register reg, int imm32);
/**
* Create a TEST reg1, reg2
*
* @param reg1
* @param reg2
*/
public abstract void writeTEST(Register reg1, Register reg2);
/**
* Create 32-bit offset relative to the current (after this offset) offset.
* @param label
*/
public abstract void writeRelativeObjectRef(Label label);
/**
* Write my contents to the given stream.
*
* @param os
* @throws IOException
*/
public abstract void writeTo(OutputStream os) throws IOException;
/**
* Is logging enabled.
* This method will only return true on on debug like implementations.
* @return boolean
*/
public abstract boolean isLogEnabled();
/**
* Write a log message.
* This method is only implemented on debug like implementations.
* @param msg
*/
public abstract void log(Object msg);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?