📄 assemble.c
字号:
#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 + -