Pass 2 Assembler
Pass 2 Assembler
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void display();
return buffer;
}
int n = abs(value);
int i = 0;
while (n)
{
int r = n % base;
if (r >= 10)
{
buffer[i++] = 65 + (r - 10);
}
else
{
buffer[i++] = 48 + r;
}
n = n / base;
}
if (i == 0)
{
buffer[i++] = '0';
}
if (value < 0 && base == 10)
{
buffer[i++] = '-';
}
buffer[i] = '\0';
int main()
{
char a[10], ad[10], label[10], opcode[10], operand[10], symbol[10];
int start, diff, i, address, add, len, actual_len, finaddr, prevaddr,
j = 0;
char mnemonic[15][15] = {"LDA", "STA", "LDCH", "STCH"};
char code[15][15] = {"03", "0F", "53", "57"};
fclose(fp3);
fp3 = fopen("intermediate.txt", "r");
else
{
while (strcmp(opcode, mnemonic[j]) != 0)
j++;
if (strcmp(operand, "COPY") == 0)
fprintf(fp1, "%d\t%s\t%s\t%s\t%s0000\n", address, label,
opcode, operand, code[j]);
else
{
rewind(fp2);
fscanf(fp2, "%s%d", symbol, &add);
while (strcmp(operand, symbol) != 0)
fscanf(fp2, "%s%d", symbol, &add);
fprintf(fp1, "%d\t%s\t%s\t%s\t%s%d\n", address, label,
opcode, operand, code[j], add);
fprintf(fp4, "^%s%d", code[j], add);
}
}
fclose(fp4);
fclose(fp3);
fclose(fp2);
fclose(fp1);
display();
return 0;
}
void display()
{
char ch;
FILE *fp1, *fp2, *fp3, *fp4;
INTERMEDIATE.TXT
COPY START 2000
2000 ** LDA FIVE
2003 ** STA ALPHA
2006 ** LDCH CHARZ
2009 ** STCH C1
2012 ALPHA RESW 1
2015 FIVE WORD 5
2018 CHARZ BYTE C'Z'
2019 C1 RESB 1
2020 ** END **
SYMTAB.TXT
ALPHA 2012
FIVE 2015
CHARZ 2018
C1 2019
OUTPUT.TXT
COPY START 2000
2000 ** LDA FIVE 032015
2003 ** STA ALPHA 0F2012
2006 ** LDCH CHARZ 532018
2009 ** STCH C1 572019
2012 ALPHA RESW 1
2015 FIVE WORD 5 000005
2018 CHARZ BYTE C'Z' 5A
2019 C1 RESB 1
2020 ** END **
OBJCODE.TXT
H^COPY^002000^002020
T^002000^19^032015^0F2012^532018^572019^000005^5A
E^002000