📄 dis.h
字号:
/* ** @(#) dis.h, Ver. 2.1 created 00:00:00 87/09/01 */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 1987 G. M. Harding, all rights reserved * * * * Permission to copy and redistribute is hereby granted, * * provided full source code, with all copyright notices, * * accompanies any redistribution. * * * * This file contains declarations and definitions used by * * the 8088 disassembler program. The program was designed * * for execution on a machine of its own type (i.e., it is * * not designed as a cross-disassembler); consequently, A * * SIXTEEN-BIT INTEGER SIZE HAS BEEN ASSUMED. This assump- * * tion is not particularly important, however, except in * * the machine-specific portions of the code (i.e., the * * handler routines and the optab[] array). It should be * * possible to override this assumption, for execution on * * 32-bit machines, by use of a pre-processor directive * * (see below); however, this has not been tested. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#include <sys/types.h>#include <a.out.h> /* Object file format definitions */#include <fcntl.h> /* System file-control definitions */#include <unistd.h>#include <string.h>#include <stdlib.h>#include <stdio.h> /* System standard I/O definitions */#define MAXSYM 1500 /* Maximum entries in symbol table */extern struct nlist /* Array to hold the symbol table */ symtab[MAXSYM];extern struct reloc /* Array to hold relocation table */ relo[MAXSYM];extern int symptr; /* Index into the symtab[] array */extern int relptr; /* Index into the relo[] array */struct opcode /* Format for opcode data records */{ char *text; /* Pointer to mnemonic text */ void (*func)(); /* Pointer to handler routine */ unsigned min; /* Minimum # of object bytes */ unsigned max; /* Maximum # of object bytes */};extern struct opcode /* Array to hold the opcode table */ optab[256];extern char *REGS[]; /* Table of register names */extern char *REGS0[]; /* Mode 0 register name table */extern char *REGS1[]; /* Mode 1 register name table */#define AL REGS[0] /* CPU register manifests */#define CL REGS[1]#define DL REGS[2]#define BL REGS[3]#define AH REGS[4]#define CH REGS[5]#define DH REGS[6]#define BH REGS[7]#define AX REGS[8]#define CX REGS[9]#define DX REGS[10]#define BX REGS[11]#define SP REGS[12]#define BP REGS[13]#define SI REGS[14]#define DI REGS[15]#define ES REGS[16]#define CS REGS[17]#define SS REGS[18]#define DS REGS[19]#define BX_SI REGS0[0]#define BX_DI REGS0[1]#define BP_SI REGS0[2]#define BP_DI REGS0[3]extern int symrank[6][6]; /* Symbol type/rank matrix */extern unsigned long PC; /* Current program counter */extern int segflg; /* Flag: segment override in effect */extern int objflg; /* Flag: output object as a comment */#define OBJMAX 8 /* Size of the object code buffer */extern unsigned char /* Internal buffer for object code */ objbuf[OBJMAX];extern int objptr; /* Index into the objbuf[] array */extern char ADD[], /* Opcode family mnemonic strings */ OR[], ADC[], SBB[], AND[], SUB[], XOR[], CMP[], NOT[], NEG[], MUL[], DIV[], MOV[], ESC[], TEST[], AMBIG[];extern char *OPFAM[]; /* Indexed mnemonic family table */extern struct exec HDR; /* Holds the object file's header */#define LOOK_ABS 0 /* Arguments to lookup() function */#define LOOK_REL 1#define LOOK_LNG 2#define TR_STD 0 /* Arguments to mtrans() function */#define TR_SEG 8 /* Macro for byte input primitive */#define FETCH(p) ++PC; p = getchar() & 0xff; objbuf[objptr++] = p/* disfp.c */_PROTOTYPE(void eshand, (int j ));_PROTOTYPE(void fphand, (int j ));_PROTOTYPE(void inhand, (int j ));/* dishand.c */_PROTOTYPE(void objini, (int j ));_PROTOTYPE(void objout, (void));_PROTOTYPE(void badseq, (int j, int k ));_PROTOTYPE(void dfhand, (int j ));_PROTOTYPE(void sbhand, (int j ));_PROTOTYPE(void aohand, (int j ));_PROTOTYPE(void sjhand, (int j ));_PROTOTYPE(void imhand, (int j ));_PROTOTYPE(void mvhand, (int j ));_PROTOTYPE(void mshand, (int j ));_PROTOTYPE(void pohand, (int j ));_PROTOTYPE(void cihand, (int j ));_PROTOTYPE(void mihand, (int j ));_PROTOTYPE(void mqhand, (int j ));_PROTOTYPE(void tqhand, (int j ));_PROTOTYPE(void rehand, (int j ));_PROTOTYPE(void mmhand, (int j ));_PROTOTYPE(void srhand, (int j ));_PROTOTYPE(void aahand, (int j ));_PROTOTYPE(void iohand, (int j ));_PROTOTYPE(void ljhand, (int j ));_PROTOTYPE(void mahand, (int j ));_PROTOTYPE(void mjhand, (int j ));/* dismain.c */_PROTOTYPE(void main, (int argc, char **argv ));/* distabs.c */_PROTOTYPE(char *getnam, (int k ));_PROTOTYPE(int lookext, (long off, long loc, char *buf ));_PROTOTYPE(char *lookup, (long addr, int type, int kind, long ext ));_PROTOTYPE(char *mtrans, (int c, int m, int type ));_PROTOTYPE(void mtrunc, (char *a ));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -