x86streamtest.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 68 行
JAVA
68 行
/*
* $Id: X86StreamTest.java,v 1.9 2004/02/24 08:04:13 epr Exp $
*/
package org.jnode.test;
import java.io.FileOutputStream;
import org.jnode.assembler.Label;
import org.jnode.assembler.x86.Register;
import org.jnode.assembler.x86.X86Constants;
import org.jnode.assembler.x86.X86Stream;
import org.jnode.vm.x86.X86CpuID;
/**
* @author epr
*/
public class X86StreamTest {
public static void main(String[] args)
throws Exception {
final X86Stream os = new X86Stream(X86CpuID.createID("pentium4"), 0);
final Label label = new Label("label");
os.writeADD(Register.EDX, Register.EAX);
os.setObjectRef(label);
os.writeNOP();
os.writeLOOP(label);
os.writeTEST_AL(0xff);
os.writeTEST(Register.EBX, 0xABCD1234);
os.writeCMPXCHG_EAX(Register.EDX, 4, Register.ECX, false);
os.writeLEA(Register.ESI, Register.ESI, Register.EBX, 8, 4);
os.writeCMPXCHG_EAX(Register.EDX, 4, Register.ECX, true);
os.writeJMP(label, 2, false);
os.writeCALL(label, 4, false);
os.writeTEST(Register.ECX, Register.EBX);
os.writeCMOVcc(X86Constants.JLE, Register.EAX, Register.EBX);
os.writeCMOVcc(X86Constants.JE, Register.EAX, Register.EBX, 5);
os.writeADD(Register.EAX, 28, 11);
os.writeCALL(Register.EAX, 28);
os.writeCMP(Register.EAX, Register.ECX, 4);
os.writeCMP(Register.EAX, 4, Register.ECX);
os.writePrefix(X86Constants.FS_PREFIX);
os.writeCMP_MEM(Register.ESP, 24);
os.writeMOV_Const(Register.ESP, 4, 24);
os.writeSBB(Register.EDX, 5);
os.writeSBB(Register.EDX, 305);
final Label jt = new Label("Jumptable");
os.writeSHL(Register.ECX, 2);
os.writeJMP(jt, Register.ECX);
os.setObjectRef(jt);
os.write32(0x1234ABCD);
os.write32(0xFFEEDDCC);
os.writeJMP(Register.EDX, 15);
os.writeADD(Register.EDX, Register.EBX, 5);
os.writeSUB(Register.EDX, 3);
FileOutputStream fos = new FileOutputStream("test.bin");
os.writeTo(fos);
fos.close();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?