Асемблери. Принципи написання та функціонування компіляторів програм, страница 8

  n1=n;  clearbuf;

     while (s!='\n'){

               s=str[j++];

                     if(s==';')break;

               if (s!=' '&& s!=','&&s!='\n'&&s!='\t'){

                buf[x]=s;               x++;}

       if (s!=','&&s!='\n'){

                  if (s==' ' && buf[0]!=0){

                      clearbuf;       x=0;}}

       else {

               if (z==0){

                   for(i=5;i<18;i++){

                      if (strcmp(buf,reg[i])==0){

                                  z++;clearbuf;x=0;break;}

                                   } continue; }

               if (z==1){

                   while (n1->next!=NULL){

                      if (a>0) n1=n1->next;

                   if (strcmp(buf,n1->name)==0){

       if (i<10 && strcmp(n1->type,"dw")==0){

                  c++;clearbuf;x=0;                 break;}

       if (i>9 && strcmp(n1->type,"db")==0){

                  c++;clearbuf;x=0;                 break;}

                                     else {z=0;break;}}

                      a++; } } }}

      if (z==0) {int er=0;error(er,buf,str);}}

void NamePrint()

{   int a=0;   n1=n;lab1=lab;

   fprintf(file_w,"\n\t\tИмя     Тип     Размер  Смещение\n");

   while (n1->next!=NULL){

      if (a>0) n1=n1->next;

      fprintf(file_w,"\t\t%s\t%s\t%d\t%s:%04X\n",n1->name,n1->type,n1->chislo,u->segmname,n1->smesh);

      a++;}

   fprintf(file_w,"\t\t%s\t%s\t\t%s:%04X\n",lab1->label,"near",u1->segmname,lab1->labdisp);

   lab1=lab1->next;

   fprintf(file_w,"\t\t%s\t%s\t\t%s:%04X\n",lab1->label,"near",u1->segmname,lab1->labdisp);

   fprintf(file_w,"\t\t\t\t\t\t\t\t\t\n");}

void timedat(void)

{

   struct date d;   struct time t;   getdate(&d);

   gettime(&t);

fprintf(file_w,"\n\n\t\t%s\t%d/%d/%d\n","DATE",d.da_day,d.da_mon,d.da_year);

fprintf(file_w,"\t\t%s\t%d:%02d:%02d\n","TIME",t.ti_hour, t.ti_min, t.ti_sec);}



Файл коду:

data segment

a   db   55

b   dw  44

c   db   33

data ends

code segment

assume ds:data,cs:code

begin:

                mov         ax,data

                mov         ds,ax

                mov         cl,a

@a:         xor         bx,bx

                add         bx,b

                sub         bh,c

                loop        @a

                mov         c,bh

code ends

   end begin


Файл листингу:

1 0000                         data segment

 2 0000 0037                           a   db   55

 3 0001 002C                          b   dw  44

 4 0003 0021                           c   db   33

 5 0004                                    data ends

 6 0000                                    code segment

 7 0000                                    assume ds:data,cs:code

 8 0000                                    begin:

 9 0000  B8 0000s                       mov         ax,data

10 0003  8E D8                                       mov         ds,ax

11 0005  8A 0E 0000r                mov         cl,a

12 0009  33 DE                       @a:         xor         bx,bx

13 000B  03 1E 0001r                 add         bx,b

14 000F  2A 3E 0003r                            sub         bh,c

15 0013  E2 F4                                       loop        @a

16 0015  88 3E 0003r                 mov         c,bh

17 0019                                   code ends

18                                   end begin

                        DATE  7/6/2001

                        TIME  17:16:54

                        Имя     Тип     Размер  Смещение

                        a          db        55        data:0000

                        b          dw       44        data:0001

                        c          db        33        data:0003

                        begin   near                 code:0000

                        @a       near                 code:0009

Висновок: в процесі лабораторної роботи були вивчені принципи компіляції програм, а також методи написання компіляторів.