/[smarc]/smarc/src/spasm/kod.c
ViewVC logotype

Diff of /smarc/src/spasm/kod.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by batonik, Tue Dec 31 00:38:13 2002 UTC revision 1.2 by batonik, Tue Dec 31 12:17:23 2002 UTC
# Line 9  Line 9 
9  #include "serr.h"  #include "serr.h"
10  #include "kod.h"  #include "kod.h"
11  #include "dane.h"  #include "dane.h"
12    #include "rozkazy.h"
13    
14  Lista   *listaRozkazow  = NULL;  Lista   *listaRozkazow  = NULL;
15    
# Line 22  Lista  *DodajRozkaz (ulint rozkaz, char j Line 23  Lista  *DodajRozkaz (ulint rozkaz, char j
23          nowyRozkaz.jestAdres = jest;          nowyRozkaz.jestAdres = jest;
24          nowyRozkaz.nrLinii = numerLinii;          nowyRozkaz.nrLinii = numerLinii;
25          nowyRozkaz.nastElem = NULL;          nowyRozkaz.nastElem = NULL;
26          if (!jest)          nowyRozkaz.link = etykLink;
         {  
                 nowyRozkaz.link = etykLink;  
         }  
27    
28          return (DodajDoListy(&listaRozkazow, nowyRozkaz));          return (DodajDoListy(&listaRozkazow, nowyRozkaz));
29  }  }
# Line 54  int    _ZapiszRozkaz (FILE *plik, ulint roz Line 52  int    _ZapiszRozkaz (FILE *plik, ulint roz
52  int     ZapiszRozkazyDoPliku(FILE *wyjscie)  int     ZapiszRozkazyDoPliku(FILE *wyjscie)
53  {  {
54          Lista   *aktRozkaz = listaRozkazow, *etyk;          Lista   *aktRozkaz = listaRozkazow, *etyk;
55          ulint   rozkaz, adres;          ulint   rozkaz;
56            int     nowyAdres;
57    
58          if (aktRozkaz == NULL)          if (aktRozkaz == NULL)
59                  return(1);                  return(1);
60    
61          while (aktRozkaz)          while (aktRozkaz)
62          {          {
63                  if (aktRozkaz->jestAdres)                  if (!aktRozkaz->jestAdres)
                 {  
                         if (_ZapiszRozkaz(wyjscie, aktRozkaz->dane.rozkaz))  
                                 return(1);  
                 }  
                 else  
64                  {                  {
65                          etyk = aktRozkaz->link;                          etyk = aktRozkaz->link;
66    
# Line 77  int    ZapiszRozkazyDoPliku(FILE *wyjscie) Line 71  int    ZapiszRozkazyDoPliku(FILE *wyjscie)
71                          {                          {
72                                  numerLinii = aktRozkaz->nrLinii;                                  numerLinii = aktRozkaz->nrLinii;
73                                  yyerror(E_NOLABEL);                                  yyerror(E_NOLABEL);
74                                  return(1);                                  return(-1);
75                          }                          }
76    
77                          //zmieniamy słowo kodowe uwzględniając adres                          //zmieniamy słowo kodowe uwzględniając adres
78                          rozkaz = aktRozkaz->dane.rozkaz;                          rozkaz = aktRozkaz->dane.rozkaz;
79                          adres = etyk->adres;                          nowyAdres = etyk->adres - aktRozkaz->adres;
80    
81                            if (CZY_BRANCH(rozkaz))
82                            {
83                                    rozkaz |= BRANCH_DSP(nowyAdres);
84                            }
85                            else if (CZY_CALL(rozkaz))
86                            {
87                                    rozkaz |= CALL_DSP(nowyAdres);
88                            }
89                            else if (CZY_SETHI(rozkaz))
90                            {
91                                    rozkaz |= SETHI_IMM(etyk->adres);
92                            }
93                            else
94                            {
95                                    //jeżeli żaden z powyższych przypadków, to
96                                    // było %lo(ETYKIETA/STAŁA)
97                                    rozkaz |= ROZKAZ_IMM(etyk->adres & 0x3FF);
98                            }
99                            aktRozkaz->dane.rozkaz = rozkaz;
100                  }                  }
101    
102                    if (_ZapiszRozkaz(wyjscie, aktRozkaz->dane.rozkaz))
103                            return(1);
104    
105                  aktRozkaz = aktRozkaz->nastElem;                  aktRozkaz = aktRozkaz->nastElem;
106          }          }
107    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26