📄 op.pas
字号:
unit op;
{ Generated automatically from d:\prolog\codes\opdata2.cmd, 05.11.1999 11:25:27 }
(*
The i586 opcodes module of the DCU32INT utility by Alexei Hmelnov.
You can edit it manually, but I don't advise to do it.
----------------------------------------------------------------------------
E-Mail: alex@monster.icc.ru
http://monster.icc.ru/~alex/DCU/
----------------------------------------------------------------------------
See the file "readme.txt" for more details.
------------------------------------------------------------------------
IMPORTANT NOTE:
This software is provided 'as-is', without any expressed or implied warranty.
In no event will the author be held liable for any damages arising from the
use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented, you must not
claim that you wrote the original software.
2. Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
*)
interface
uses 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -