📄 op.pas
字号:
unit op;
{ Generated automatically from D:\PROLOG\CODES\Opdata2.cmd, 27.10.2002 21:57:36 }
interface
uses DAsmDefs, DAsmUtil;
const
hnQ = $0 or nf;
hnRET = $1 or nf;
hnJMP = $2 or nf;
hnJ_ = $3 or nf;
hnLOOP = $4 or nf;
hnLOOPE = $5 or nf;
hnLOOPNE = $6 or nf;
hnJCXZ = $7 or nf;
hnCALL = $8 or nf;
hnAL = $9 or nf;
hnCL = $A or nf;
hnDL = $B or nf;
hnBL = $C or nf;
hnAH = $D or nf;
hnCH = $E or nf;
hnDH = $F or nf;
hnBH = $10 or nf;
hnAX = $11 or nf;
hnCX = $12 or nf;
hnDX = $13 or nf;
hnBX = $14 or nf;
hnSP = $15 or nf;
hnBP = $16 or nf;
hnSI = $17 or nf;
hnDI = $18 or nf;
hnEAX = $19 or nf;
hnECX = $1A or nf;
hnEDX = $1B or nf;
hnEBX = $1C or nf;
hnESP = $1D or nf;
hnEBP = $1E or nf;
hnESI = $1F or nf;
hnEDI = $20 or nf;
hnO = $21 or nf;
hnNO = $22 or nf;
hnB = $23 or nf;
hnNB = $24 or nf;
hnE = $25 or nf;
hnNE = $26 or nf;
hnBE = $27 or nf;
hnA = $28 or nf;
hnS = $29 or nf;
hnNS = $2A or nf;
hnP = $2B or nf;
hnNP = $2C or nf;
hnL = $2D or nf;
hnGE = $2E or nf;
hnLE = $2F or nf;
hnG = $30 or nf;
hnADD = $31 or nf;
hnOR = $32 or nf;
hnADC = $33 or nf;
hnSBB = $34 or nf;
hnAND = $35 or nf;
hnSUB = $36 or nf;
hnXOR = $37 or nf;
hnCMP = $38 or nf;
hnDAA = $39 or nf;
hnDAS = $3A or nf;
hnAAA = $3B or nf;
hnAAS = $3C or nf;
hnINC = $3D or nf;
hnDEC = $3E or nf;
hnPUSH = $3F or nf;
hnPOP = $40 or nf;
hnMOVSB = $41 or nf;
hnMOVSW = $42 or nf;
hnCMPSB = $43 or nf;
hnCMPSW = $44 or nf;
hnSTOSB = $45 or nf;
hnSTOSW = $46 or nf;
hnLODSB = $47 or nf;
hnLODSW = $48 or nf;
hnSCASB = $49 or nf;
hnSCASW = $4A or nf;
hnROL = $4B or nf;
hnROR = $4C or nf;
hnRCL = $4D or nf;
hnRCR = $4E or nf;
hnSHL = $4F or nf;
hnSHR = $50 or nf;
hnRAR = $51 or nf;
hnBT = $52 or nf;
hnBTS = $53 or nf;
hnBTR = $54 or nf;
hnBTC = $55 or nf;
hnES = $56 or nf;
hnCS = $57 or nf;
hnSS = $58 or nf;
hnDS = $59 or nf;
hnFS = $5A or nf;
hnGS = $5B or nf;
hnNEAR = $5C or nf;
hnFAR = $5D or nf;
hnTEST = $5E or nf;
hnNOT = $5F or nf;
hnNEG = $60 or nf;
hnMUL = $61 or nf;
hnIMUL = $62 or nf;
hnDIV = $63 or nf;
hnIDIV = $64 or nf;
hnSLDT = $65 or nf;
hnSTR = $66 or nf;
hnLLDT = $67 or nf;
hnLTR = $68 or nf;
hnVERR = $69 or nf;
hnVERW = $6A or nf;
hnSGDT = $6B or nf;
hnSIDT = $6C or nf;
hnLGDT = $6D or nf;
hnLIDT = $6E or nf;
hnSMSW = $6F or nf;
hnLMSW = $70 or nf;
hnINVLPG = $71 or nf;
hnCR0 = $72 or nf;
hnCR2 = $73 or nf;
hnCR3 = $74 or nf;
hnDR0 = $75 or nf;
hnDR1 = $76 or nf;
hnDR2 = $77 or nf;
hnDR3 = $78 or nf;
hnDR6 = $79 or nf;
hnDR7 = $7A or nf;
hnTR3 = $7B or nf;
hnTR4 = $7C or nf;
hnTR5 = $7D or nf;
hnTR6 = $7E or nf;
hnTR7 = $7F or nf;
hnLAR = $80 or nf;
hnLSL = $81 or nf;
hnLOADALL = $82 or nf;
hnCLTS = $83 or nf;
hnINVD = $84 or nf;
hnWBINVD = $85 or nf;
hnILLEGAL = $86 or nf;
hnMOV = $87 or nf;
hnWRMSR = $88 or nf;
hnRDTSC = $89 or nf;
hnRDMSR = $8A or nf;
hnRDPMC = $8B or nf;
hnCMOV_ = $8C or nf;
hnSET_ = $8D or nf;
hnCPUID = $8E or nf;
hnSHLD = $8F or nf;
hnCMPXCHG = $90 or nf;
hnRSM = $91 or nf;
hnSHRD = $92 or nf;
hnLSS = $93 or nf;
hnLFS = $94 or nf;
hnLGS = $95 or nf;
hnMOVZX = $96 or nf;
hnILLEG1 = $97 or nf;
hnBSF = $98 or nf;
hnBSR = $99 or nf;
hnMOVSX = $9A or nf;
hnXADD = $9B or nf;
hnBSWAP = $9C or nf;
hnST = $9D or nf;
hnST1 = $9E or nf;
hnST2 = $9F or nf;
hnST3 = $A0 or nf;
hnST4 = $A1 or nf;
hnST5 = $A2 or nf;
hnST6 = $A3 or nf;
hnST7 = $A4 or nf;
hnCOM = $A5 or nf;
hnCOMP = $A6 or nf;
hnSUBR = $A7 or nf;
hnDIVR = $A8 or nf;
hnLD = $A9 or nf;
hnSTP = $AA or nf;
hnFLDENV = $AB or nf;
hnFLDCW = $AC or nf;
hnFSTENV = $AD or nf;
hnFSTCW = $AE or nf;
hnFLD = $AF or nf;
hnFXCH = $B0 or nf;
hnFNOP = $B1 or nf;
hnFSTP = $B2 or nf;
hnFCHS = $B3 or nf;
hnFABS = $B4 or nf;
hnFTST = $B5 or nf;
hnFXAM = $B6 or nf;
hnFLD1 = $B7 or nf;
hnFLDL2T = $B8 or nf;
hnFLDL2E = $B9 or nf;
hnFLDPI = $BA or nf;
hnFLDLG2 = $BB or nf;
hnFLDLN2 = $BC or nf;
hnFLDZ = $BD or nf;
hnF2XM1 = $BE or nf;
hnFYL2X = $BF or nf;
hnFPTAN = $C0 or nf;
hnFPATAN = $C1 or nf;
hnFXTRACT = $C2 or nf;
hnFPREM = $C3 or nf;
hnFDECSTP = $C4 or nf;
hnFINCSTP = $C5 or nf;
hnFYL2XP1 = $C6 or nf;
hnFSQRT = $C7 or nf;
hnFSINCOS = $C8 or nf;
hnFRNDINT = $C9 or nf;
hnFSCALE = $CA or nf;
hnFSIN = $CB or nf;
hnFCOS = $CC or nf;
hnFST = $CD or nf;
hnFENI = $CE or nf;
hnFDISI = $CF or nf;
hnFCLEX = $D0 or nf;
hnFINIT = $D1 or nf;
hnFSETPM = $D2 or nf;
hnFSTOR = $D3 or nf;
hnFSAVE = $D4 or nf;
hnFSTSW = $D5 or nf;
hnFFREE = $D6 or nf;
hnFUCOM = $D7 or nf;
hnFUCOMP = $D8 or nf;
hnFBLD = $D9 or nf;
hnFILD = $DA or nf;
hnFBSTP = $DB or nf;
hnFISTP = $DC or nf;
hnU = $DD or nf;
hnF = $DE or nf;
hnFI = $DF or nf;
hnFCMOV_ = $E0 or nf;
hnFUCOMPP = $E1 or nf;
hnFCMOVN_ = $E2 or nf;
hnFUCOMI = $E3 or nf;
hnFCOMI = $E4 or nf;
hnFUCOMIP = $E5 or nf;
hnFCOMIP = $E6 or nf;
hnFWAIT = $E7 or nf;
hnPUSHA = $E8 or nf;
hnPOPA = $E9 or nf;
hnBOUND = $EA or nf;
hnARPL = $EB or nf;
hnINSB = $EC or nf;
hnINSW = $ED or nf;
hnOUTSB = $EE or nf;
hnOUTSW = $EF or nf;
hnXCHG = $F0 or nf;
hnLEA = $F1 or nf;
hnNOP = $F2 or nf;
hnCBW = $F3 or nf;
hnCWD = $F4 or nf;
hnWAIT = $F5 or nf;
hnPUSHF = $F6 or nf;
hnPOPF = $F7 or nf;
hnSAHF = $F8 or nf;
hnLAHF = $F9 or nf;
hnLES = $FA or nf;
hnLDS = $FB or nf;
hnENTER = $FC or nf;
hnLEAVE = $FD or nf;
hnINT = $FE or nf;
hnINTO = $FF or nf;
hnIRET = $100 or nf;
hnAAM = $101 or nf;
hnAAD = $102 or nf;
hnXLAT = $103 or nf;
hnESC = $104 or nf;
hnIN = $105 or nf;
hnOUT = $106 or nf;
hnLOCK = $107 or nf;
hnREPNE = $108 or nf;
hnREPE = $109 or nf;
hnHALT = $10A or nf;
hnCMC = $10B or nf;
hnCLC = $10C or nf;
hnSTC = $10D or nf;
hnCLI = $10E or nf;
hnSTI = $10F or nf;
hnCLD = $110 or nf;
hnSTD = $111 or nf;
function GetOpName(hName: THBMName):TBMOpRec;
const
ntRegB: array[0..8-1]of THBMName = (
hnAL, hnCL, hnDL, hnBL, hnAH, hnCH, hnDH, hnBH
);
const
ntReg16: array[0..8-1]of THBMName = (
hnAX, hnCX, hnDX, hnBX, hnSP, hnBP, hnSI, hnDI
);
const
ntReg32: array[0..8-1]of THBMName = (
hnEAX, hnECX, hnEDX, hnEBX, hnESP, hnEBP, hnESI, hnEDI
);
function readOP: boolean;
implementation
const
BMNames: array[0..274-1] of TBMOpRec = (
{0x0}'?','RET','JMP','J_','LOOP','LOOPE','LOOPNE','JCXZ',
{0x8}'CALL','AL','CL','DL','BL','AH','CH','DH',
{0x10}'BH','AX','CX','DX','BX','SP','BP','SI',
{0x18}'DI','EAX','ECX','EDX','EBX','ESP','EBP','ESI',
{0x20}'EDI','O','NO','B','NB','E','NE','BE',
{0x28}'A','S','NS','P','NP','L','GE','LE',
{0x30}'G','ADD','OR','ADC','SBB','AND','SUB','XOR',
{0x38}'CMP','DAA','DAS','AAA','AAS','INC','DEC','PUSH',
{0x40}'POP','MOVSB','MOVSW','CMPSB','CMPSW','STOSB','STOSW','LODSB',
{0x48}'LODSW','SCASB','SCASW','ROL','ROR','RCL','RCR','SHL',
{0x50}'SHR','RAR','BT','BTS','BTR','BTC','ES','CS',
{0x58}'SS','DS','FS','GS','NEAR','FAR','TEST','NOT',
{0x60}'NEG','MUL','IMUL','DIV','IDIV','SLDT','STR','LLDT',
{0x68}'LTR','VERR','VERW','SGDT','SIDT','LGDT','LIDT','SMSW',
{0x70}'LMSW','INVLPG','CR0','CR2','CR3','DR0','DR1','DR2',
{0x78}'DR3','DR6','DR7','TR3','TR4','TR5','TR6','TR7',
{0x80}'LAR','LSL','LOADALL','CLTS','INVD','WBINVD','ILLEGAL','MOV',
{0x88}'WRMSR','RDTSC','RDMSR','RDPMC','CMOV_','SET_','CPUID','SHLD',
{0x90}'CMPXCHG','RSM','SHRD','LSS','LFS','LGS','MOVZX','ILLEG1',
{0x98}'BSF','BSR','MOVSX','XADD','BSWAP','ST','ST1','ST2',
{0xA0}'ST3','ST4','ST5','ST6','ST7','COM','COMP','SUBR',
{0xA8}'DIVR','LD','STP','FLDENV','FLDCW','FSTENV','FSTCW','FLD',
{0xB0}'FXCH','FNOP','FSTP','FCHS','FABS','FTST','FXAM','FLD1',
{0xB8}'FLDL2T','FLDL2E','FLDPI','FLDLG2','FLDLN2','FLDZ','F2XM1','FYL2X',
{0xC0}'FPTAN','FPATAN','FXTRACT','FPREM','FDECSTP','FINCSTP','FYL2XP1','FSQRT',
{0xC8}'FSINCOS','FRNDINT','FSCALE','FSIN','FCOS','FST','FENI','FDISI',
{0xD0}'FCLEX','FINIT','FSETPM','FSTOR','FSAVE','FSTSW','FFREE','FUCOM',
{0xD8}'FUCOMP','FBLD','FILD','FBSTP','FISTP','U','F','FI',
{0xE0}'FCMOV_','FUCOMPP','FCMOVN_','FUCOMI','FCOMI','FUCOMIP','FCOMIP','FWAIT',
{0xE8}'PUSHA','POPA','BOUND','ARPL','INSB','INSW','OUTSB','OUTSW',
{0xF0}'XCHG','LEA','NOP','CBW','CWD','WAIT','PUSHF','POPF',
{0xF8}'SAHF','LAHF','LES','LDS','ENTER','LEAVE','INT','INTO',
{0x100}'IRET','AAM','AAD','XLAT','ESC','IN','OUT','LOCK',
{0x108}'REPNE','REPE','HALT','CMC','CLC','STC','CLI','STI',
{0x110}'CLD','STD'
);
function GetOpName(hName: THBMName):TBMOpRec;
begin
hName := hName and nm;
if (hName<0)or(hName>High(BMNames)) then
Result := ''
else
Result := BMNames[hName];
end ;
function RegW(R: integer; var RN: integer): boolean;
var
OS: integer;
begin
Result := false;
OS := getOS;
case OS of
$0: RN := ntReg16[R];
$1: RN := ntReg32[R];
else Exit;
end;
Result := true;
end ;
function Reg(W,R: integer; var RN: integer): boolean;
begin
Result := false;
case W of
$0: RN := ntRegB[R];
$1: if not RegW(R,RN) then Exit;
else Exit;
end;
Result := true;
end ;
function JmpOfsW: boolean;
begin
Result := false;
if not jmpOfs(1+getOS) then Exit;
Result := true;
end ;
const
ntJmpCond: array[0..16-1]of THBMName = (
hnO, hnNO, hnB, hnNB, hnE, hnNE, hnBE, hnA, hnS, hnNS, hnP, hnNP, hnL, hnGE, hnLE, hnG
);
const
ntArOp: array[0..8-1]of THBMName = (
hnADD, hnOR, hnADC, hnSBB, hnAND, hnSUB, hnXOR, hnCMP
);
const
ntDecArOp: array[0..4-1]of THBMName = (
hnDAA, hnDAS, hnAAA, hnAAS
);
const
ntIDPPS: array[0..4-1]of THBMName = (
hnINC, hnDEC, hnPUSH, hnPOP
);
const
ntStrOp1: array[0..4-1]of THBMName = (
hnMOVSB, hnMOVSW, hnCMPSB, hnCMPSW
);
const
ntStrOp2: array[0..8-1]of THBMName = (
hnQ, hnQ, hnSTOSB, hnSTOSW, hnLODSB, hnLODSW, hnSCASB, hnSCASW
);
const
ntShftOp: array[0..8-1]of THBMName = (
hnROL, hnROR, hnRCL, hnRCR, hnSHL, hnSHR, hnQ, hnRAR
);
const
ntBtOp: array[0..8-1]of THBMName = (
hnQ, hnQ, hnQ, hnQ, hnBT, hnBTS, hnBTR, hnBTC
);
const
ntSReg: array[0..8-1]of THBMName = (
hnES, hnCS, hnSS, hnDS, hnFS, hnGS, hnQ, hnQ
);
const
ntcallDist: array[0..2-1]of THBMName = (
hnNEAR, hnFAR
);
const
ntLoopS: array[0..4-1]of THBMName = (
hnLOOPNE, hnLOOPE, hnLOOP, hnJCXZ
);
const
ntGr1Op: array[0..8-1]of THBMName = (
hnTEST, hnQ, hnNOT, hnNEG, hnMUL, hnIMUL, hnDIV, hnIDIV
);
const
ntGr2Op: array[0..4-1]of THBMName = (
hnQ, hnCALL, hnJMP, hnQ
);
const
ntGr3Op: array[0..2-1]of THBMName = (
hnINC, hnDEC
);
const
ntGr6Op: array[0..8-1]of THBMName = (
hnSLDT, hnSTR, hnLLDT, hnLTR, hnVERR, hnVERW, hnQ, hnQ
);
const
ntGr7Op: array[0..8-1]of THBMName = (
hnSGDT, hnSIDT, hnLGDT, hnLIDT, hnSMSW, hnQ, hnLMSW, hnINVLPG
);
const
ntCReg: array[0..8-1]of THBMName = (
hnCR0, hnQ, hnCR2, hnCR3, hnQ, hnQ, hnQ, hnQ
);
const
ntDReg: array[0..8-1]of THBMName = (
hnDR0, hnDR1, hnDR2, hnDR3, hnQ, hnQ, hnDR6, hnDR7
);
const
ntTReg: array[0..8-1]of THBMName = (
hnQ, hnQ, hnQ, hnTR3, hnTR4, hnTR5, hnTR6, hnTR7
);
function getEAV(W: integer; var M,A: integer): boolean;
begin
Result := false;
case W and $1 of
$0: ;
else W := 1+getOS;
end;
if not getEA(W,M,A) then Exit;
Result := true;
end ;
function readEA(W: integer; var M: integer): boolean;
var
A: integer;
begin
Result := false;
if not getEAV(W,M,A) then Exit;
SetCmdArg(A);
Result := true;
end ;
function imW(W: integer): boolean;
begin
Result := false;
case W and $1 of
$0: if not ImmedBW(0) then Exit;
else if not ImmedBW(1+getOS) then Exit;
end;
Result := true;
end ;
function imSignExt(S,W: integer): boolean;
begin
Result := false;
case S of
$0: if not imW(W) then Exit;
$1: if not imInt(0) then Exit;
else Exit;
end;
Result := true;
end ;
function xchgArg(D,A1,A2: integer): boolean;
begin
Result := false;
case D of
$0: begin
SetCmdArg(A1);
SetCmdArg(A2);
end;
$1: begin
SetCmdArg(A2);
SetCmdArg(A1);
end;
else Exit;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -