⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 assemble.c

📁 This is to build a 2 pass assembler in c language.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
   /*********************************************************************
				DEFINITIONS
   **********************************************************************/
   typedef struct
   {
	char symbol[50];
	unsigned int LC;
	int type ;
	int memory;
   }SymbolTable;

   typedef struct
   {
       char mnemonic[7];
       char operand1[5],operand2[5];
       unsigned value;
       unsigned memory;
   }MCTable;

   typedef struct
   {
       int num;
       unsigned char code[5];
   }Instruction ;

   enum STYPE  { SEGMENT, CONSTANT, VARIABLE, MNEMONIC, LABEL,LABEL_DATA,
		  LABEL_DATA_ADDR, LABEL_CODE_ADDR};
   /*********************************************************************
			       END OF DEFINITIONS
   **********************************************************************/

   /*********************************************************************
			    GLOBAL DATA SECTION
   **********************************************************************/

    SymbolTable ST_Data[100];
    SymbolTable ST_Code[500];
    unsigned nData,nCode;
    unsigned numWords;

    char STATEMENT[10] [100] ;

    MCTable MCT[400] =
    {
{"AAA",	"",	"",	0x37 ,1},
{"AAD",	"",	"",	0xD50A ,2},
{"AAM",	"",	"",	0xD40A ,2},
{"AAS",	"",	"",	0x3F ,1},
{"CBW",	"",	"",	0x98 ,1},
{"CLC",	"",	"",	0xF8 ,1},
{"CLI",	"",	"",	0xFA ,1},
{"CMC",	"",	"",	0xF5 ,1},
{"CWD",	"",	"",	0x99 ,1},
{"DAA",	"",	"",	0x27 ,1},
{"DAS",	"",	"",	0x2F ,1},
{"HLT",	"",	"",	0xF4 ,1},
{"NOP",	"",	"",	0x90 ,1},
{"RET",	"",	"",	0xC3 ,1},
{"STC",	"",	"",	0xF9 ,1},
{"STD",	"",	"",	0xFD ,1},
{"STI",	"",	"",	0xFB ,1},
{"INTO","",	"",	0xCE ,1},
{"INT" ,"",	"",	0xCD ,2},
{"IRET","",	"",	0xCF ,1},
{"LAHF","",	"",	0x9F ,1},
{"POPF","",	"",	0x9D ,1},
{"SAHF","",	"",	0x9E ,1},
{"WAIT","",	"",	0x9B ,1},
{"XLAT","",	"",	0xD7 ,1},
{"DEC",	"AH",	"",	0xFECC ,3},
{"DEC",	"AL",	"",	0xFEC8 ,3},
{"DEC",	"AX",	"",	0x48 ,2},
{"DEC",	"BH",	"",	0xFECF ,3},
{"DEC",	"BL",	"",	0xFECB ,3},
{"DEC",	"BP",	"",	0x4D ,2},
{"DEC",	"BX",	"",	0x48 ,2},
{"DEC",	"CH",	"",	0xFECD ,3},
{"DEC",	"CL",	"",	0xFEC9 ,3},
{"DEC",	"CX",	"",	0x49 ,2},
{"DEC",	"DH",	"",	0xFECE ,3},
{"DEC",	"DI",	"",	0x4F ,2},
{"DEC",	"DL",	"",	0xFECA ,3},
{"DEC",	"DX",	"",	0x4A ,2},
{"DEC",	"SI",	"",	0x4E ,2},
{"DEC",	"SP",	"",	0x4C ,2},
{"DIV",	"AH",	"",	0xF6F4 ,3},
{"DIV",	"AL",	"",	0xF6F0 ,3},
{"DIV",	"AX",	"",	0xF7F0 ,3},
{"DIV",	"BH",	"",	0xF6F7 ,3},
{"DIV",	"BL",	"",	0xF6F3 ,3},
{"DIV",	"BP",	"",	0xF7F5 ,3},
{"DIV",	"BX",	"",	0xF7F3 ,3},
{"DIV",	"CH",	"",	0xF6F5 ,3},
{"DIV",	"CL",	"",	0xF6F2 ,3},
{"DIV",	"CX",	"",	0xF7F2 ,3},
{"DIV",	"DH",	"",	0xF6F6 ,3},
{"DIV",	"DI",	"",	0xF7F7 ,3},
{"DIV",	"DL",	"",	0xF6F3 ,3},
{"DIV",	"DX",	"",	0xF7F3 ,3},
{"DIV",	"SI",	"",	0xF7F6 ,3},
{"DIV",	"SP",	"",	0xF7F4 ,3},
{"INC",	"AH",	"",	0xFEC4 ,3},
{"INC",	"AL",	"",	0xFEC0 ,3},
{"INC",	"AX",	"",	0x40 ,2},
{"INC",	"BH",	"",	0xFEC7 ,2},
{"INC",	"BL",	"",	0xFEC3 ,3},
{"INC",	"BP",	"",	0x45 ,2},
{"INC",	"BX",	"",	0x43 ,2},
{"INC",	"CH",	"",	0xFEC5 ,3},
{"INC",	"CL",	"",	0xFEC2 ,3},
{"INC",	"CX",	"",	0x42 ,2},
{"INC",	"DH",	"",	0xFEC6 ,3},
{"INC",	"DI",	"",	0x47 ,2},
{"INC",	"DL",	"",	0xFEC3 ,3},
{"INC",	"DX",	"",	0x43 ,2},
{"INC",	"SI",	"",	0x46 ,2},
{"INC",	"SP",	"",	0x44 ,2},
{"JMP",	"AX",	"",	0xFFED ,3},
{"JMP",	"BP",	"",	0xFFE5 ,3},
{"JMP",	"BX",	"",	0xFFE3 ,3},
{"JMP",	"CX",	"",	0xFFE2 ,3},
{"JMP",	"DI",	"",	0xFFE7 ,3},
{"JMP",	"DX",	"",	0xFFE3 ,3},
{"JMP",	"SI",	"",	0xFFE6 ,3},
{"JMP",	"SP",	"",	0xFFE4 ,3},
{"LODSB","",	"",	0xAC ,2},
{"LODSW","",	"",	0xAD ,2},
{"MOVS","",	"",	0xBA4 ,2},
{"MOVSW","",	"",	0xA5 ,2},
{"MUL",	"AH",	"",	0xF6E4 ,3},
{"MUL",	"AL",	"",	0xF6E0 ,3},
{"MUL",	"AX",	"",	0xF7E0 ,3},
{"MUL",	"BH",	"",	0xF6E7 ,3},
{"MUL",	"BL",	"",	0xF6E3 ,3},
{"MUL",	"BP",	"",	0xF7E5 ,3},
{"MUL",	"BX",	"",	0xF7E3 ,3},
{"MUL",	"CH",	"",	0xF6E5 ,3},
{"MUL",	"CL",	"",	0xF6E2 ,3},
{"MUL",	"CX",	"",	0xF7E2 ,3},
{"MUL",	"DH",	"",	0xF6E6 ,3},
{"MUL",	"DI",	"",	0xF7E7 ,3},
{"MUL",	"DL",	"",	0xF6E3 ,3},
{"MUL",	"DX",	"",	0xF7E3 ,3},
{"MUL",	"SI",	"",	0xF7E6 ,3},
{"MUL",	"SP",	"",	0xF7E4 ,3},
{"NEG",	"AH",	"",	0xF6DC ,3},
{"NEG",	"AL",	"",	0xF6D8 ,3},
{"NEG",	"AX",	"",	0xF7D8 ,3},
{"NEG",	"BH",	"",	0xF6DF ,3},
{"NEG",	"BL",	"",	0xF6DB ,3},
{"NEG",	"BP",	"",	0xF7DD ,3},
{"NEG",	"BX",	"",	0xF7DB ,3},
{"NEG",	"CH",	"",	0xF6DD ,3},
{"NEG",	"CL",	"",	0xF6D9 ,3},
{"NEG",	"CX",	"",	0xF7D9 ,3},
{"NEG",	"DH",	"",	0xF6DE ,3},
{"NEG",	"DI",	"",	0xF7DF ,3},
{"NEG",	"DL",	"",	0xF6DA ,3},
{"NEG",	"DX",	"",	0xF7DA ,3},
{"NEG",	"SI",	"",	0xF7DE ,3},
{"NEG",	"SP",	"",	0xF7DC ,3},
{"NOT",	"AH",	"",	0xF627 ,3},
{"NOT",	"AL",	"",	0xF600 ,3},
{"NOT",	"AX",	"",	0xF700 ,3},
{"NOT",	"BH",	"",	0xF6D7 ,3},
{"NOT",	"BL",	"",	0xF6D3 ,3},
{"NOT",	"BP",	"",	0xF7D5 ,3},
{"NOT",	"BX",	"",	0xF7D3 ,3},
{"NOT",	"CH",	"",	0xF6D5 ,3},
{"NOT",	"CL",	"",	0xF6D2 ,3},
{"NOT",	"CX",	"",	0xF7D2 ,3},
{"NOT",	"DH",	"",	0xF6D6 ,3},
{"NOT",	"DI",	"",	0xF7D7 ,3},
{"NOT",	"DL",	"",	0xF6D3 ,3},
{"NOT",	"DX",	"",	0xF7D3 ,3},
{"NOT",	"SI",	"",	0xF7D6 ,3},
{"NOT",	"SP",	"",	0xF7D4 ,3},
{"POP",	"AX",	"",	0x58 ,2},
{"POP",	"BX",	"",	0x5B ,2},
{"POP",	"CX",	"",	0x59 ,2},
{"POP",	"DX",	"",	0x5A ,2},
{"SCAS","",	"",	0xBAE ,2},
{"SCASW","",	"",	0xAF ,2},
{"STOSB","",	"",	0xAA ,2},
{"STOSW","",	"",	0xAB ,2},
{"IDIV","AH",	"",	0xF6FC ,3},
{"IDIV","AL",	"",	0xF6F8 ,3},
{"IDIV","AX",	"",	0xF7F8 ,3},
{"IDIV","BH",	"",	0xF6FF ,3},
{"IDIV","BL",	"",	0xF6FB ,3},
{"IDIV","BP",	"",	0xF7FD ,3},
{"IDIV","BX",	"",	0xF7FB ,3},
{"IDIV","CH",	"",	0xF6FD ,3},
{"IDIV","CL",	"",	0xF6F9 ,3},
{"IDIV","CX",	"",	0xF7F9 ,3},
{"IDIV","DH",	"",	0xF6FE ,3},
{"IDIV","DI",	"",	0xF7FF ,3},
{"IDIV","DL",	"",	0xF6FA ,3},
{"IDIV","DX",	"",	0xF7FA ,3},
{"IDIV","SI",	"",	0xF7FE ,3},
{"IDIV","SP",	"",	0xF7FC ,3},
{"IMUL","AH",	"",	0xF6EC ,3},
{"IMUL","AL",	"",	0xF6E8 ,3},
{"IMUL","AX",	"",	0xF7E8 ,3},
{"IMUL","BH",	"",	0xF6EF ,3},
{"IMUL","BL",	"",	0xF6EB ,3},
{"IMUL","BP",	"",	0xF7ED ,3},
{"IMUL","BX",	"",	0xF7EB ,3},
{"IMUL","CH",	"",	0xF6ED ,3},
{"IMUL","CL",	"",	0xF6E9 ,3},
{"IMUL","CX",	"",	0xF7E9 ,3},
{"IMUL","DH",	"",	0xF6EE ,3},
{"IMUL","DI",	"",	0xF7EF ,3},
{"IMUL","DL",	"",	0xF6EA ,3},
{"IMUL","DX",	"",	0xF7EA ,3},
{"IMUL","SI",	"",	0xF7EE ,3},
{"IMUL","SP",	"",	0xF7EC ,3},
{"PUSH","AX",	"",	0x50 ,2},
{"PUSH","BX",	"",	0x53 ,2},
{"PUSH","CX",	"",	0x52 ,2},
{"PUSH","DX",	"",	0x53 ,2},
{"IN",  "AX",  "DX",	0xED ,2},
{"JMP",	"",	"",	0xFFA6 ,3},
{"JMP",	"[BP]",	"",	0xFF66 ,3},
{"JMP",	"[DI]",	"",	0xFF35 ,3},
{"JMP",	"[SI]",	"",	0xFF34 ,3},
{"OR",	"AH",	"",	0x80CC ,3},
{"OR",	"AH",	"AL",	0x0AE0 ,3},
{"OR",	"AH",	"BH",	0x0AE7 ,3},
{"OR",	"AH",	"BL",	0x0AE3 ,3},
{"OR",	"AH",	"CH",	0x0AE5 ,3},
{"OR",	"AH",	"CL",	0x0AE2 ,3},
{"OR",	"AH",	"DH",	0x0AE6 ,3},
{"OR",	"AH",	"DL",	0x0AE3 ,3},
{"OR",	"AL",	"",	0x0C ,2},
{"OR",	"AL",	"AH",	0x0AC4 ,3},
{"OR",	"AL",	"BH",	0x0AC7 ,3},
{"OR",	"AL",	"BL",	0x0AC3 ,3},
{"OR",	"AL",	"CH",	0x0AC5 ,3},
{"OR",	"AL",	"CL",	0x0AC2 ,3},
{"OR",	"AL",	"DH",	0x0AC6 ,3},
{"OR",	"AL",	"DL",	0x0AC3 ,3},
{"OR",	"AX",	"BP",	0x0BC5 ,3},
{"OR",	"AX",	"BX",	0x0BC3 ,3},
{"OR",	"AX",	"CX",	0x0BC2 ,3},
{"OR",	"AX",	"DI",	0x0BC7 ,3},
{"OR",	"AX",	"DX",	0x0BC3 ,3},
{"OR",	"AX",	"SI",	0x0BC6 ,3},
{"OR",	"AX",	"SP",	0x0BC4 ,3},
{"OR",	"BH",	"",	0x80CF ,3},
{"OR",	"BH",	"AH",	0x0AFC ,3},
{"OR",	"BH",	"AL",	0x0AF8 ,3},
{"OR",	"BH",	"BL",	0x0AFB ,3},
{"OR",	"BH",	"CH",	0x0AFD ,3},
{"OR",	"BH",	"CL",	0x0AF9 ,3},
{"OR",	"BH",	"DH",	0x0AFE ,3},
{"OR",	"BH",	"DL",	0x0AFA ,3},
{"OR",	"BL",	"",	0x80CB ,3},
{"OR",	"BL",	"AH",	0x0ADC ,3},
{"OR",	"BL",	"AL",	0x0AD8 ,3},
{"OR",	"BL",	"BH",	0x0ADF ,3},
{"OR",	"BL",	"CH",	0x0ADD ,3},
{"OR",	"BL",	"CL",	0x0AD9 ,3},
{"OR",	"BL",	"DH",	0x0ADE ,3},
{"OR",	"BL",	"DL",	0x0ADA ,3},
{"OR",	"BP",	"DI",	0x0BEF ,3},
{"OR",	"BP",	"SI",	0x0BEE ,3},
{"OR",	"BP",	"SP",	0x0BEC ,3},
{"OR",	"BX",	"AX",	0x0BD8 ,3},
{"OR",	"BX",	"BP",	0x0BDD ,3},
{"OR",	"BX",	"CX",	0x0BD9 ,3},
{"OR",	"BX",	"DI",	0x0BDF ,3},
{"OR",	"BX",	"DX",	0x0BDA ,3},
{"OR",	"BX",	"SI",	0x0BDE ,3},
{"OR",	"BX",	"SP",	0x0BDC ,3},
{"OR",	"CH",	"",	0x80CD ,3},
{"OR",	"CH",	"AH",	0x0AEC ,3},
{"OR",	"CH",	"AL",	0x0AE8 ,3},
{"OR",	"CH",	"BH",	0x0AEF ,3},
{"OR",	"CH",	"BL",	0x0AEB ,3},
{"OR",	"CH",	"CL",	0x0AE9 ,3},
{"OR",	"CH",	"DH",	0x0AEE ,3},
{"OR",	"CH",	"DL",	0x0AEA ,3},
{"OR",	"CL",	"",	0x80C9 ,3},
{"OR",	"CL",	"AH",	0x0ACC ,3},
{"OR",	"CL",	"AL",	0x0AC8 ,3},
{"OR",	"CL",	"BH",	0x0ACF ,3},
{"OR",	"CL",	"BL",	0x0ACB ,3},
{"OR",	"CL",	"CH",	0x0ACD ,3},
{"OR",	"CL",	"DH",	0x0ACE ,3},
{"OR",	"CL",	"DL",	0x0ACA ,3},
{"OR",	"CX",	"AX",	0x0BC8 ,3},
{"OR",	"CX",	"BP",	0x0BCD ,3},
{"OR",	"CX",	"BX",	0x0BCB ,3},
{"OR",	"CX",	"DI",	0x0BCF ,3},
{"OR",	"CX",	"DX",	0x0BCA ,3},
{"OR",	"CX",	"SI",	0x0BCE ,3},
{"OR",	"CX",	"SP",	0x0BEC ,3},
{"OR",	"DH",	"",	0x80CE ,3},
{"OR",	"DH",	"AH",	0x0AF4 ,3},
{"OR",	"DH",	"AL",	0x0AF0 ,3},
{"OR",	"DH",	"BH",	0x0AF7 ,3},
{"OR",	"DH",	"BL",	0x0AF3 ,3},
{"OR",	"DH",	"CH",	0x0AF5 ,3},
{"OR",	"DH",	"CL",	0x0AF2 ,3},
{"OR",	"DH",	"DL",	0x0AF3 ,3},
{"OR",	"DI",	"BP",	0x0BFD ,3},
{"OR",	"DI",	"SI",	0x0BFE ,3},
{"OR",	"DI",	"SP",	0x0BFC ,3},
{"OR",	"DL",	"",	0x80CA ,3},
{"OR",	"DL",	"AH",	0x0AD4 ,3},
{"OR",	"DL",	"AL",	0x0AD0 ,3},
{"OR",	"DL",	"BH",	0x0AD7 ,3},
{"OR",	"DL",	"BL",	0x0AD3 ,3},
{"OR",	"DL",	"CH",	0x0AD5 ,3},
{"OR",	"DL",	"CL",	0x0AD2 ,3},
{"OR",	"DL",	"DH",	0x0AD6 ,3},
{"OR",	"DX",	"AX",	0x0BD0 ,3},
{"OR",	"DX",	"BP",	0x0BD5 ,3},
{"OR",	"DX",	"BX",	0x0BD3 ,3},
{"OR",	"DX",	"CX",	0x0BD2 ,3},
{"OR",	"DX",	"DI",	0x0BD7 ,3},
{"OR",	"DX",	"SI",	0x0BD6 ,3},
{"OR",	"DX",	"SP",	0x0BD4 ,3},
{"OR",	"SI",	"BP",	0x0BF5 ,3},
{"OR",	"SI",	"DI",	0x0BF7 ,3},
{"OR",	"SI",	"SP",	0x0BF4 ,3},
{"OR",	"SP",	"BP",	0x0BE5 ,3},
{"OR",	"SP",	"DI",	0x0BE7 ,3},
{"OR",	"SP",	"SI",	0x09F4 ,3},
{"MOV",	"AH",	"",	0xB4 ,2},
{"MOV",	"AH",	"AL",	0x8AE0 ,3},
{"MOV",	"AH",	"BH",	0x8AE7 ,3},
{"MOV",	"AH",	"BL",	0x8AE3 ,3},
{"MOV",	"AH",	"CH",	0x8AE5 ,3},
{"MOV",	"AH",	"CL",	0x8AE2 ,3},
{"MOV",	"AH",	"DH",	0x8AE6 ,3},
{"MOV",	"AH",	"DL",	0x8AE3 ,3},
{"MOV",	"AL",	"",	0xB0 ,2},
{"MOV",	"AL",	"AH",	0x8AC4 ,3},
{"MOV",	"AL",	"BH",	0x8AC7 ,3},
{"MOV",	"AL",	"BL",	0x8AC3 ,3},
{"MOV",	"AL",	"CH",	0x8AC5 ,3},
{"MOV",	"AL",	"CL",	0x8AC2 ,3},
{"MOV",	"AL",	"DH",	0x8AC6 ,3},
{"MOV",	"AL",	"DL",	0x8AC3 ,3},
{"MOV",	"AX",	"BP",	0x8BC5 ,3},
{"MOV",	"AX",	"BX",	0x8BC3 ,3},
{"MOV",	"AX",	"CX",	0x8BC2 ,3},
{"MOV",	"AX",	"DI",	0x8BC7 ,3},
{"MOV",	"AX",	"DX",	0x8BC3 ,3},
{"MOV",	"AX",	"SI",	0x8BC6 ,3},
{"MOV",	"AX",	"SP",	0x8BC4 ,3},
{"MOV",	"BH",	"",	0xB7 ,2},
{"MOV",	"BH",	"AH",	0x8AFC ,3},
{"MOV",	"BH",	"AL",	0x8AF8 ,3},
{"MOV",	"BH",	"BL",	0x8AFB ,3},
{"MOV",	"BH",	"CH",	0x8AFD ,3},
{"MOV",	"BH",	"CL",	0x8AF9 ,3},
{"MOV",	"BH",	"DH",	0x8AFE ,3},
{"MOV",	"BH",	"DL",	0x8AFA ,3},
{"MOV",	"BL",	"",	0xB3 ,2},
{"MOV",	"BL",	"AH",	0x8ADC ,3},
{"MOV",	"BL",	"AL",	0x8AD8 ,3},
{"MOV",	"BL",	"BH",	0x8ADF ,3},
{"MOV",	"BL",	"CH",	0x8ADD ,3},
{"MOV",	"BL",	"CL",	0x8AD9 ,3},
{"MOV",	"BL",	"DH",	0x8ADE ,3},
{"MOV",	"BL",	"DL",	0x8ADA ,3},
{"MOV",	"BP",	"DI",	0x8BEF ,3},
{"MOV",	"BP",	"SI",	0x8BEE ,3},
{"MOV",	"BP",	"SP",	0x8BEC ,3},
{"MOV",	"BX",	"AX",	0x8BD8 ,3},
{"MOV",	"BX",	"BP",	0x8BDD ,3},
{"MOV",	"BX",	"CX",	0x8BD9 ,3},
{"MOV",	"BX",	"DI",	0x8BDF ,3},
{"MOV",	"BX",	"DX",	0x8BDA ,3},
{"MOV",	"BX",	"SI",	0x8BDE ,3},
{"MOV",	"BX",	"SP",	0x8BDC ,3},
{"MOV",	"CH",	"",	0xB5 ,2},
{"MOV",	"CH",	"AH",	0x8AEC ,3},
{"MOV",	"CH",	"AL",	0x8AE8 ,3},
{"MOV",	"CH",	"BH",	0x8AEF ,3},
{"MOV",	"CH",	"BL",	0x8AEB ,3},
{"MOV",	"CH",	"CL",	0x8AE9 ,3},
{"MOV",	"CH",	"DH",	0x8AEE ,3},
{"MOV",	"CH",	"DL",	0x8AEA ,3},
{"MOV",	"CL",	"",	0xB2 ,2},
{"MOV",	"CL",	"AH",	0x8ACC ,3},
{"MOV",	"CL",	"AL",	0x8AC8 ,3},
{"MOV",	"CL",	"BH",	0x8ACF ,3},
{"MOV",	"CL",	"BL",	0x8ACB ,3},
{"MOV",	"CL",	"CH",	0x8ACD ,3},
{"MOV",	"CL",	"DH",	0x8ACE ,3},
{"MOV",	"CL",	"DL",	0x8ACA ,3},
{"MOV",	"CX",	"AX",	0x8BC8 ,3},
{"MOV",	"CX",	"BP",	0x8BCD ,3},
{"MOV",	"CX",	"BX",	0x8BCB ,3},
{"MOV",	"CX",	"DI",	0x8BCF ,3},
{"MOV",	"CX",	"DX",	0x8BCA ,3},
{"MOV",	"CX",	"SI",	0x8BCE ,3},
{"MOV",	"CX",	"SP",	0x8BCC ,3},
{"MOV",	"DH",	"",	0xB6 ,2},
{"MOV",	"DH",	"AH",	0x8AF4 ,3},
{"MOV",	"DH",	"AL",	0x8AF0 ,3},
{"MOV",	"DH",	"BH",	0x8AF7 ,3},
{"MOV",	"DH",	"BL",	0x8AF3 ,3},
{"MOV",	"DH",	"CH",	0x8AF5 ,3},
{"MOV",	"DH",	"CL",	0x8AF2 ,3},
{"MOV",	"DH",	"DL",	0x8AF3 ,3},
{"MOV",	"DI",	"BP",	0x8BFD ,3},
{"MOV",	"DI",	"SI",	0x8BFE ,3},
{"MOV",	"DI",	"SP",	0x8BFC ,3},
{"MOV",	"DL",	"",	0xB3 ,2},
{"MOV",	"DL",	"AH",	0x8AD4 ,3},
{"MOV",	"DL",	"AL",	0x8AD0 ,3},
{"MOV",	"DL",	"BH",	0x8AD7 ,3},
{"MOV",	"DL",	"BL",	0x8AD3 ,3},
{"MOV",	"DL",	"CH",	0x8AD5 ,3},
{"MOV",	"DL",	"CL",	0x8AD2 ,3},
{"MOV",	"DL",	"DH",	0x8AD6 ,3},
{"MOV",	"DX",	"AX",	0x8BD0 ,3},
{"MOV",	"DX",	"BP",	0x8BD5 ,3},
{"MOV",	"DX",	"BX",	0x8BD3 ,3},
{"MOV",	"DX",	"CX",	0x8BD2 ,3},
{"MOV",	"DX",	"DI",	0x8BD7 ,3},
{"MOV",	"DX",	"SI",	0x8BD6 ,3},
{"MOV",	"DX",	"SP",	0x8BD4 ,3},
{"MOV",	"SI",	"BP",	0x8BF5 ,3},
{"MOV",	"SI",	"DI",	0x8BF7 ,3},
{"MOV",	"SI",	"SP",	0x8BF4 ,3},
{"MOV",	"SP",	"BP",	0x8BE5 ,3},
{"MOV",	"SP",	"DI",	0x8BE7 ,3},
{"MOV",	"SP",	"SI",	0x8BE6 ,3},
{"OUT",	"DX",	"AL",	0xEE ,2},
{"OUT",	"DX",	"AX",	0xEF ,2}};
   /*********************************************************************
			  END OF GLOBAL DATA SECTION
   **********************************************************************/
  /**********************************************************************
			   Function Prototypes
   ***********************************************************************/
  void parse(char *str);/*Breaks the Single line instruction*/

  unsigned indexMCT(char *s1, char *s2, char *s3);/*Finds matching code
  MC Table */

  SymbolTable Encode(char *str1,char *str2,char *str3);
  /*Returns the requisite values for pass 1 */

  int isPSOP(char *s);/*Tells if given str is a Pseudo Operand */

  int isMachineCode(char *str);/*Tells if given str is a mnemonic */

  int isDataLabel(char *str);/*Tells if given str is a data label */

  int isRegister(char *s);/*Tells if given str a register */

  int isPunctuation(char *s);/*Tells if given char is a punctuation */

  int isLABEL_CODE_ADDR(char *s);/*Identifies Code Label */

  int isLABEL_DATA_ADDR(char *st);/*Tells if data [addr]*/

  int isNumber(char *s);/*Identifies the Hexa number in a string */

  unsigned hexRead(char *s);/*Reads the Hexa num from string ommiting h*/

  void printcode(FILE *fp, Instruction,unsigned lc);/*prints hex code in file */

  Instruction createInstruction(char *m, char *o1, char *o2);
  /*Processes the Literal and gives the codes */

  int stricmp( char *, char *);/*Compares 2 strings
  ignoring the case */
  void pass1(char *fname);
  void pass2(char *fname1, char *fname2);
  /**********************************************************************
		       End of Function Prototypes
   ***********************************************************************/

   /*********************************************************************
			 External Functions
   **********************************************************************/
   void parse(char *str)
   {
      int i,j,l,c;
      numWords = 0;
      for(i = 0 ; i <10 ; i ++ )
	 for(j = 0 ; j <100 ; j ++ )
	    STATEMENT[i][j] = '\0';
      for(i = 0 ; (str[i]==' ' || str[i]=='\t' || str[i] == '\n') ; i++);

      for(l=0,c=0 ; str[i]!='\0' ; i ++ )
      {
	 if(str[i] == ';')
	    break;
	 if ( !(str[i]  ==' '|| str[i]  =='\t' || str[i]==',')
	     &&(str[i-1]==' '|| str[i-1]=='\t' || str[i-1]==',') && c!=0)
	 {
	     l++; c = 0;
	 }
	 switch(str[i])

	 {
	  case ':':

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -