if (!seg_open_flag)
{
printf("\nline %i:segment not open",number);
exit(0);
}
seg_open_flag=0;
fprintf(F1,"\t%10i %6.4X \t%-s",number,offs,cmdbuf);
printf("\t%10i %6.4X \t%-s",number,offs,cmdbuf);
Seg_End=offs;
break;
default: /* db или dw */
if (!seg_open_flag)
{
printf("\nline %i:segment not open",number);
exit(0);
}
parsep=parse(lexbuf,parsep);
if (strtoi(lexbuf,&n))
{
printf("\nLine%d",number);
printf(":Bad number");
exit(0);
}
if (op1num==DIR_DB)
{
fprintf(F1,"\t%10i %6.4X %-6.2X \t%-s ",number,offs,n,cmdbuf);
printf("\t%10i %6.4X %-6.2X \t%-s ",number,offs,n,cmdbuf);
}
if (op1num==DIR_DW)
{
fprintf(F1,"\t%10i %6.4X %-6.4X \t%-s ",number,offs,n,cmdbuf);
printf("\t%10i %6.4X %-6.4X \t%-s ",number,offs,n,cmdbuf);
}
if (op1num==DIR_DD)
{
fprintf(F1,"\t%10i %6.4X %-6.8X \t%-s ",number,offs,n,cmdbuf);
printf("\t%10i %6.4X %-6.8X \t%-s ",number,offs,n,cmdbuf);
}
parsep=cmdbuf;
parsep=parse(symtab[j].mnem,parsep);
offs=offs+op1num;
break;
}
goto begin;
}
}
if (!operandcount[opcode]) /* Если директива end */
{
if (seg_open_flag)
{
printf("\nline %i: segment open",number);
exit(0);
}
parsep = parse(lexbuf,parsep);
if (parsetyp)
{
printf("\n%i:Must comand not must have reguest an operand",number);
exit(0);
}
fprintf(F1,"\t%10i \t%25s",number,cmdbuf);
printf("\t%10i \t%25s",number,cmdbuf);
goto runlist;
}
if (!seg_open_flag)
{
printf("\nline %i: segment not open",number);
exit(0);
}
parsep=parse(lexbuf,parsep);
if (operandcount[opcode]) /* Проверка на наличие операндов у команды */
if (parsetyp!=PT_WORD)
{
printf("\nLine %d",number);
printf(":Must comand not reguest an operands");
exit(0);
}
/* Анализ первого операнда */
if(lexbuf)
for(int ee=0;ee<k;ee++)
{
if(strcmp(labeltab[ee].mnem,lexbuf)==0)
{
ttt=labeltab[ee].ef_adr-offs;
fprintf(F1,"\t%10i %6.4X %s %02X %-s",number,offs,mnem[opcode],ttt,cmdbuf);
printf("\t%10i %6.4X %s %02X %-s",number,offs,mnem[opcode],ttt,cmdbuf);
offs+=2;
goto begin;
}
}
if (0>(op1num=findstr(registers,lexbuf)))
{
printf("\nline %d",number);
printf(":Undefiner symbol %s",lexbuf);
exit(0);
}
if (operandcount[opcode]==1) /* Если команда с одним операндом */
{
if (opcode==OP_DEC) op1num=op1num+8;
fprintf(F1,"\t%10i %6.4X %s%c %-s",number,offs,mnem[opcode],cop2[op1num],cmdbuf);
printf("\t%10i %6.4X %s%c %-s",number,offs,mnem[opcode],cop2[op1num],cmdbuf);
offs++;
goto begin;
}
/* Проверка на наличие второго операнда : если он есть , то ошибка */
parsep=parse(lexbuf,parsep);
if (operandcount[opcode]==1)
if (parsetyp==PT_WORD)
{
printf("\nLine%d",number);
printf(":The command must be have one operand");
exit(0);
}
if (parsetyp) /* Проверка на наличие разделителя между операндами*/
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.